blob: 00c73c6f0480bdfec5c2a7c543732cb0af058623 [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
Brianbadc3462007-04-16 17:56:13 -060010#define GL_GLEXT_PROTOTYPES
Daniel Borcaa49a08d2004-02-16 07:31:29 +000011#include <stdio.h>
12#include <stdlib.h>
13#include <math.h>
14#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 PFNGLFOGCOORDFEXTPROC glFogCoordf_ext;
19static PFNGLFOGCOORDPOINTEREXTPROC glFogCoordPointer_ext;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000020
Daniel Borcaa49a08d2004-02-16 07:31:29 +000021static GLboolean have_fog_coord;
22
23static GLfloat camz;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000024
25static GLint fogMode;
26static GLboolean fogCoord;
27static GLfloat fogDensity = 0.75;
Brianbadc3462007-04-16 17:56:13 -060028static GLfloat fogStart = 1.0, fogEnd = DEPTH;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000029static GLfloat fogColor[4] = {0.6f, 0.3f, 0.0f, 1.0f};
Brianbadc3462007-04-16 17:56:13 -060030static const char *ModeStr = NULL;
31static GLboolean Arrays = GL_FALSE;
32static GLboolean Texture = GL_TRUE;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000033
34
Brianbadc3462007-04-16 17:56:13 -060035static void
36Reset(void)
37{
38 fogMode = 1;
39 fogCoord = 1;
40 fogDensity = 0.75;
41 fogStart = 1.0;
42 fogEnd = DEPTH;
43 Arrays = GL_FALSE;
44 Texture = GL_TRUE;
45}
46
47
48static void APIENTRY
49glFogCoordf_nop (GLfloat f)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000050{
Brian Paul37c04972004-09-16 19:39:04 +000051 (void)f;
Daniel Borcaa49a08d2004-02-16 07:31:29 +000052}
53
54
Brianbadc3462007-04-16 17:56:13 -060055static void
56PrintString(const char *s)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000057{
Brianbadc3462007-04-16 17:56:13 -060058 while (*s) {
59 glutBitmapCharacter(GLUT_BITMAP_8_BY_13, (int) *s);
60 s++;
Brian Paul37c04972004-09-16 19:39:04 +000061 }
Daniel Borcaa49a08d2004-02-16 07:31:29 +000062}
63
64
Brianbadc3462007-04-16 17:56:13 -060065static void
66PrintInfo(void)
67{
68 char s[100];
69
70 glDisable(GL_FOG);
71 glColor3f(0, 1, 1);
72
73 sprintf(s, "Mode(m): %s Start(s/S): %g End(e/E): %g Density(d/D): %g",
74 ModeStr, fogStart, fogEnd, fogDensity);
75 glWindowPos2iARB(5, 20);
76 PrintString(s);
77
78 sprintf(s, "Arrays(a): %s glFogCoord(c): %s EyeZ(z/z): %g",
79 (Arrays ? "Yes" : "No"),
80 (fogCoord ? "Yes" : "No"),
81 camz);
82 glWindowPos2iARB(5, 5);
83 PrintString(s);
84}
85
86
87static int
88SetFogMode(GLint fogMode)
Daniel Borcaa49a08d2004-02-16 07:31:29 +000089{
Brian Paul37c04972004-09-16 19:39:04 +000090 fogMode &= 3;
91 switch (fogMode) {
92 case 0:
Brianbadc3462007-04-16 17:56:13 -060093 ModeStr = "Off";
Brian Paul37c04972004-09-16 19:39:04 +000094 glDisable(GL_FOG);
Brian Paul37c04972004-09-16 19:39:04 +000095 break;
96 case 1:
Brianbadc3462007-04-16 17:56:13 -060097 ModeStr = "GL_LINEAR";
Brian Paul37c04972004-09-16 19:39:04 +000098 glEnable(GL_FOG);
99 glFogi(GL_FOG_MODE, GL_LINEAR);
100 glFogf(GL_FOG_START, fogStart);
101 glFogf(GL_FOG_END, fogEnd);
Brian Paul37c04972004-09-16 19:39:04 +0000102 break;
103 case 2:
Brianbadc3462007-04-16 17:56:13 -0600104 ModeStr = "GL_EXP";
Brian Paul37c04972004-09-16 19:39:04 +0000105 glEnable(GL_FOG);
106 glFogi(GL_FOG_MODE, GL_EXP);
107 glFogf(GL_FOG_DENSITY, fogDensity);
Brian Paul37c04972004-09-16 19:39:04 +0000108 break;
109 case 3:
Brianbadc3462007-04-16 17:56:13 -0600110 ModeStr = "GL_EXP2";
Brian Paul37c04972004-09-16 19:39:04 +0000111 glEnable(GL_FOG);
112 glFogi(GL_FOG_MODE, GL_EXP2);
113 glFogf(GL_FOG_DENSITY, fogDensity);
Brian Paul37c04972004-09-16 19:39:04 +0000114 break;
115 }
116 return fogMode;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000117}
118
119
Brianbadc3462007-04-16 17:56:13 -0600120static GLboolean
121SetFogCoord(GLboolean fogCoord)
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000122{
Brian Paul37c04972004-09-16 19:39:04 +0000123 glFogCoordf_ext = glFogCoordf_nop;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000124
Brian Paul37c04972004-09-16 19:39:04 +0000125 if (!have_fog_coord) {
Brian Paul37c04972004-09-16 19:39:04 +0000126 return GL_FALSE;
127 }
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000128
Brian Paul37c04972004-09-16 19:39:04 +0000129 if (fogCoord) {
Brianbadc3462007-04-16 17:56:13 -0600130 glFogCoordf_ext = (PFNGLFOGCOORDFEXTPROC)glutGetProcAddress("glFogCoordfEXT");
Brian Paul37c04972004-09-16 19:39:04 +0000131 glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FOG_COORDINATE_EXT);
Brianbadc3462007-04-16 17:56:13 -0600132 }
133 else {
Brian Paul37c04972004-09-16 19:39:04 +0000134 glFogi(GL_FOG_COORDINATE_SOURCE_EXT, GL_FRAGMENT_DEPTH_EXT);
Brian Paul37c04972004-09-16 19:39:04 +0000135 }
136 return fogCoord;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000137}
138
139
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000140/* could reuse vertices */
141static GLuint vertex_index[] = {
142 /* Back */
143 0, 1, 2, 3,
144
145 /* Floor */
146 4, 5, 6, 7,
147
148 /* Roof */
149 8, 9, 10, 11,
150
151 /* Right */
152 12, 13, 14, 15,
153
154 /* Left */
155 16, 17, 18, 19
156};
157
158static GLfloat vertex_pointer[][3] = {
159 /* Back */
Brianbadc3462007-04-16 17:56:13 -0600160 {-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 +0000161
162 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600163 {-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 +0000164
165 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600166 {-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 +0000167
168 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600169 { 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 +0000170
171 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600172 {-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 +0000173};
174
175static GLfloat texcoord_pointer[][2] = {
176 /* Back */
177 {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, 1.0f}, {0.0f, 1.0f},
178
179 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600180 {0.0f, 0.0f}, {1.0f, 0.0f}, {1.0f, DEPTH}, {0.0f, DEPTH},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000181
182 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600183 {1.0f, 0.0f}, {0.0f, 0.0f}, {0.0f, DEPTH}, {1.0f, DEPTH},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000184
185 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600186 {0.0f, 1.0f}, {0.0f, 0.0f}, {DEPTH, 0.0f}, {DEPTH, 1.0f},
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000187
188 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600189 {0.0f, 0.0f}, {0.0f, 1.0f}, {DEPTH, 1.0f}, {DEPTH, 0.0f}
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000190};
191
Brianbadc3462007-04-16 17:56:13 -0600192static GLfloat fogcoord_pointer[] = {
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000193 /* Back */
Brianbadc3462007-04-16 17:56:13 -0600194 DEPTH, DEPTH, DEPTH, DEPTH,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000195
196 /* Floor */
Brianbadc3462007-04-16 17:56:13 -0600197 DEPTH, DEPTH, 0.0, 0.0,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000198
199 /* Roof */
Brianbadc3462007-04-16 17:56:13 -0600200 DEPTH, DEPTH, 0.0, 0.0,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000201
202 /* Right */
Brianbadc3462007-04-16 17:56:13 -0600203 0.0, 0.0, DEPTH, DEPTH,
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000204
205 /* Left */
Brianbadc3462007-04-16 17:56:13 -0600206 0.0, 0.0, DEPTH, DEPTH
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000207};
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000208
209
Brianbadc3462007-04-16 17:56:13 -0600210static void
211Display( void )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000212{
213 glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
214 glLoadIdentity ();
215
Brianbadc3462007-04-16 17:56:13 -0600216 glTranslatef(0.0f, 0.0f, -camz);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000217
Brianbadc3462007-04-16 17:56:13 -0600218 SetFogMode(fogMode);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000219
Brianbadc3462007-04-16 17:56:13 -0600220 glColor3f(1, 1, 1);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000221
Brianbadc3462007-04-16 17:56:13 -0600222 if (Texture)
223 glEnable(GL_TEXTURE_2D);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000224
Brianbadc3462007-04-16 17:56:13 -0600225 if (Arrays) {
226 glEnableClientState(GL_VERTEX_ARRAY);
227 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
228 glDrawElements(GL_QUADS, sizeof(vertex_index) / sizeof(vertex_index[0]),
229 GL_UNSIGNED_INT, vertex_index);
230 glDisableClientState(GL_VERTEX_ARRAY);
231 glDisableClientState(GL_TEXTURE_COORD_ARRAY);
232 }
233 else {
234 /* Back */
235 glBegin(GL_QUADS);
236 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
237 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
238 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 1.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
239 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
240 glEnd();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000241
Brianbadc3462007-04-16 17:56:13 -0600242 /* Floor */
243 glBegin(GL_QUADS);
244 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
245 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
246 glFogCoordf_ext(0.0f); glTexCoord2f(1.0f, DEPTH); glVertex3f( 1.0f,-1.0f,0.0);
247 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, DEPTH); glVertex3f(-1.0f,-1.0f,0.0);
248 glEnd();
249
250 /* Roof */
251 glBegin(GL_QUADS);
252 glFogCoordf_ext(DEPTH); glTexCoord2f(1.0f, 0.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
253 glFogCoordf_ext(DEPTH); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
254 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, DEPTH); glVertex3f( 1.0f, 1.0f,0.0);
255 glFogCoordf_ext(0.0f); glTexCoord2f(1.0f, DEPTH); glVertex3f(-1.0f, 1.0f,0.0);
256 glEnd();
257
258 /* Right */
259 glBegin(GL_QUADS);
260 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f( 1.0f,-1.0f,0.0);
261 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f( 1.0f, 1.0f,0.0);
262 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 0.0f); glVertex3f( 1.0f, 1.0f,-DEPTH);
263 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 1.0f); glVertex3f( 1.0f,-1.0f,-DEPTH);
264 glEnd();
265
266 /* Left */
267 glBegin(GL_QUADS);
268 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f,-1.0f,0.0);
269 glFogCoordf_ext(0.0f); glTexCoord2f(0.0f, 1.0f); glVertex3f(-1.0f, 1.0f,0.0);
270 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 1.0f); glVertex3f(-1.0f, 1.0f,-DEPTH);
271 glFogCoordf_ext(DEPTH); glTexCoord2f(DEPTH, 0.0f); glVertex3f(-1.0f,-1.0f,-DEPTH);
272 glEnd();
273 }
274
275 glDisable(GL_TEXTURE_2D);
276
277 PrintInfo();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000278
279 glutSwapBuffers();
280}
281
282
Brianbadc3462007-04-16 17:56:13 -0600283static void
284Reshape( int width, int height )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000285{
286 glViewport(0, 0, width, height);
287 glMatrixMode(GL_PROJECTION);
288 glLoadIdentity();
Brianbadc3462007-04-16 17:56:13 -0600289 glFrustum(-1, 1, -1, 1, 1.0, 100);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000290 glMatrixMode(GL_MODELVIEW);
291 glLoadIdentity();
292}
293
294
Brianbadc3462007-04-16 17:56:13 -0600295static void
296Key( unsigned char key, int x, int y )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000297{
298 (void) x;
299 (void) y;
300 switch (key) {
Brianbadc3462007-04-16 17:56:13 -0600301 case 'a':
302 Arrays = !Arrays;
303 break;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000304 case 'f':
Brianbadc3462007-04-16 17:56:13 -0600305 case 'm':
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000306 fogMode = SetFogMode(fogMode + 1);
307 break;
Brianbadc3462007-04-16 17:56:13 -0600308 case 'D':
309 fogDensity += 0.05;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000310 SetFogMode(fogMode);
311 break;
Brianbadc3462007-04-16 17:56:13 -0600312 case 'd':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000313 if (fogDensity > 0.0) {
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000314 fogDensity -= 0.05;
315 }
316 SetFogMode(fogMode);
317 break;
318 case 's':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000319 if (fogStart > 0.0) {
Brianbadc3462007-04-16 17:56:13 -0600320 fogStart -= 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000321 }
322 SetFogMode(fogMode);
323 break;
324 case 'S':
Brianbadc3462007-04-16 17:56:13 -0600325 if (fogStart < 100.0) {
326 fogStart += 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000327 }
328 SetFogMode(fogMode);
329 break;
330 case 'e':
Brianbadc3462007-04-16 17:56:13 -0600331 if (fogEnd > 0.0) {
332 fogEnd -= 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000333 }
334 SetFogMode(fogMode);
335 break;
336 case 'E':
Daniel Borca2c161cf2004-06-07 06:03:08 +0000337 if (fogEnd < 100.0) {
Brianbadc3462007-04-16 17:56:13 -0600338 fogEnd += 0.25;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000339 }
340 SetFogMode(fogMode);
341 break;
342 case 'c':
343 fogCoord = SetFogCoord(fogCoord ^ GL_TRUE);
344 break;
Brianbadc3462007-04-16 17:56:13 -0600345 case 't':
346 Texture = !Texture;
347 break;
348 case 'z':
349 camz -= 0.1;
350 break;
351 case 'Z':
352 camz += 0.1;
353 break;
354 case 'r':
355 Reset();
356 break;
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000357 case 27:
358 exit(0);
359 break;
360 }
361 glutPostRedisplay();
362}
363
364
Brianbadc3462007-04-16 17:56:13 -0600365static void
366Init(void)
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000367{
Brianbadc3462007-04-16 17:56:13 -0600368 static const GLubyte teximage[2][2][4] = {
369 { { 255, 255, 255, 255}, { 128, 128, 128, 255} },
370 { { 128, 128, 128, 255}, { 255, 255, 255, 255} }
371 };
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000372
Brianbadc3462007-04-16 17:56:13 -0600373 printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000374
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000375 have_fog_coord = glutExtensionSupported("GL_EXT_fog_coord");
Brianbadc3462007-04-16 17:56:13 -0600376 if (!have_fog_coord) {
377 printf("GL_EXT_fog_coord not supported!\n");
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000378 }
379
Brianbadc3462007-04-16 17:56:13 -0600380 glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 2, 2, 0,
381 GL_RGBA, GL_UNSIGNED_BYTE, teximage);
382 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
383 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
384
385 glClearColor(0.1f, 0.1f, 0.1f, 0.0f);
386
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000387 glDepthFunc(GL_LEQUAL);
388 glEnable(GL_DEPTH_TEST);
389 glShadeModel(GL_SMOOTH);
390 glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
391
392 glFogfv(GL_FOG_COLOR, fogColor);
393 glHint(GL_FOG_HINT, GL_NICEST);
394 fogCoord = SetFogCoord(GL_TRUE); /* try to enable fog_coord */
Brianbadc3462007-04-16 17:56:13 -0600395 fogMode = SetFogMode(1);
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000396
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000397 glEnableClientState(GL_VERTEX_ARRAY);
398 glVertexPointer(3, GL_FLOAT, 0, vertex_pointer);
399
400 glEnableClientState(GL_TEXTURE_COORD_ARRAY);
401 glTexCoordPointer(2, GL_FLOAT, 0, texcoord_pointer);
402
403 if (have_fog_coord) {
Brianbadc3462007-04-16 17:56:13 -0600404 glFogCoordPointer_ext = (PFNGLFOGCOORDPOINTEREXTPROC)glutGetProcAddress("glFogCoordPointerEXT");
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000405 glEnableClientState(GL_FOG_COORDINATE_ARRAY_EXT);
406 glFogCoordPointer_ext(GL_FLOAT, 0, fogcoord_pointer);
407 }
Brianbadc3462007-04-16 17:56:13 -0600408
409 Reset();
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000410}
411
412
Brianbadc3462007-04-16 17:56:13 -0600413int
414main( int argc, char *argv[] )
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000415{
416 glutInit( &argc, argv );
Brianbadc3462007-04-16 17:56:13 -0600417 glutInitWindowSize( 600, 600 );
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000418 glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH );
419 glutCreateWindow(argv[0]);
420 glutReshapeFunc( Reshape );
421 glutKeyboardFunc( Key );
Daniel Borcaa49a08d2004-02-16 07:31:29 +0000422 glutDisplayFunc( Display );
423 Init();
424 glutMainLoop();
425 return 0;
426}