2 * Test very basic glsl functionality (identity vertex and fragment shaders).
3 * Brian Paul & Stephane Marchesin
16 #include "shaderutil.h"
19 static char *FragProgFile
= NULL
;
20 static char *VertProgFile
= NULL
;
21 static GLuint fragShader
;
22 static GLuint vertShader
;
23 static GLuint program
;
25 static GLboolean anim
= GL_FALSE
;
26 static GLfloat xRot
= 0.0f
, yRot
= 0.0f
;
33 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
35 glBegin(GL_TRIANGLES
);
37 glVertex3f(-0.9, -0.9, 0.0);
39 glVertex3f( 0.9, -0.9, 0.0);
41 glVertex3f( 0.0, 0.9, 0.0);
51 yRot
= glutGet(GLUT_ELAPSED_TIME
) * 0.1;
57 Reshape(int width
, int height
)
59 glViewport(0, 0, width
, height
);
60 glMatrixMode(GL_PROJECTION
);
62 glMatrixMode(GL_MODELVIEW
);
72 glDeleteShader_func(fragShader
);
73 glDeleteShader_func(vertShader
);
74 glDeleteProgram_func(program
);
75 glutDestroyWindow(win
);
80 Key(unsigned char key
, int x
, int y
)
104 SpecialKey(int key
, int x
, int y
)
106 const GLfloat step
= 3.0f
;
132 static const char *fragShaderText
=
134 " gl_FragColor = vec4(1.0,0.0,0.0,1.0);\n"
136 static const char *vertShaderText
=
138 " gl_Position = gl_Vertex;\n"
141 if (!ShadersSupported())
147 fragShader
= CompileShaderFile(GL_FRAGMENT_SHADER
, FragProgFile
);
149 fragShader
= CompileShaderText(GL_FRAGMENT_SHADER
, fragShaderText
);
152 vertShader
= CompileShaderFile(GL_VERTEX_SHADER
, VertProgFile
);
154 vertShader
= CompileShaderText(GL_VERTEX_SHADER
, vertShaderText
);
156 program
= LinkShaders(vertShader
, fragShader
);
158 glUseProgram_func(program
);
160 /*assert(glGetError() == 0);*/
162 glClearColor(0.3f
, 0.3f
, 0.3f
, 0.0f
);
163 glEnable(GL_DEPTH_TEST
);
165 printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER
));
167 assert(glIsProgram_func(program
));
168 assert(glIsShader_func(fragShader
));
169 assert(glIsShader_func(vertShader
));
176 ParseOptions(int argc
, char *argv
[])
179 for (i
= 1; i
< argc
; i
++) {
180 if (strcmp(argv
[i
], "-fs") == 0) {
181 FragProgFile
= argv
[i
+1];
183 else if (strcmp(argv
[i
], "-vs") == 0) {
184 VertProgFile
= argv
[i
+1];
191 main(int argc
, char *argv
[])
193 glutInit(&argc
, argv
);
194 glutInitWindowPosition( 0, 0);
195 glutInitWindowSize(200, 200);
196 glutInitDisplayMode(GLUT_RGB
| GLUT_DOUBLE
| GLUT_DEPTH
);
197 win
= glutCreateWindow(argv
[0]);
198 glutReshapeFunc(Reshape
);
199 glutKeyboardFunc(Key
);
200 glutSpecialFunc(SpecialKey
);
201 glutDisplayFunc(Redisplay
);
204 ParseOptions(argc
, argv
);