1 2#include <stdio.h> 3#include <string.h> 4#include <stdlib.h> 5#include <GL/glew.h> 6#include "glut_wrap.h" 7 8 9 10static void Init( void ) 11{ 12 /* scale of 10.0 gives me a visible result on nv hardware. 13 */ 14 static const char *modulate2D = 15 "!!ARBfp1.0\n" 16 "MUL result.color, fragment.position.z, {10.0}.x; \n" 17 "END" 18 ; 19 GLuint modulateProg; 20 21 if (!GLEW_ARB_fragment_program) { 22 printf("Error: GL_ARB_fragment_program not supported!\n"); 23 exit(1); 24 } 25 printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); 26 27 /* Setup the fragment program */ 28 glGenProgramsARB(1, &modulateProg); 29 glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, modulateProg); 30 glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, 31 strlen(modulate2D), (const GLubyte *)modulate2D); 32 33 printf("glGetError = 0x%x\n", (int) glGetError()); 34 printf("glError(GL_PROGRAM_ERROR_STRING_ARB) = %s\n", 35 (char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB)); 36 37 glEnable(GL_FRAGMENT_PROGRAM_ARB); 38 39 glClearColor(.3, .3, .3, 0); 40} 41 42static void Reshape(int width, int height) 43{ 44 45 glViewport(0, 0, (GLint)width, (GLint)height); 46 47 glMatrixMode(GL_PROJECTION); 48 glLoadIdentity(); 49 glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); 50 glMatrixMode(GL_MODELVIEW); 51} 52 53static void Key(unsigned char key, int x, int y) 54{ 55 56 switch (key) { 57 case 27: 58 exit(1); 59 default: 60 break; 61 } 62 63 glutPostRedisplay(); 64} 65 66static void Draw(void) 67{ 68 glClear(GL_COLOR_BUFFER_BIT); 69 70 glBegin(GL_TRIANGLES); 71 glColor3f(0,0,1); 72 glVertex3f( 0.9, -0.9, -40.0); 73 glColor3f(1,0,0); 74 glVertex3f( 0.9, 0.9, -40.0); 75 glColor3f(0,1,0); 76 glVertex3f(-0.9, 0.0, -25.0); 77 glEnd(); 78 79 glFlush(); 80 81 82} 83 84 85int main(int argc, char **argv) 86{ 87 GLenum type; 88 89 glutInit(&argc, argv); 90 91 glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250); 92 93 type = GLUT_RGB; 94 type |= GLUT_SINGLE; 95 glutInitDisplayMode(type); 96 97 if (glutCreateWindow("First Tri") == GL_FALSE) { 98 exit(1); 99 } 100 101 glewInit(); 102 103 Init(); 104 105 glutReshapeFunc(Reshape); 106 glutKeyboardFunc(Key); 107 glutDisplayFunc(Draw); 108 glutMainLoop(); 109 return 0; 110} 111