2 * Test very basic glsl functionality (identity vertex and fragment shaders).
3 * Brian Paul & Stephane Marchesin
17 #include "shaderutil.h"
20 static char *FragProgFile
= NULL
;
21 static char *VertProgFile
= NULL
;
22 static GLuint fragShader
;
23 static GLuint vertShader
;
24 static GLuint program
;
26 static GLboolean anim
= GL_FALSE
;
27 static GLfloat xRot
= 0.0f
, yRot
= 0.0f
;
34 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
36 glBegin(GL_TRIANGLES
);
38 glVertex3f(-0.9, -0.9, 0.0);
40 glVertex3f( 0.9, -0.9, 0.0);
42 glVertex3f( 0.0, 0.9, 0.0);
52 yRot
= glutGet(GLUT_ELAPSED_TIME
) * 0.1;
58 Reshape(int width
, int height
)
60 glViewport(0, 0, width
, height
);
61 glMatrixMode(GL_PROJECTION
);
63 glMatrixMode(GL_MODELVIEW
);
73 glDeleteShader_func(fragShader
);
74 glDeleteShader_func(vertShader
);
75 glDeleteProgram_func(program
);
76 glutDestroyWindow(win
);
81 Key(unsigned char key
, int x
, int y
)
105 SpecialKey(int key
, int x
, int y
)
107 const GLfloat step
= 3.0f
;
133 static const char *fragShaderText
=
135 " gl_FragColor = vec4(1.0,0.0,0.0,1.0);\n"
137 static const char *vertShaderText
=
139 " gl_Position = gl_Vertex;\n"
142 if (!ShadersSupported())
148 fragShader
= CompileShaderFile(GL_FRAGMENT_SHADER
, FragProgFile
);
150 fragShader
= CompileShaderText(GL_FRAGMENT_SHADER
, fragShaderText
);
153 vertShader
= CompileShaderFile(GL_VERTEX_SHADER
, VertProgFile
);
155 vertShader
= CompileShaderText(GL_VERTEX_SHADER
, vertShaderText
);
157 program
= LinkShaders(vertShader
, fragShader
);
159 glUseProgram_func(program
);
161 /*assert(glGetError() == 0);*/
163 glClearColor(0.3f
, 0.3f
, 0.3f
, 0.0f
);
164 glEnable(GL_DEPTH_TEST
);
166 printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER
));
168 assert(glIsProgram_func(program
));
169 assert(glIsShader_func(fragShader
));
170 assert(glIsShader_func(vertShader
));
177 ParseOptions(int argc
, char *argv
[])
180 for (i
= 1; i
< argc
; i
++) {
181 if (strcmp(argv
[i
], "-fs") == 0) {
182 FragProgFile
= argv
[i
+1];
184 else if (strcmp(argv
[i
], "-vs") == 0) {
185 VertProgFile
= argv
[i
+1];
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
);
206 ParseOptions(argc
, argv
);