[haiku-commits] r37821 - haiku/trunk/src/tests/kits/opengl/glut/game_mode

  • From: philippe.houdoin@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 30 Jul 2010 14:17:11 +0200 (CEST)

Author: phoudoin
Date: 2010-07-30 14:17:11 +0200 (Fri, 30 Jul 2010)
New Revision: 37821
Changeset: http://dev.haiku-os.org/changeset/37821

Modified:
   haiku/trunk/src/tests/kits/opengl/glut/game_mode/game_mode.c
Log:
Expand to dump game mode attributes, clean exit and changing game mode string 
anytime.

Modified: haiku/trunk/src/tests/kits/opengl/glut/game_mode/game_mode.c
===================================================================
--- haiku/trunk/src/tests/kits/opengl/glut/game_mode/game_mode.c        
2010-07-30 11:57:26 UTC (rev 37820)
+++ haiku/trunk/src/tests/kits/opengl/glut/game_mode/game_mode.c        
2010-07-30 12:17:11 UTC (rev 37821)
@@ -1,10 +1,25 @@
 
 #include <stdio.h>
+#include <string.h>
+
 #include <GL/glut.h>
 
+
+void display(void);
+void idle(void);
+void reshape(int w, int h);
+void keyboard(unsigned char key, int x, int y);
+
+void draw_cube(void);
+void game_mode(char *mode);
+void dump_game_mode(void);
+void init(void);
+void clean_exit(void);
+
 float spin = 0;
 
-static void
+
+void
 draw_cube(void)
 {
   glLoadIdentity();
@@ -52,7 +67,7 @@
 }
 
 
-static void
+void
 display(void)
 {
   glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
@@ -63,10 +78,10 @@
 }
 
 
-static void
+void
 idle(void)
 {
-       spin += 2.0;
+       spin += 1.0;
        if (spin > 360.0)
                spin = 0.0;
 
@@ -74,7 +89,7 @@
 }
 
 
-static void
+void
 reshape(int w, int h)
 {
        glViewport (0, 0, (GLsizei) w, (GLsizei) h);
@@ -97,52 +112,122 @@
 }
 
 
-static void
+void
+keyboard(unsigned char key, int x, int y)
+{
+       switch(key) {
+               case 27:
+                       exit(0);
+                       break;
+
+               case 'g':
+               case 'G':
+                       dump_game_mode();
+                       break;
+
+               case 'e':
+               case 'E': {
+                       char mode[255];
+
+                       printf("Game mode string? ");
+                       gets(mode);
+                       if (!strlen(mode))
+                               break;
+
+                       game_mode(mode);
+                       if (glutGameModeGet(GLUT_GAME_MODE_DISPLAY_CHANGED))
+                               init();
+                       break;
+               }
+       }
+}
+
+
+void
 init(void)
 {
        glutIdleFunc(idle);
        glutDisplayFunc(display);
        glutReshapeFunc(reshape);
+       glutKeyboardFunc(keyboard);
 
        glClearColor(0, 0, 0, 0);
+       glEnable(GL_DEPTH_TEST);
 }
 
 
-int
-main(int argc, char **argv)
+void
+clean_exit(void)
 {
-       glutInit(&argc, argv);
+       printf("Exit.\n");
 
-       if (argc > 1) {
-               printf("glutGameModeString(\"%s\"): ", argv[1]);
+       if (glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) {
+               printf("glutLeaveGameMode()\n");
+               glutLeaveGameMode();
+       }
+}
 
-               glutGameModeString(argv[1]);
 
-               if (!glutGameModeGet(GLUT_GAME_MODE_POSSIBLE))
-                       printf("*not* possible: fallback to windowed mode.\n");
-               else {
-                       printf("possible!\nglutEnterGameMode()\n");
-                       glutEnterGameMode();
+void
+game_mode(char *mode)
+{
+       printf("glutGameModeString(\"%s\"): ", mode);
 
-                       printf("glutGameModeGet(GLUT_GAME_MODE_DISPLAY_CHANGED) 
= %d\n",
-                               
glutGameModeGet(GLUT_GAME_MODE_DISPLAY_CHANGED));
-               }
+       glutGameModeString(mode);
+
+       if (!glutGameModeGet(GLUT_GAME_MODE_POSSIBLE)) {
+               printf("*not* possible!\n");
+               return;
        }
 
+       printf("possible.\nglutEnterGameMode()\n");
+       glutEnterGameMode();
+
+       printf("glutGameModeGet(GLUT_GAME_MODE_DISPLAY_CHANGED) = %d\n",
+                       glutGameModeGet(GLUT_GAME_MODE_DISPLAY_CHANGED));
+}
+
+
+void
+dump_game_mode()
+{
+       printf("glutGameModeGet():\n");
+
+#      define DUMP(pname)      \
+       printf("\t" #pname " = %d\n", glutGameModeGet(pname));
+
+       DUMP(GLUT_GAME_MODE_ACTIVE);
+       DUMP(GLUT_GAME_MODE_POSSIBLE);
+       DUMP(GLUT_GAME_MODE_WIDTH);
+       DUMP(GLUT_GAME_MODE_HEIGHT);
+       DUMP(GLUT_GAME_MODE_PIXEL_DEPTH);
+       DUMP(GLUT_GAME_MODE_REFRESH_RATE);
+       DUMP(GLUT_GAME_MODE_DISPLAY_CHANGED);
+
+#      undef DUMP
+
+       printf("\n");
+}
+
+int
+main(int argc, char **argv)
+{
+       glutInit(&argc, argv);
+
+       if (argc > 1)
+               game_mode(argv[1]);
+
        if (!glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) {
+               printf("Using windowed mode.\n");
+
                glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
                glutCreateWindow(argv[0]);
        }
 
        init();
 
-
+       atexit(clean_exit);
        glutMainLoop();
 
-       if (glutGameModeGet(GLUT_GAME_MODE_ACTIVE)) {
-               printf("glutLeaveGameMode()\n");
-               glutLeaveGameMode();
-       }
-
        return 0;
 }


Other related posts:

  • » [haiku-commits] r37821 - haiku/trunk/src/tests/kits/opengl/glut/game_mode - philippe . houdoin