2 * Test GLSL gl_FragCoord fragment program attribute.
3 * Color the quad's fragments according to their window position.
20 #include "shaderutil.h"
23 static GLint WinWidth
= 200, WinHeight
= 200;
24 static char *FragProgFile
= NULL
;
25 static char *VertProgFile
= NULL
;
26 static GLuint fragShader
;
27 static GLuint vertShader
;
28 static GLuint program
;
30 static GLboolean Anim
= GL_TRUE
;
31 static GLfloat PosX
= 0.0, PosY
= 0.0;
37 float r
= (WinWidth
< WinHeight
) ? WinWidth
: WinHeight
;
38 float a
= glutGet(GLUT_ELAPSED_TIME
) * 0.001;
40 PosX
= WinWidth
/ 2 + r
* cos(a
);
41 PosY
= WinHeight
/ 2 + r
* sin(a
);
50 glClear(GL_COLOR_BUFFER_BIT
);
53 glTranslatef(PosX
, PosY
, 0.0);
62 glutSolidSphere(50, 20, 10);
71 Reshape(int width
, int height
)
73 glViewport(0, 0, width
, height
);
74 glMatrixMode(GL_PROJECTION
);
76 glOrtho(0, width
, 0, height
, -55, 55);
78 glMatrixMode(GL_MODELVIEW
);
89 glDeleteShader_func(fragShader
);
90 glDeleteShader_func(vertShader
);
91 glDeleteProgram_func(program
);
92 glutDestroyWindow(win
);
97 Key(unsigned char key
, int x
, int y
)
106 glutIdleFunc(Anim
? Idle
: NULL
);
120 static const char *fragShaderText
=
122 " vec4 scale = vec4(.005, 0.005, 0.5, 1.0);\n"
123 " gl_FragColor = gl_FragCoord * scale; \n"
125 static const char *vertShaderText
=
127 " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
130 if (!ShadersSupported())
135 vertShader
= CompileShaderText(GL_VERTEX_SHADER
, vertShaderText
);
136 fragShader
= CompileShaderText(GL_FRAGMENT_SHADER
, fragShaderText
);
137 program
= LinkShaders(vertShader
, fragShader
);
139 glUseProgram_func(program
);
141 /*assert(glGetError() == 0);*/
143 glClearColor(0.3f
, 0.3f
, 0.3f
, 0.0f
);
145 printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER
));
147 assert(glIsProgram_func(program
));
148 assert(glIsShader_func(fragShader
));
149 assert(glIsShader_func(vertShader
));
156 ParseOptions(int argc
, char *argv
[])
159 for (i
= 1; i
< argc
; i
++) {
160 if (strcmp(argv
[i
], "-fs") == 0) {
161 FragProgFile
= argv
[i
+1];
163 else if (strcmp(argv
[i
], "-vs") == 0) {
164 VertProgFile
= argv
[i
+1];
171 main(int argc
, char *argv
[])
173 glutInit(&argc
, argv
);
174 glutInitWindowPosition( 0, 0);
175 glutInitWindowSize(WinWidth
, WinHeight
);
176 glutInitDisplayMode(GLUT_RGB
| GLUT_DOUBLE
);
177 win
= glutCreateWindow(argv
[0]);
179 glutReshapeFunc(Reshape
);
180 glutKeyboardFunc(Key
);
181 glutDisplayFunc(Redisplay
);
182 ParseOptions(argc
, argv
);
184 glutIdleFunc(Anim
? Idle
: NULL
);