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);
}