blob: 7d5c11aabf3ff88ed5c0bbc4da3267b3cd3a90c3 [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
Daniel Borcaa49a08d2004-02-16 07:31:29 +000018static GLfloat camz;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000019
20static GLint fogMode;
21static GLboolean fogCoord;
22static GLfloat fogDensity = 0.75;
Brianbadc3462007-04-16 17:56:13 -060023static GLfloat fogStart = 1.0, fogEnd = DEPTH;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000024static GLfloat fogColor[4] = {0.6f, 0.3f, 0.0f, 1.0f};
Brianbadc3462007-04-16 17:56:13 -060025static const char *ModeStr = NULL;
26static GLboolean Arrays = GL_FALSE;
27static GLboolean Texture = GL_TRUE;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000028
29
Brianbadc3462007-04-16 17:56:13 -060030static void
31Reset(void)
32{
33 fogMode = 1;
34 fogCoord = 1;
35 fogDensity = 0.75;
36 fogStart = 1.0;
37 fogEnd = DEPTH;
38 Arrays = GL_FALSE;
39 Texture = GL_TRUE;
40}
41
42
José Fonseca9aa73cf2009-02-01 12:00:07 +000043static void
44glFogCoordf_ext (GLfloat f)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000045{
José Fonseca9aa73cf2009-02-01 12:00:07 +000046 if (fogCoord)
47 glFogCoordfEXT(f);
Daniel Borcaa49a08d2004-02-16 07:31:29 +000048}
49
50
Brianbadc3462007-04-16 17:56:13 -060051static void
52PrintString(const char *s)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000053{
Brianbadc3462007-04-16 17:56:13 -060054 while (*s) {
55 glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s);
56 s++;
Brian Paul37c04972004-09-16 19:39:04 +000057 }
Daniel Borcaa49a08d2004-02-16 07:31:29 +000058}
59
60
Brianbadc3462007-04-16 17:56:13 -060061static void
62PrintInfo(void)
63{
64 char s[100];
65
66 glDisable(GL_FOG);
67 glColor3f(0, 1, 1);
68
69 sprintf(s, "Mode(m): %s Start(s/S): %g End(e/E): %g Density(d/D): %g",
70 ModeStr, fogStart, fogEnd, fogDensity);
71 glWindowPos2iARB(5, 20);
72 PrintString(s);
73
74 sprintf(s, "Arrays(a): %s glFogCoord(c): %s EyeZ(z/z): %g",
75 (Arrays ? "Yes" : "No"),
76 (fogCoord ? "Yes" : "No"),
77 camz);
78 glWindowPos2iARB(5, 5);
79 PrintString(s);
80}
81
82
83static int
84SetFogMode(GLint fogMode)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000085{
Brian Paul37c04972004-09-16 19:39:04 +000086 fogMode &= 3;
87 switch (fogMode) {
88 case 0:
Brianbadc3462007-04-16 17:56:13 -060089 ModeStr = "Off";
Brian Paul37c04972004-09-16 19:39:04 +000090 glDisable(GL_FOG);
Brian Paul37c04972004-09-16 19:39:04 +000091 break;
92 case 1:
Brianbadc3462007-04-16 17:56:13 -060093 ModeStr = "GL_LINEAR";
Brian Paul37c04972004-09-16 19:39:04 +000094 glEnable(GL_FOG);
95 glFogi(GL_FOG_MODE, GL_LINEAR);
96 glFogf(GL_FOG_START, fogStart);
97 glFogf(GL_FOG_END, fogEnd);
Brian Paul37c04972004-09-16 19:39:04 +000098 break;
99 case 2:
Brianbadc3462007-04-16 17:56:13 -0600100 ModeStr = "GL_EXP";
Brian Paul37c04972004-09-16 19:39:04 +0000101 glEnable(GL_FOG);
102 glFogi(GL_FOG_MODE, GL_EXP);
103 glFogf(GL_FOG_DENSITY, fogDensity);
Brian Paul37c04972004-09-16 19:39:04 +0000104 break;
105 case 3:
Brianbadc3462007-04-16 17:56:13 -0600106 ModeStr = "GL_EXP2";
Brian Paul37c04972004-09-16 19:39:04 +0000107 glEnable(GL_FOG);
108 glFogi(GL_FOG_MODE, GL_EXP2);
109 glFogf(GL_FOG_DENSITY, fogDensity);
Brian Paul37c04972004-09-16 19:39:04 +0000110 break;
111 }
112 return fogMode;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000113}
114
115
Brianbadc3462007-04-16 17:56:13 -0600116static GLboolean
117SetFogCoord(GLboolean fogCoord)
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000118{
José Fonseca9aa73cf2009-02-01 12:00:07 +0000119 if (!GLEW_EXT_fog_coord) {
Brian Paul37c04972004-09-16 19:39:04 +0000120 return GL_FALSE;
121 }
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000122
Brian Paul37c04972004-09-16 19:39:04 +0000123 if (fogCoord) {
Brian Paul37c04972004-09-16 19:39:04 +0000124 glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
Brianbadc3462007-04-16 17:56:13 -0600125 }
126 else {
Brian Paul37c04972004-09-16 19:39:04 +0000127 glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FRAGMENT_DEPTH_EXT);
Brian Paul37c04972004-09-16 19:39:04 +0000128 }
129 return fogCoord;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000130}
131
132
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000133/* could reuse vertices */
134static GLuint vertex_index[] = {
135 /* Back */
136 0, 1, 2, 3,
137
138 /* Floor */
139 4, 5, 6, 7,
140
141 /* Roof */
142 8, 9, 10, 11,
143
144 /* Right */
145 12, 13, 14, 15,
146
147 /* Left */
148 16, 17, 18, 19
149};
150
151static GLfloat vertex_pointer[][3] = {
152 /* Back */
Brianbadc3462007-04-16 17:56:13 -0600153 {-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 +0000154
155 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600156 {-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 +0000157
158 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600159 {-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 +0000160
161 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600162 { 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 +0000163
164 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600165 {-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 +0000166};
167
168static GLfloat texcoord_pointer[][2] = {
169 /* Back */
170 {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f},
171
172 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600173 {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, DEPTH}, {0.0f, DEPTH},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000174
175 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600176 {1.0f, 0.0f}, {0.0f, 0.0f}, {0.0f, DEPTH}, {1.0f, DEPTH},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000177
178 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600179 {0.0f, 1.0f}, {0.0f, 0.0f}, {DEPTH, 0.0f}, {DEPTH, 1.0f},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000180
181 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600182 {0.0f, 0.0f}, {0.0f, 1.0f}, {DEPTH, 1.0f}, {DEPTH, 0.0f}
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000183};
184
Brianbadc3462007-04-16 17:56:13 -0600185static GLfloat fogcoord_pointer[] = {
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000186 /* Back */
Brianbadc3462007-04-16 17:56:13 -0600187 DEPTH, DEPTH, DEPTH, DEPTH,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000188
189 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600190 DEPTH, DEPTH, 0.0, 0.0,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000191
192 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600193 DEPTH, DEPTH, 0.0, 0.0,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000194
195 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600196 0.0, 0.0, DEPTH, DEPTH,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000197
198 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600199 0.0, 0.0, DEPTH, DEPTH
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000200};
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000201
202
Brianbadc3462007-04-16 17:56:13 -0600203static void
204Display( void )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000205{
206 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
207 glLoadIdentity ();
208
Brianbadc3462007-04-16 17:56:13 -0600209 glTranslatef(0.0f, 0.0f, -camz);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000210
Brianbadc3462007-04-16 17:56:13 -0600211 SetFogMode(fogMode);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000212
Brianbadc3462007-04-16 17:56:13 -0600213 glColor3f(1, 1, 1);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000214
Brianbadc3462007-04-16 17:56:13 -0600215 if (Texture)
216 glEnable(GL_TEXTURE_2D);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000217
Brianbadc3462007-04-16 17:56:13 -0600218 if (Arrays) {
219 glEnableClientState(GL_VERTEX_ARRAY);
220 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
221 glDrawElements(GL_QUADS, sizeof(vertex_index) / sizeof(vertex_index[0]),
222 GL_UNSIGNED_INT, vertex_index);
223 glDisableClientState(GL_VERTEX_ARRAY);
224 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
225 }
226 else {
227 /* Back */
228 glBegin(GL_QUADS);
229 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
230 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
231 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
232 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
233 glEnd();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000234
Brianbadc3462007-04-16 17:56:13 -0600235 /* Floor */
236 glBegin(GL_QUADS);
237 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
238 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
239 glFogCoordf_ext(0.0f); glTexCoord2f(1.0f, DEPTH); glVertex3f( 1.0f,-1.0f,0.0);
240 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, DEPTH); glVertex3f(-1.0f,-1.0f,0.0);
241 glEnd();
242
243 /* Roof */
244 glBegin(GL_QUADS);
245 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
246 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
247 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, DEPTH); glVertex3f( 1.0f, 1.0f,0.0);
248 glFogCoordf_ext(0.0f); glTexCoord2f(1.0f, DEPTH); glVertex3f(-1.0f, 1.0f,0.0);
249 glEnd();
250
251 /* Right */
252 glBegin(GL_QUADS);
253 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,-1.0f,0.0);
254 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f,0.0);
255 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 0.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
256 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 1.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
257 glEnd();
258
259 /* Left */
260 glBegin(GL_QUADS);
261 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,0.0);
262 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f,0.0);
263 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 1.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
264 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
265 glEnd();
266 }
267
268 glDisable(GL_TEXTURE_2D);
269
270 PrintInfo();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000271
272 glutSwapBuffers();
273}
274
275
Brianbadc3462007-04-16 17:56:13 -0600276static void
277Reshape( int width, int height )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000278{
279 glViewport(0, 0, width, height);
280 glMatrixMode(GL_PROJECTION);
281 glLoadIdentity();
Brianbadc3462007-04-16 17:56:13 -0600282 glFrustum(-1, 1, -1, 1, 1.0, 100);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000283 glMatrixMode(GL_MODELVIEW);
284 glLoadIdentity();
285}
286
287
Brianbadc3462007-04-16 17:56:13 -0600288static void
289Key( unsigned char key, int x, int y )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000290{
291 (void) x;
292 (void) y;
293 switch (key) {
Brianbadc3462007-04-16 17:56:13 -0600294 case 'a':
295 Arrays = !Arrays;
296 break;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000297 case 'f':
Brianbadc3462007-04-16 17:56:13 -0600298 case 'm':
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000299 fogMode = SetFogMode(fogMode + 1);
300 break;
Brianbadc3462007-04-16 17:56:13 -0600301 case 'D':
302 fogDensity += 0.05;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000303 SetFogMode(fogMode);
304 break;
Brianbadc3462007-04-16 17:56:13 -0600305 case 'd':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000306 if (fogDensity > 0.0) {
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000307 fogDensity -= 0.05;
308 }
309 SetFogMode(fogMode);
310 break;
311 case 's':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000312 if (fogStart > 0.0) {
Brianbadc3462007-04-16 17:56:13 -0600313 fogStart -= 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000314 }
315 SetFogMode(fogMode);
316 break;
317 case 'S':
Brianbadc3462007-04-16 17:56:13 -0600318 if (fogStart < 100.0) {
319 fogStart += 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000320 }
321 SetFogMode(fogMode);
322 break;
323 case 'e':
Brianbadc3462007-04-16 17:56:13 -0600324 if (fogEnd > 0.0) {
325 fogEnd -= 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000326 }
327 SetFogMode(fogMode);
328 break;
329 case 'E':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000330 if (fogEnd < 100.0) {
Brianbadc3462007-04-16 17:56:13 -0600331 fogEnd += 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000332 }
333 SetFogMode(fogMode);
334 break;
335 case 'c':
José Fonseca9aa73cf2009-02-01 12:00:07 +0000336 fogCoord = SetFogCoord(fogCoord ^ GL_TRUE);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000337 break;
Brianbadc3462007-04-16 17:56:13 -0600338 case 't':
339 Texture = !Texture;
340 break;
341 case 'z':
342 camz -= 0.1;
343 break;
344 case 'Z':
345 camz += 0.1;
346 break;
347 case 'r':
348 Reset();
349 break;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000350 case 27:
351 exit(0);
352 break;
353 }
354 glutPostRedisplay();
355}
356
357
Brianbadc3462007-04-16 17:56:13 -0600358static void
359Init(void)
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000360{
Brianbadc3462007-04-16 17:56:13 -0600361 static const GLubyte teximage[2][2][4] = {
362 { { 255, 255, 255, 255}, { 128, 128, 128, 255} },
363 { { 128, 128, 128, 255}, { 255, 255, 255, 255} }
364 };
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000365
Brianbadc3462007-04-16 17:56:13 -0600366 printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000367
José Fonseca9aa73cf2009-02-01 12:00:07 +0000368 if (!GLEW_EXT_fog_coord) {
Brianbadc3462007-04-16 17:56:13 -0600369 printf("GL_EXT_fog_coord not supported!\n");
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000370 }
371
Brianbadc3462007-04-16 17:56:13 -0600372 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0,
373 GL_RGBA, GL_UNSIGNED_BYTE, teximage);
374 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
375 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
376
377 glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
378
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000379 glDepthFunc(GL_LEQUAL);
380 glEnable(GL_DEPTH_TEST);
381 glShadeModel(GL_SMOOTH);
382 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
383
384 glFogfv(GL_FOG_COLOR, fogColor);
385 glHint(GL_FOG_HINT, GL_NICEST);
386 fogCoord = SetFogCoord(GL_TRUE); /* try to enable fog_coord */
Brianbadc3462007-04-16 17:56:13 -0600387 fogMode = SetFogMode(1);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000388
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000389 glEnableClientState(GL_VERTEX_ARRAY);
390 glVertexPointer(3, GL_FLOAT, 0, vertex_pointer);
391
392 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
393 glTexCoordPointer(2, GL_FLOAT, 0, texcoord_pointer);
394
José Fonseca9aa73cf2009-02-01 12:00:07 +0000395 if (GLEW_EXT_fog_coord) {
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000396 glEnableClientState(GL_FOG_COORDINATE_ARRAY_EXT);
José Fonseca9aa73cf2009-02-01 12:00:07 +0000397 glFogCoordPointerEXT(GL_FLOAT, 0, fogcoord_pointer);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000398 }
Brianbadc3462007-04-16 17:56:13 -0600399
400 Reset();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000401}
402
403
Brianbadc3462007-04-16 17:56:13 -0600404int
405main( int argc, char *argv[] )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000406{
407 glutInit( &argc, argv );
Brianbadc3462007-04-16 17:56:13 -0600408 glutInitWindowSize( 600, 600 );
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000409 glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
410 glutCreateWindow(argv[0]);
José Fonseca9aa73cf2009-02-01 12:00:07 +0000411 glewInit();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000412 glutReshapeFunc( Reshape );
413 glutKeyboardFunc( Key );
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000414 glutDisplayFunc( Display );
415 Init();
416 glutMainLoop();
417 return 0;
418}