Listing 1
static GLuint vert_prog, frag_prog;
char *vert_str, *frag_str; // Read from text file
void init(void) {
// Load programs
glEnable(GL_VERTEX_PROGRAM_ARB);
glGenProgramsARB(1, &vert_prog);
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, vert_prog);
glProgramStringARB(GL_VERTEX_PROGRAM_ARB,
GL_PROGRAM_FORMAT_ASCII_ARB,
strlen(vert_str), vert_str);
glEnable(GL_FRAGMENT_PROGRAM_ARB);
glGenProgramsARB(1, &frag_prog);
glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, frag_prog);
glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB,
GL_PROGRAM_FORMAT_ASCII_ARB,
strlen(frag_str), frag_str);
// Set a parameter for fragment program
glProgramLocalParameter4fARB(GL_FRAGMENT_PROGRAM_ARB, 0
1.0, 1.0, 0.0, 0.0);
}
void render()
{
glEnable(GL_VERTEX_PROGRAM_ARB);
glEnable(GL_FRAGMENT_PROGRAM_ARB);
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, vert_prog);
glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, frag_prog);
// Draw scene
// ...
glDisable(GL_VERTEX_PROGRAM_ARB);
glDisable(GL_FRAGMENT_PROGRAM_ARB);
}