FILE* fp = fopen(“shader.txt”,“r”);
fseek(fp,0,SEEK_END);
DWORD filesize = ftell(fp);
fseek(fp,0,SEEK_SET);
vertex_program = new char[filesize];
fread(vertex_program,1,filesize,fp);
glEnable(GL_VERTEX_PROGRAM_ARB);
glGenProgramsARB(1,&progid);
glBindProgramARB(GL_VERTEX_PROGRAM_ARB,progid);
glProgramStringARB(GL_VERTEX_PROGRAM_ARB,GL_PROGRAM_FORMAT_ASCII_ARB,filesize,vertex_program);
if(GL_INVALID_OPERATION == glGetError())
{
unsigned char *errString;
errString = (unsigned char*)glGetString(GL_PROGRAM_ERROR_STRING_ARB);
return false;
}
I returned a string, “Invalid character”, from glGetString-function. what that mean?
I cannot find syntax or etc error…
!!ARBvp1.0
ATTRIB iPos = vertex.postion;
ATTRIB iColor = vertex.color;
OUTPUT oPos = result.position;
OUTPUT oColor = result.color;
#no calculation
MOV oPos,iPos;
MOV iColor,oColor;
END
very simple!
because only test!
You’re forgetting to 0-terminate the program string. You need to allocate one more byte, and then set that (final) byte to 0.
Hi ,
what about position instead of postion !
and also MOV oColor ,iColor;
then it should “work” ,although you won´t
see anything until you transform your vertex
to clip space I think.
You’re forgetting to 0-terminate the program string. You need to allocate one more byte, and then set that (final) byte to 0.
Hmm… I did it. but the result isn’t a different.
Hi ,
what about position instead of postion !
and also MOV oColor ,iColor;
then it should “work” ,although you won´t
see anything until you transform your vertex
to clip space I think.
well,I think that the vertex program is not work because glProgramStringARB-function occur error(you know it,“Invalid charater”).
[This message has been edited by white_cat (edited 06-21-2003).]
The program string doesn’t have to be null terminated as long as you’re passing in the length correctly, though of course it never hurts either.
I had a problem similar to this when I first started experimenting with vertex programs. I was either reading in too many or too few characters from the file, I forget which. In any case, opening the file in binary mode seemed to fix things right up. Give it a try…
fp = fopen(filename.c_str(), “rb”);
fseek(fp, 0, SEEK_END);
stringLength = ftell(fp);
fseek(fp, 0, SEEK_SET);
programString = (char*)malloc(stringLength + 1);
fread(programString, 1, stringLength, fp);
programString[stringLength] = 0;
fclose(fp);
glGenProgramsARB(1, &programObject);
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, programObject);
glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, stringLength, programString);
[This message has been edited by secnuop (edited 06-21-2003).]
+_+ Ho~ good!
I know!
must read to binary type…
A factor of problem was New-line code,usually enter code in ascii, add from read file.
thx for your reply.
[This message has been edited by white_cat (edited 06-21-2003).]