1 /* Test fragment shader */
12 static GLuint fragShader
;
13 static GLuint vertShader
;
14 static GLuint program
;
16 static GLfloat xpos
= 0, ypos
= 0;
22 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
25 glTranslatef(xpos
, ypos
, 0);
27 glBegin(GL_TRIANGLES
);
29 glVertex2f(-0.9, -0.9);
31 glVertex2f( 0.9, -0.9);
43 Reshape(int width
, int height
)
45 glViewport(0, 0, width
, height
);
46 glMatrixMode(GL_PROJECTION
);
48 glOrtho(-1, 1, -1, 1, -1, 1);
49 glMatrixMode(GL_MODELVIEW
);
57 glDeleteShader(fragShader
);
58 glDeleteShader(vertShader
);
59 glDeleteProgram(program
);
60 glutDestroyWindow(win
);
65 Key(unsigned char key
, int x
, int y
)
81 SpecialKey(int key
, int x
, int y
)
83 const GLfloat step
= 0.1;
107 LoadAndCompileShader(GLuint shader
, const char *text
)
111 glShaderSource(shader
, 1, (const GLchar
**) &text
, NULL
);
113 glCompileShader(shader
);
115 glGetShaderiv(shader
, GL_COMPILE_STATUS
, &stat
);
119 glGetShaderInfoLog(shader
, 1000, &len
, log
);
120 fprintf(stderr
, "fslight: problem compiling shader:\n%s\n", log
);
127 CheckLink(GLuint prog
)
130 glGetProgramiv(prog
, GL_LINK_STATUS
, &stat
);
134 glGetProgramInfoLog(prog
, 1000, &len
, log
);
135 fprintf(stderr
, "Linker error:\n%s\n", log
);
143 /* fragment color is a function of fragment position: */
144 static const char *fragShaderText
=
146 " gl_FragColor = gl_FragCoord * vec4(0.005); \n"
147 " //gl_FragColor = gl_Color; \n"
148 " //gl_FragColor = vec4(1, 0, 0.5, 0); \n"
151 static const char *vertShaderText
=
152 "varying vec3 normal;\n"
154 " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
155 " normal = gl_NormalMatrix * gl_Normal;\n"
160 version
= (const char *) glGetString(GL_VERSION
);
161 if (version
[0] != '2' || version
[1] != '.') {
162 printf("This program requires OpenGL 2.x, found %s\n", version
);
166 fragShader
= glCreateShader(GL_FRAGMENT_SHADER
);
167 LoadAndCompileShader(fragShader
, fragShaderText
);
170 vertShader
= glCreateShader(GL_VERTEX_SHADER
);
171 LoadAndCompileShader(vertShader
, vertShaderText
);
174 program
= glCreateProgram();
175 glAttachShader(program
, fragShader
);
177 glAttachShader(program
, vertShader
);
179 glLinkProgram(program
);
181 glUseProgram(program
);
183 assert(glGetError() == 0);
185 glClearColor(0.3f
, 0.3f
, 0.3f
, 0.0f
);
187 printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER
));
192 main(int argc
, char *argv
[])
194 glutInit(&argc
, argv
);
195 glutInitWindowPosition( 0, 0);
196 glutInitWindowSize(200, 200);
197 glutInitDisplayMode(GLUT_RGB
| GLUT_DOUBLE
| GLUT_DEPTH
);
198 win
= glutCreateWindow(argv
[0]);
200 glutReshapeFunc(Reshape
);
201 glutKeyboardFunc(Key
);
202 glutSpecialFunc(SpecialKey
);
203 glutDisplayFunc(Redisplay
);