restore GLUT_FPS env var feature lost in previous check-in
authorBrian Paul <brianp@vmware.com>
Tue, 17 Jun 2003 22:46:50 +0000 (22:46 +0000)
committerBrian Paul <brianp@vmware.com>
Tue, 17 Jun 2003 22:46:50 +0000 (22:46 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@73 7f0cb862-5218-0410-a997-914c9d46530a

freeglut-1.3/freeglut_display.c
freeglut-1.3/freeglut_init.c
freeglut-1.3/freeglut_internal.h

index 900b9d0..d6ce1cb 100644 (file)
@@ -92,6 +92,22 @@ void FGAPIENTRY glutSwapBuffers( void )
     SwapBuffers( fgStructure.Window->Window.Device );
 
 #endif
     SwapBuffers( fgStructure.Window->Window.Device );
 
 #endif
+
+    /* GLUT_FPS env var support */
+    if (fgState.FPSInterval) {
+        GLint t = glutGet(GLUT_ELAPSED_TIME);
+        fgState.SwapCount++;
+        if (fgState.SwapTime == 0)
+            fgState.SwapTime = t;
+        else if (t - fgState.SwapTime > fgState.FPSInterval) {
+            float time = 0.001 * (t - fgState.SwapTime);
+            float fps = (float) fgState.SwapCount / time;
+            fprintf(stderr, "FreeGLUT: %d frames in %.2f seconds = %.2f FPS\n",
+                    fgState.SwapCount, time, fps);
+            fgState.SwapTime = t;
+            fgState.SwapCount = 0;
+        }
+    }
 }
 
 /*
 }
 
 /*
index 40cc2a2..a1367b8 100644 (file)
@@ -55,14 +55,33 @@ SFG_Display fgDisplay;
 /*
  * The settings for the current freeglut session
  */
 /*
  * The settings for the current freeglut session
  */
-SFG_State fgState = { { -1, -1, FALSE }, { 300, 300, TRUE }, GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH,
-                      FALSE, TRUE, FALSE, FALSE, FALSE, TRUE,
+SFG_State fgState = { { -1, -1, FALSE },  /* Position */
+                      { 300, 300, TRUE }, /* Size */
+                      GLUT_RGBA | GLUT_SINGLE | GLUT_DEPTH,  /* DisplayMode */
+                      FALSE, /* ForceDirectContext */
+                      TRUE,  /* TryDirectContext */
+                      FALSE, /* ForceIconic */
+                      FALSE, /* GLDebugSwitch */
+                      FALSE, /* XSyncSwitch */
+                      TRUE,  /* IgnoreKeyRepeat */
+                      0,     /* FPSInterval */
+                      0,     /* SwapCount */
+                      0,     /* SwapTime */
 #ifdef TARGET_HOST_WIN32
 #ifdef TARGET_HOST_WIN32
-                      { 0, FALSE },
+                      { 0, FALSE }, /* Time */
 #else
                       { { 0, 0 }, FALSE },
 #endif
 #else
                       { { 0, 0 }, FALSE },
 #endif
-                      { NULL, NULL }, NULL, NULL, NULL, { 640, 480, TRUE }, 16, 72, GLUT_ACTION_EXIT, GLUT_EXEC_STATE_INIT } ;
+                      { NULL, NULL }, /* Timers */
+                      NULL, /* IdleCallback */
+                      NULL, /* MenuStateCallback */
+                      NULL, /* MenuStatusCallback */
+                      { 640, 480, TRUE }, /* GameModeSize */
+                      16,  /* GameModeDepth */
+                      72,  /* GameModeRefresh */
+                      GLUT_ACTION_EXIT, /* ActionOnWindowClose */
+                      GLUT_EXEC_STATE_INIT /* ExecState */
+};
 
 
 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
 
 
 /* -- PRIVATE FUNCTIONS ---------------------------------------------------- */
@@ -312,6 +331,14 @@ void fgDeinitialize( void )
     fgState.MenuStateCallback = (FGCBmenuState)NULL ;
     fgState.MenuStatusCallback = (FGCBmenuStatus)NULL ;
 
     fgState.MenuStateCallback = (FGCBmenuState)NULL ;
     fgState.MenuStatusCallback = (FGCBmenuStatus)NULL ;
 
+    /*
+     * FPS display
+     */
+    fgState.SwapCount   = 0;
+    fgState.SwapTime    = 0;
+    fgState.FPSInterval = 0;
+
+
 #if TARGET_HOST_UNIX_X11
 
     /*
 #if TARGET_HOST_UNIX_X11
 
     /*
@@ -365,6 +392,16 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
 #endif
     fgState.Time.Set = TRUE;
 
 #endif
     fgState.Time.Set = TRUE;
 
+    /* check if GLUT_FPS env var is set */
+    {
+        const char *fps = getenv("GLUT_FPS");
+        if (fps) {
+            sscanf(fps, "%d", &fgState.FPSInterval);
+            if (fgState.FPSInterval <= 0)
+                fgState.FPSInterval = 5000;  /* 5000 milliseconds */
+        }
+    }
+
     /*
      * Grab the environment variable indicating the X display to use.
      * This is harmless under Win32, so let's let it stay here...
     /*
      * Grab the environment variable indicating the X display to use.
      * This is harmless under Win32, so let's let it stay here...
index bb93080..d8d50d8 100644 (file)
@@ -220,6 +220,10 @@ struct tagSFG_State
 
     GLboolean        IgnoreKeyRepeat;      /* Whether to ignore key repeat...   */
 
 
     GLboolean        IgnoreKeyRepeat;      /* Whether to ignore key repeat...   */
 
+    GLuint           FPSInterval;          /* Interval between FPS printfs      */
+    GLuint           SwapCount;            /* Count of glutSwapBuffer calls     */
+    GLuint           SwapTime;             /* Time of last SwapBuffers          */
+
     SFG_Time         Time;                 /* The time that glutInit was called */
     SFG_List         Timers;               /* The freeglut timer hooks          */
 
     SFG_Time         Time;                 /* The time that glutInit was called */
     SFG_List         Timers;               /* The freeglut timer hooks          */