2 * Test GLSL gl_FragCoord fragment program attribute.
3 * Color the quad's fragments according to their window position.
19 #include "shaderutil.h"
22 static GLint WinWidth
= 200, WinHeight
= 200;
23 static char *FragProgFile
= NULL
;
24 static char *VertProgFile
= NULL
;
25 static GLuint fragShader
;
26 static GLuint vertShader
;
27 static GLuint program
;
29 static GLboolean Anim
= GL_TRUE
;
30 static GLfloat PosX
= 0.0, PosY
= 0.0;
36 float r
= (WinWidth
< WinHeight
) ? WinWidth
: WinHeight
;
37 float a
= glutGet(GLUT_ELAPSED_TIME
) * 0.001;
39 PosX
= WinWidth
/ 2 + r
* cos(a
);
40 PosY
= WinHeight
/ 2 + r
* sin(a
);
49 glClear(GL_COLOR_BUFFER_BIT
);
52 glTranslatef(PosX
, PosY
, 0.0);
61 glutSolidSphere(50, 20, 10);
70 Reshape(int width
, int height
)
72 glViewport(0, 0, width
, height
);
73 glMatrixMode(GL_PROJECTION
);
75 glOrtho(0, width
, 0, height
, -55, 55);
77 glMatrixMode(GL_MODELVIEW
);
88 glDeleteShader_func(fragShader
);
89 glDeleteShader_func(vertShader
);
90 glDeleteProgram_func(program
);
91 glutDestroyWindow(win
);
96 Key(unsigned char key
, int x
, int y
)
105 glutIdleFunc(Anim
? Idle
: NULL
);
119 static const char *fragShaderText
=
121 " vec4 scale = vec4(.005, 0.005, 0.5, 1.0);\n"
122 " gl_FragColor = gl_FragCoord * scale; \n"
124 static const char *vertShaderText
=
126 " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
129 if (!ShadersSupported())
134 vertShader
= CompileShaderText(GL_VERTEX_SHADER
, vertShaderText
);
135 fragShader
= CompileShaderText(GL_FRAGMENT_SHADER
, fragShaderText
);
136 program
= LinkShaders(vertShader
, fragShader
);
138 glUseProgram_func(program
);
140 /*assert(glGetError() == 0);*/
142 glClearColor(0.3f
, 0.3f
, 0.3f
, 0.0f
);
144 printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER
));
146 assert(glIsProgram_func(program
));
147 assert(glIsShader_func(fragShader
));
148 assert(glIsShader_func(vertShader
));
155 ParseOptions(int argc
, char *argv
[])
158 for (i
= 1; i
< argc
; i
++) {
159 if (strcmp(argv
[i
], "-fs") == 0) {
160 FragProgFile
= argv
[i
+1];
162 else if (strcmp(argv
[i
], "-vs") == 0) {
163 VertProgFile
= argv
[i
+1];
170 main(int argc
, char *argv
[])
172 glutInit(&argc
, argv
);
173 glutInitWindowPosition( 0, 0);
174 glutInitWindowSize(WinWidth
, WinHeight
);
175 glutInitDisplayMode(GLUT_RGB
| GLUT_DOUBLE
);
176 win
= glutCreateWindow(argv
[0]);
177 glutReshapeFunc(Reshape
);
178 glutKeyboardFunc(Key
);
179 glutDisplayFunc(Redisplay
);
180 ParseOptions(argc
, argv
);
182 glutIdleFunc(Anim
? Idle
: NULL
);