2 * Test very basic glsl functionality (identity vertex and fragment shaders).
3 * Brian Paul & Stephane Marchesin
14 #include "shaderutil.h"
17 static char *FragProgFile
= NULL
;
18 static char *VertProgFile
= NULL
;
19 static GLuint fragShader
;
20 static GLuint vertShader
;
21 static GLuint program
;
23 static GLboolean anim
= GL_FALSE
;
24 static GLfloat xRot
= 0.0f
, yRot
= 0.0f
;
31 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
33 glBegin(GL_TRIANGLES
);
35 glVertex3f(-0.9, -0.9, 0.0);
37 glVertex3f( 0.9, -0.9, 0.0);
39 glVertex3f( 0.0, 0.9, 0.0);
49 yRot
= glutGet(GLUT_ELAPSED_TIME
) * 0.1;
55 Reshape(int width
, int height
)
57 glViewport(0, 0, width
, height
);
58 glMatrixMode(GL_PROJECTION
);
60 glMatrixMode(GL_MODELVIEW
);
70 glDeleteShader(fragShader
);
71 glDeleteShader(vertShader
);
72 glDeleteProgram(program
);
73 glutDestroyWindow(win
);
78 Key(unsigned char key
, int x
, int y
)
102 SpecialKey(int key
, int x
, int y
)
104 const GLfloat step
= 3.0f
;
130 static const char *fragShaderText
=
132 " gl_FragColor = vec4(1.0,0.0,0.0,1.0);\n"
134 static const char *vertShaderText
=
136 " gl_Position = gl_Vertex;\n"
139 if (!ShadersSupported())
143 fragShader
= CompileShaderFile(GL_FRAGMENT_SHADER
, FragProgFile
);
145 fragShader
= CompileShaderText(GL_FRAGMENT_SHADER
, fragShaderText
);
148 vertShader
= CompileShaderFile(GL_VERTEX_SHADER
, VertProgFile
);
150 vertShader
= CompileShaderText(GL_VERTEX_SHADER
, vertShaderText
);
152 program
= LinkShaders(vertShader
, fragShader
);
154 glUseProgram(program
);
156 /*assert(glGetError() == 0);*/
158 glClearColor(0.3f
, 0.3f
, 0.3f
, 0.0f
);
159 glEnable(GL_DEPTH_TEST
);
161 printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER
));
163 assert(glIsProgram(program
));
164 assert(glIsShader(fragShader
));
165 assert(glIsShader(vertShader
));
172 ParseOptions(int argc
, char *argv
[])
175 for (i
= 1; i
< argc
; i
++) {
176 if (strcmp(argv
[i
], "-fs") == 0) {
177 FragProgFile
= argv
[i
+1];
179 else if (strcmp(argv
[i
], "-vs") == 0) {
180 VertProgFile
= argv
[i
+1];
187 main(int argc
, char *argv
[])
189 glutInit(&argc
, argv
);
190 glutInitWindowSize(200, 200);
191 glutInitDisplayMode(GLUT_RGB
| GLUT_DOUBLE
| GLUT_DEPTH
);
192 win
= glutCreateWindow(argv
[0]);
194 glutReshapeFunc(Reshape
);
195 glutKeyboardFunc(Key
);
196 glutSpecialFunc(SpecialKey
);
197 glutDisplayFunc(Redisplay
);
200 ParseOptions(argc
, argv
);