2 * "Brick" shader demo. Uses the example shaders from chapter 6 of
3 * the OpenGL Shading Language "orange" book.
16 #include "shaderutil.h"
19 static char *FragProgFile
= "CH06-brick.frag";
20 static char *VertProgFile
= "CH06-brick.vert";
22 /* program/shader objects */
23 static GLuint fragShader
;
24 static GLuint vertShader
;
25 static GLuint program
;
27 static struct uniform_info Uniforms
[] = {
29 { "LightPosition", 3, GL_FLOAT
, { 0.1, 0.1, 9.0, 0}, -1 },
31 { "BrickColor", 3, GL_FLOAT
, { 0.8, 0.2, 0.2, 0 }, -1 },
32 { "MortarColor", 3, GL_FLOAT
, { 0.6, 0.6, 0.6, 0 }, -1 },
33 { "BrickSize", 2, GL_FLOAT
, { 1.0, 0.3, 0, 0 }, -1 },
34 { "BrickPct", 2, GL_FLOAT
, { 0.9, 0.8, 0, 0 }, -1 },
41 static GLfloat xRot
= 0.0f
, yRot
= 0.0f
, zRot
= 0.0f
;
49 glClear(GL_COLOR_BUFFER_BIT
| GL_DEPTH_BUFFER_BIT
);
52 glRotatef(xRot
, 1.0f
, 0.0f
, 0.0f
);
53 glRotatef(yRot
, 0.0f
, 1.0f
, 0.0f
);
54 glRotatef(zRot
, 0.0f
, 0.0f
, 1.0f
);
57 glTexCoord2f(0, 0); glVertex2f(-2, -2);
58 glTexCoord2f(1, 0); glVertex2f( 2, -2);
59 glTexCoord2f(1, 1); glVertex2f( 2, 2);
60 glTexCoord2f(0, 1); glVertex2f(-2, 2);
70 Reshape(int width
, int height
)
72 glViewport(0, 0, width
, height
);
73 glMatrixMode(GL_PROJECTION
);
75 glFrustum(-1.0, 1.0, -1.0, 1.0, 5.0, 25.0);
76 glMatrixMode(GL_MODELVIEW
);
78 glTranslatef(0.0f
, 0.0f
, -15.0f
);
85 glDeleteShader_func(fragShader
);
86 glDeleteShader_func(vertShader
);
87 glDeleteProgram_func(program
);
88 glutDestroyWindow(win
);
93 Key(unsigned char key
, int x
, int y
)
115 SpecialKey(int key
, int x
, int y
)
117 const GLfloat step
= 3.0f
;
144 if (!ShadersSupported())
149 vertShader
= CompileShaderFile(GL_VERTEX_SHADER
, VertProgFile
);
150 fragShader
= CompileShaderFile(GL_FRAGMENT_SHADER
, FragProgFile
);
151 program
= LinkShaders(vertShader
, fragShader
);
153 glUseProgram_func(program
);
155 InitUniforms(program
, Uniforms
);
157 assert(glGetError() == 0);
159 glClearColor(0.4f
, 0.4f
, 0.8f
, 0.0f
);
161 printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER
));
163 assert(glIsProgram_func(program
));
164 assert(glIsShader_func(fragShader
));
165 assert(glIsShader_func(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 glutInitWindowPosition( 0, 0);
191 glutInitWindowSize(400, 400);
192 glutInitDisplayMode(GLUT_RGB
| GLUT_DOUBLE
| GLUT_DEPTH
);
193 win
= glutCreateWindow(argv
[0]);
194 glutReshapeFunc(Reshape
);
195 glutKeyboardFunc(Key
);
196 glutSpecialFunc(SpecialKey
);
197 glutDisplayFunc(Redisplay
);
198 ParseOptions(argc
, argv
);