GLuint program_object; void init() { const char *vertex_source = "void main(void) {" " gl_Position = ftransform();" " gl_BackColor = gl_FrontColor = gl_Color;" " gl_TexCoord[0].xy = gl_MultiTexCoord0.xy;" "}"; const char *fragment_source = "uniform sampler2D sample_0;" "void main(void) {" " gl_FragColor = gl_Color;" " gl_FragColor *= texture2D(sample_0, gl_TexCoord[0].st);" "}"; GLuint vertex_shader = glCreateShader(GL_VERTEX_SHADER); glShaderSource(vertex_shader, 1, &vertex_source, NULL); glCompileShader(vertex_shader); GLuint fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(fragment_shader, 1, &fragment_source, NULL); glCompileShader(fragment_shader); program_object = glCreateProgram(); glAttachShader(program_object, vertex_shader); glAttachShader(program_object, fragment_shader); glLinkProgram(program_object); glDeleteShader(fragment_shader); glDeleteShader(vertex_source); } // for rendering glUseProgram(program_object); // draw here glUseProgram(NULL); // for cleanup glDeleteProgram(program_object);