1 /* Test fragment shader
18 # include <GLUT/glut.h>
24 static GLuint fragShader;
25 static GLuint vertShader;
26 static GLuint program;
28 static GLfloat xpos = 0, ypos = 0;
32 LoadAndCompileShader(GLuint shader, const char *text)
34 const GLint length = -1;
37 glShaderSource(shader, 1, (const GLchar **) &text, &length);
39 glCompileShader(shader);
41 glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
45 glGetShaderInfoLog(shader, 1000, &len, log);
46 fprintf(stderr, "fslight: problem compiling shader:\n%s\n", log);
53 CheckLink(GLuint prog)
56 glGetProgramiv(prog, GL_LINK_STATUS, &stat);
60 glGetProgramInfoLog(prog, 1000, &len, log);
61 fprintf(stderr, "Linker error:\n%s\n", log);
69 static const char *fragShaderText =
71 " gl_FragColor = gl_Color; \n"
73 static const char *vertShaderText =
75 " gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;\n"
76 " gl_FrontColor = gl_Color;\n"
79 if (!GLEW_VERSION_2_0) {
80 printf("This program requires OpenGL 2.x\n");
84 fragShader = glCreateShader(GL_FRAGMENT_SHADER);
85 LoadAndCompileShader(fragShader, fragShaderText);
87 vertShader = glCreateShader(GL_VERTEX_SHADER);
88 LoadAndCompileShader(vertShader, vertShaderText);
90 program = glCreateProgram();
91 glAttachShader(program, fragShader);
92 glAttachShader(program, vertShader);
93 glLinkProgram(program);
95 glUseProgram(program);
97 assert(glGetError() == 0);
99 glClearColor(0.3f, 0.1f, 0.3f, 1.0f);
104 Reshape(int width, int height)
106 glViewport(0, 0, width, height);
107 glMatrixMode(GL_PROJECTION);
109 glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
110 glMatrixMode(GL_MODELVIEW);
117 glClear(GL_COLOR_BUFFER_BIT);
119 glBegin(GL_TRIANGLES);
121 glVertex3f(-0.9, -0.9, -30.0);
123 glVertex3f( 0.9, -0.9, -30.0);
125 glVertex3f( 0.0, 0.9, -30.0);
132 glDeleteShader(fragShader);
133 glDeleteShader(vertShader);
134 glDeleteProgram(program);
135 glutDestroyWindow(win);
142 main(int argc, char **argv)
144 glutInit(&argc, argv);
145 glutInitWindowSize(250, 250);
146 glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
147 win = glutCreateWindow(argv[0]);
149 glutReshapeFunc(Reshape);
150 glutDisplayFunc(Draw);