blob: 6f50993c98fc6044ecde304472b1392ccc7072f2 [file] [log] [blame]
Daniel Borcaa49a08d2004-02-16 07:31:29 +00001/*
2 * EXT_fog_coord.
3 *
4 * Based on glutskel.c by Brian Paul
5 * and NeHe's Volumetric fog tutorial!
6 *
7 * Daniel Borca
8 */
9
Daniel Borcaa49a08d2004-02-16 07:31:29 +000010#include <stdio.h>
11#include <stdlib.h>
12#include <math.h>
José Fonseca9aa73cf2009-02-01 12:00:07 +000013#include <GL/glew.h>
Daniel Borcaa49a08d2004-02-16 07:31:29 +000014#include <GL/glut.h>
15
Brianbadc3462007-04-16 17:56:13 -060016#define DEPTH 5.0f
Daniel Borcaa49a08d2004-02-16 07:31:29 +000017
Brianbadc3462007-04-16 17:56:13 -060018static PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointer_ext;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000019
Daniel Borcaa49a08d2004-02-16 07:31:29 +000020static GLfloat camz;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000021
22static GLint fogMode;
23static GLboolean fogCoord;
24static GLfloat fogDensity = 0.75;
Brianbadc3462007-04-16 17:56:13 -060025static GLfloat fogStart = 1.0, fogEnd = DEPTH;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000026static GLfloat fogColor[4] = {0.6f, 0.3f, 0.0f, 1.0f};
Brianbadc3462007-04-16 17:56:13 -060027static const char *ModeStr = NULL;
28static GLboolean Arrays = GL_FALSE;
29static GLboolean Texture = GL_TRUE;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000030
31
Brianbadc3462007-04-16 17:56:13 -060032static void
33Reset(void)
34{
35 fogMode = 1;
36 fogCoord = 1;
37 fogDensity = 0.75;
38 fogStart = 1.0;
39 fogEnd = DEPTH;
40 Arrays = GL_FALSE;
41 Texture = GL_TRUE;
42}
43
44
José Fonseca9aa73cf2009-02-01 12:00:07 +000045static void
46glFogCoordf_ext (GLfloat f)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000047{
José Fonseca9aa73cf2009-02-01 12:00:07 +000048 if (fogCoord)
49 glFogCoordfEXT(f);
Daniel Borcaa49a08d2004-02-16 07:31:29 +000050}
51
52
Brianbadc3462007-04-16 17:56:13 -060053static void
54PrintString(const char *s)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000055{
Brianbadc3462007-04-16 17:56:13 -060056 while (*s) {
57 glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s);
58 s++;
Brian Paul37c04972004-09-16 19:39:04 +000059 }
Daniel Borcaa49a08d2004-02-16 07:31:29 +000060}
61
62
Brianbadc3462007-04-16 17:56:13 -060063static void
64PrintInfo(void)
65{
66 char s[100];
67
68 glDisable(GL_FOG);
69 glColor3f(0, 1, 1);
70
71 sprintf(s, "Mode(m): %s Start(s/S): %g End(e/E): %g Density(d/D): %g",
72 ModeStr, fogStart, fogEnd, fogDensity);
73 glWindowPos2iARB(5, 20);
74 PrintString(s);
75
76 sprintf(s, "Arrays(a): %s glFogCoord(c): %s EyeZ(z/z): %g",
77 (Arrays ? "Yes" : "No"),
78 (fogCoord ? "Yes" : "No"),
79 camz);
80 glWindowPos2iARB(5, 5);
81 PrintString(s);
82}
83
84
85static int
86SetFogMode(GLint fogMode)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000087{
Brian Paul37c04972004-09-16 19:39:04 +000088 fogMode &= 3;
89 switch (fogMode) {
90 case 0:
Brianbadc3462007-04-16 17:56:13 -060091 ModeStr = "Off";
Brian Paul37c04972004-09-16 19:39:04 +000092 glDisable(GL_FOG);
Brian Paul37c04972004-09-16 19:39:04 +000093 break;
94 case 1:
Brianbadc3462007-04-16 17:56:13 -060095 ModeStr = "GL_LINEAR";
Brian Paul37c04972004-09-16 19:39:04 +000096 glEnable(GL_FOG);
97 glFogi(GL_FOG_MODE, GL_LINEAR);
98 glFogf(GL_FOG_START, fogStart);
99 glFogf(GL_FOG_END, fogEnd);
Brian Paul37c04972004-09-16 19:39:04 +0000100 break;
101 case 2:
Brianbadc3462007-04-16 17:56:13 -0600102 ModeStr = "GL_EXP";
Brian Paul37c04972004-09-16 19:39:04 +0000103 glEnable(GL_FOG);
104 glFogi(GL_FOG_MODE, GL_EXP);
105 glFogf(GL_FOG_DENSITY, fogDensity);
Brian Paul37c04972004-09-16 19:39:04 +0000106 break;
107 case 3:
Brianbadc3462007-04-16 17:56:13 -0600108 ModeStr = "GL_EXP2";
Brian Paul37c04972004-09-16 19:39:04 +0000109 glEnable(GL_FOG);
110 glFogi(GL_FOG_MODE, GL_EXP2);
111 glFogf(GL_FOG_DENSITY, fogDensity);
Brian Paul37c04972004-09-16 19:39:04 +0000112 break;
113 }
114 return fogMode;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000115}
116
117
Brianbadc3462007-04-16 17:56:13 -0600118static GLboolean
119SetFogCoord(GLboolean fogCoord)
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000120{
José Fonseca9aa73cf2009-02-01 12:00:07 +0000121 if (!GLEW_EXT_fog_coord) {
Brian Paul37c04972004-09-16 19:39:04 +0000122 return GL_FALSE;
123 }
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000124
Brian Paul37c04972004-09-16 19:39:04 +0000125 if (fogCoord) {
Brian Paul37c04972004-09-16 19:39:04 +0000126 glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
Brianbadc3462007-04-16 17:56:13 -0600127 }
128 else {
Brian Paul37c04972004-09-16 19:39:04 +0000129 glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FRAGMENT_DEPTH_EXT);
Brian Paul37c04972004-09-16 19:39:04 +0000130 }
131 return fogCoord;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000132}
133
134
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000135/* could reuse vertices */
136static GLuint vertex_index[] = {
137 /* Back */
138 0, 1, 2, 3,
139
140 /* Floor */
141 4, 5, 6, 7,
142
143 /* Roof */
144 8, 9, 10, 11,
145
146 /* Right */
147 12, 13, 14, 15,
148
149 /* Left */
150 16, 17, 18, 19
151};
152
153static GLfloat vertex_pointer[][3] = {
154 /* Back */
Brianbadc3462007-04-16 17:56:13 -0600155 {-1.0f,-1.0f,-DEPTH}, { 1.0f,-1.0f,-DEPTH}, { 1.0f, 1.0f,-DEPTH}, {-1.0f, 1.0f,-DEPTH},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000156
157 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600158 {-1.0f,-1.0f,-DEPTH}, { 1.0f,-1.0f,-DEPTH}, { 1.0f,-1.0f, 0.0}, {-1.0f,-1.0f, 0.0},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000159
160 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600161 {-1.0f, 1.0f,-DEPTH}, { 1.0f, 1.0f,-DEPTH}, { 1.0f, 1.0f, 0.0}, {-1.0f, 1.0f, 0.0},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000162
163 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600164 { 1.0f,-1.0f, 0.0}, { 1.0f, 1.0f, 0.0}, { 1.0f, 1.0f,-DEPTH}, { 1.0f,-1.0f,-DEPTH},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000165
166 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600167 {-1.0f,-1.0f, 0.0}, {-1.0f, 1.0f, 0.0}, {-1.0f, 1.0f,-DEPTH}, {-1.0f,-1.0f,-DEPTH}
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000168};
169
170static GLfloat texcoord_pointer[][2] = {
171 /* Back */
172 {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f},
173
174 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600175 {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, DEPTH}, {0.0f, DEPTH},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000176
177 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600178 {1.0f, 0.0f}, {0.0f, 0.0f}, {0.0f, DEPTH}, {1.0f, DEPTH},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000179
180 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600181 {0.0f, 1.0f}, {0.0f, 0.0f}, {DEPTH, 0.0f}, {DEPTH, 1.0f},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000182
183 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600184 {0.0f, 0.0f}, {0.0f, 1.0f}, {DEPTH, 1.0f}, {DEPTH, 0.0f}
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000185};
186
Brianbadc3462007-04-16 17:56:13 -0600187static GLfloat fogcoord_pointer[] = {
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000188 /* Back */
Brianbadc3462007-04-16 17:56:13 -0600189 DEPTH, DEPTH, DEPTH, DEPTH,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000190
191 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600192 DEPTH, DEPTH, 0.0, 0.0,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000193
194 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600195 DEPTH, DEPTH, 0.0, 0.0,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000196
197 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600198 0.0, 0.0, DEPTH, DEPTH,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000199
200 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600201 0.0, 0.0, DEPTH, DEPTH
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000202};
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000203
204
Brianbadc3462007-04-16 17:56:13 -0600205static void
206Display( void )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000207{
208 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
209 glLoadIdentity ();
210
Brianbadc3462007-04-16 17:56:13 -0600211 glTranslatef(0.0f, 0.0f, -camz);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000212
Brianbadc3462007-04-16 17:56:13 -0600213 SetFogMode(fogMode);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000214
Brianbadc3462007-04-16 17:56:13 -0600215 glColor3f(1, 1, 1);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000216
Brianbadc3462007-04-16 17:56:13 -0600217 if (Texture)
218 glEnable(GL_TEXTURE_2D);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000219
Brianbadc3462007-04-16 17:56:13 -0600220 if (Arrays) {
221 glEnableClientState(GL_VERTEX_ARRAY);
222 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
223 glDrawElements(GL_QUADS, sizeof(vertex_index) / sizeof(vertex_index[0]),
224 GL_UNSIGNED_INT, vertex_index);
225 glDisableClientState(GL_VERTEX_ARRAY);
226 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
227 }
228 else {
229 /* Back */
230 glBegin(GL_QUADS);
231 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
232 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
233 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
234 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
235 glEnd();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000236
Brianbadc3462007-04-16 17:56:13 -0600237 /* Floor */
238 glBegin(GL_QUADS);
239 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
240 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
241 glFogCoordf_ext(0.0f); glTexCoord2f(1.0f, DEPTH); glVertex3f( 1.0f,-1.0f,0.0);
242 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, DEPTH); glVertex3f(-1.0f,-1.0f,0.0);
243 glEnd();
244
245 /* Roof */
246 glBegin(GL_QUADS);
247 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
248 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
249 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, DEPTH); glVertex3f( 1.0f, 1.0f,0.0);
250 glFogCoordf_ext(0.0f); glTexCoord2f(1.0f, DEPTH); glVertex3f(-1.0f, 1.0f,0.0);
251 glEnd();
252
253 /* Right */
254 glBegin(GL_QUADS);
255 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,-1.0f,0.0);
256 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f,0.0);
257 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 0.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
258 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 1.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
259 glEnd();
260
261 /* Left */
262 glBegin(GL_QUADS);
263 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,0.0);
264 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f,0.0);
265 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 1.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
266 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
267 glEnd();
268 }
269
270 glDisable(GL_TEXTURE_2D);
271
272 PrintInfo();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000273
274 glutSwapBuffers();
275}
276
277
Brianbadc3462007-04-16 17:56:13 -0600278static void
279Reshape( int width, int height )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000280{
281 glViewport(0, 0, width, height);
282 glMatrixMode(GL_PROJECTION);
283 glLoadIdentity();
Brianbadc3462007-04-16 17:56:13 -0600284 glFrustum(-1, 1, -1, 1, 1.0, 100);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000285 glMatrixMode(GL_MODELVIEW);
286 glLoadIdentity();
287}
288
289
Brianbadc3462007-04-16 17:56:13 -0600290static void
291Key( unsigned char key, int x, int y )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000292{
293 (void) x;
294 (void) y;
295 switch (key) {
Brianbadc3462007-04-16 17:56:13 -0600296 case 'a':
297 Arrays = !Arrays;
298 break;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000299 case 'f':
Brianbadc3462007-04-16 17:56:13 -0600300 case 'm':
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000301 fogMode = SetFogMode(fogMode + 1);
302 break;
Brianbadc3462007-04-16 17:56:13 -0600303 case 'D':
304 fogDensity += 0.05;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000305 SetFogMode(fogMode);
306 break;
Brianbadc3462007-04-16 17:56:13 -0600307 case 'd':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000308 if (fogDensity > 0.0) {
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000309 fogDensity -= 0.05;
310 }
311 SetFogMode(fogMode);
312 break;
313 case 's':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000314 if (fogStart > 0.0) {
Brianbadc3462007-04-16 17:56:13 -0600315 fogStart -= 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000316 }
317 SetFogMode(fogMode);
318 break;
319 case 'S':
Brianbadc3462007-04-16 17:56:13 -0600320 if (fogStart < 100.0) {
321 fogStart += 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000322 }
323 SetFogMode(fogMode);
324 break;
325 case 'e':
Brianbadc3462007-04-16 17:56:13 -0600326 if (fogEnd > 0.0) {
327 fogEnd -= 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000328 }
329 SetFogMode(fogMode);
330 break;
331 case 'E':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000332 if (fogEnd < 100.0) {
Brianbadc3462007-04-16 17:56:13 -0600333 fogEnd += 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000334 }
335 SetFogMode(fogMode);
336 break;
337 case 'c':
José Fonseca9aa73cf2009-02-01 12:00:07 +0000338 fogCoord = SetFogCoord(fogCoord ^ GL_TRUE);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000339 break;
Brianbadc3462007-04-16 17:56:13 -0600340 case 't':
341 Texture = !Texture;
342 break;
343 case 'z':
344 camz -= 0.1;
345 break;
346 case 'Z':
347 camz += 0.1;
348 break;
349 case 'r':
350 Reset();
351 break;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000352 case 27:
353 exit(0);
354 break;
355 }
356 glutPostRedisplay();
357}
358
359
Brianbadc3462007-04-16 17:56:13 -0600360static void
361Init(void)
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000362{
Brianbadc3462007-04-16 17:56:13 -0600363 static const GLubyte teximage[2][2][4] = {
364 { { 255, 255, 255, 255}, { 128, 128, 128, 255} },
365 { { 128, 128, 128, 255}, { 255, 255, 255, 255} }
366 };
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000367
Brianbadc3462007-04-16 17:56:13 -0600368 printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000369
José Fonseca9aa73cf2009-02-01 12:00:07 +0000370 if (!GLEW_EXT_fog_coord) {
Brianbadc3462007-04-16 17:56:13 -0600371 printf("GL_EXT_fog_coord not supported!\n");
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000372 }
373
Brianbadc3462007-04-16 17:56:13 -0600374 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0,
375 GL_RGBA, GL_UNSIGNED_BYTE, teximage);
376 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
377 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
378
379 glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
380
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000381 glDepthFunc(GL_LEQUAL);
382 glEnable(GL_DEPTH_TEST);
383 glShadeModel(GL_SMOOTH);
384 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
385
386 glFogfv(GL_FOG_COLOR, fogColor);
387 glHint(GL_FOG_HINT, GL_NICEST);
388 fogCoord = SetFogCoord(GL_TRUE); /* try to enable fog_coord */
Brianbadc3462007-04-16 17:56:13 -0600389 fogMode = SetFogMode(1);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000390
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000391 glEnableClientState(GL_VERTEX_ARRAY);
392 glVertexPointer(3, GL_FLOAT, 0, vertex_pointer);
393
394 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
395 glTexCoordPointer(2, GL_FLOAT, 0, texcoord_pointer);
396
José Fonseca9aa73cf2009-02-01 12:00:07 +0000397 if (GLEW_EXT_fog_coord) {
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000398 glEnableClientState(GL_FOG_COORDINATE_ARRAY_EXT);
José Fonseca9aa73cf2009-02-01 12:00:07 +0000399 glFogCoordPointerEXT(GL_FLOAT, 0, fogcoord_pointer);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000400 }
Brianbadc3462007-04-16 17:56:13 -0600401
402 Reset();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000403}
404
405
Brianbadc3462007-04-16 17:56:13 -0600406int
407main( int argc, char *argv[] )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000408{
409 glutInit( &argc, argv );
Brianbadc3462007-04-16 17:56:13 -0600410 glutInitWindowSize( 600, 600 );
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000411 glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
412 glutCreateWindow(argv[0]);
José Fonseca9aa73cf2009-02-01 12:00:07 +0000413 glewInit();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000414 glutReshapeFunc( Reshape );
415 glutKeyboardFunc( Key );
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000416 glutDisplayFunc( Display );
417 Init();
418 glutMainLoop();
419 return 0;
420}