free display lists and destroy window upon exit
authorBrian Paul <brian.paul@tungstengraphics.com>
Tue, 9 Aug 2005 15:13:32 +0000 (15:13 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Tue, 9 Aug 2005 15:13:32 +0000 (15:13 +0000)
progs/demos/gears.c

index fc797eb904cc903c3ca93222bba5419978f42188..679fac44893f260a269f8a1481d734a67ef9e780 100644 (file)
@@ -26,6 +26,7 @@
 static GLint T0 = 0;
 static GLint Frames = 0;
 static GLint autoexit = 0;
+static GLint win = 0;
 
 
 /**
@@ -163,6 +164,15 @@ static GLfloat view_rotx = 20.0, view_roty = 30.0, view_rotz = 0.0;
 static GLint gear1, gear2, gear3;
 static GLfloat angle = 0.0;
 
+static void
+cleanup(void)
+{
+   glDeleteLists(gear1, 1);
+   glDeleteLists(gear2, 1);
+   glDeleteLists(gear3, 1);
+   glutDestroyWindow(win);
+}
+
 static void
 draw(void)
 {
@@ -198,16 +208,18 @@ draw(void)
   Frames++;
 
   {
-     GLint t = glutGet(GLUT_ELAPSED_TIME);
-     if (t - T0 >= 5000) {
-        GLfloat seconds = (t - T0) / 1000.0;
-        GLfloat fps = Frames / seconds;
-        printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps);
-        T0 = t;
-        Frames = 0;
-        if ((t >= 999.0 * autoexit) && (autoexit))
-           exit(0);
-     }
+    GLint t = glutGet(GLUT_ELAPSED_TIME);
+    if (t - T0 >= 5000) {
+      GLfloat seconds = (t - T0) / 1000.0;
+      GLfloat fps = Frames / seconds;
+      printf("%d frames in %6.3f seconds = %6.3f FPS\n", Frames, seconds, fps);
+      T0 = t;
+      Frames = 0;
+      if ((t >= 999.0 * autoexit) && (autoexit)) {
+        cleanup();
+        exit(0);
+      }
+    }
   }
 }
 
@@ -239,6 +251,7 @@ key(unsigned char k, int x, int y)
     view_rotz -= 5.0;
     break;
   case 27:  /* Escape */
+    cleanup();
     exit(0);
     break;
   default:
@@ -352,7 +365,7 @@ int main(int argc, char *argv[])
 
   glutInitWindowPosition(0, 0);
   glutInitWindowSize(300, 300);
-  glutCreateWindow("Gears");
+  win = glutCreateWindow("Gears");
   init(argc, argv);
 
   glutDisplayFunc(draw);