2
* Test GLSL 1.20 gl_PointCoord fragment program attribute.
15
#include "shaderutil.h"
18
static GLint WinWidth = 300, WinHeight = 300;
19
static char *FragProgFile = NULL;
20
static char *VertProgFile = NULL;
21
static GLuint fragShader;
22
static GLuint vertShader;
23
static GLuint program;
26
static GLenum Filter = GL_NEAREST;
32
glClear(GL_COLOR_BUFFER_BIT);
34
/* draw one point/sprite */
38
glVertex2f(WinWidth / 2.0f, WinHeight / 2.0f);
47
Reshape(int width, int height)
49
glViewport(0, 0, width, height);
50
glMatrixMode(GL_PROJECTION);
52
glOrtho(0, width, 0, height, -1, 1);
54
glMatrixMode(GL_MODELVIEW);
65
glDeleteShader(fragShader);
66
glDeleteShader(vertShader);
67
glDeleteProgram(program);
68
glutDestroyWindow(win);
73
Key(unsigned char key, int x, int y)
93
GLubyte image[SZ][SZ][4];
96
for (i = 0; i < SZ; i++) {
97
for (j = 0; j < SZ; j++) {
102
image[i][j][3] = 255;
105
image[i][j][0] = j * 255 / (SZ-1);
106
image[i][j][1] = i * 255 / (SZ-1);
108
image[i][j][3] = 255;
113
glActiveTexture(GL_TEXTURE0); /* unit 0 */
114
glBindTexture(GL_TEXTURE_2D, 42);
115
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, SZ, SZ, 0,
116
GL_RGBA, GL_UNSIGNED_BYTE, image);
117
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, Filter);
118
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, Filter);
119
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
120
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
128
static const char *fragShaderText =
130
"uniform sampler2D tex0; \n"
132
" gl_FragColor = texture2D(tex0, gl_PointCoord.xy, 0.0); \n"
134
static const char *vertShaderText =
136
" gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
139
if (!ShadersSupported())
142
vertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText);
143
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText);
144
program = LinkShaders(vertShader, fragShader);
146
glUseProgram(program);
148
tex0 = glGetUniformLocation(program, "tex0");
149
printf("Uniforms: tex0: %d\n", tex0);
151
glUniform1i(tex0, 0); /* tex unit 0 */
153
/*assert(glGetError() == 0);*/
155
glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
157
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
159
assert(glIsProgram(program));
160
assert(glIsShader(fragShader));
161
assert(glIsShader(vertShader));
165
glEnable(GL_POINT_SPRITE);
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
glutInitWindowSize(WinWidth, WinHeight);
191
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
192
win = glutCreateWindow(argv[0]);
194
glutReshapeFunc(Reshape);
195
glutKeyboardFunc(Key);
196
glutDisplayFunc(Redisplay);
197
ParseOptions(argc, argv);