added glutGetProcAddress() and GLUT_FPS env var option
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 17 Aug 2002 00:12:12 +0000 (00:12 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 17 Aug 2002 00:12:12 +0000 (00:12 +0000)
src/glut/glx/glut_ext.c
src/glut/glx/glut_init.c
src/glut/glx/glut_swap.c
src/glut/glx/glutint.h

index abcb17a911bbd966a6efcf117763a9a8082e9318..ceea4ca15ab17a0aa52ffd3d743d3be514d3a338 100644 (file)
@@ -50,4 +50,19 @@ glutExtensionSupported(const char *extension)
   return 0;
 }
 
+
+/* XXX This isn't an official GLUT function, yet */
+void * APIENTRY 
+glutGetProcAddress(const char *procName)
+{
+#if defined(_WIN32)
+  return (void *) wglGetProcAddress((LPCSTR) procName);
+#elif defined(GLX_ARB_get_proc_address)
+  return (void *) glXGetProcAddressARB((const GLubyte *) procName);
+#else
+  return NULL;
+#endif
+}
+
+
 /* ENDCENTRY */
index dcd423a9417fa303779c027049f90e9b3e48acea..d814479db0d1481960967373b37e2de660ba0d8f 100644 (file)
@@ -331,6 +331,16 @@ glutInit(int *argcp, char **argv)
     glutInitWindowPosition(__glutInitX, __glutInitY);
   }
   __glutInitTime(&unused);
+
+  /* check if GLUT_FPS env var is set */
+  {
+     const char *fps = getenv("GLUT_FPS");
+     if (fps) {
+        sscanf(fps, "%d", &__glutFPS);
+        if (__glutFPS <= 0)
+           __glutFPS = 5000;  /* 5000 milliseconds */
+     }
+  }
 }
 
 #ifdef _WIN32
index 0864e58d42923681973fa9fb5de659e95e54cd21..cb3f653c72cfb39ded8b1b291c6ed577b6b6fd65 100644 (file)
@@ -5,8 +5,13 @@
    and is provided without guarantee or warrantee expressed or
    implied. This program is -not- in the public domain. */
 
+#include <stdio.h>
 #include "glutint.h"
 
+GLint __glutFPS = 0;
+GLint __glutSwapCount = 0;
+GLint __glutSwapTime = 0;
+
 /* CENTRY */
 void APIENTRY
 glutSwapBuffers(void)
@@ -43,5 +48,20 @@ glutSwapBuffers(void)
      glutPostRedisplay to trigger redraws.  If
      glutPostRedisplay were used, __glutSetWindow would be
      called and a glFinish to throttle buffering would occur. */
+
+  if (__glutFPS) {
+     GLint t = glutGet(GLUT_ELAPSED_TIME);
+     __glutSwapCount++;
+     if (__glutSwapTime == 0)
+        __glutSwapTime = t;
+     else if (t - __glutSwapTime > __glutFPS) {
+        float time = 0.001 * (t - __glutSwapTime);
+        float fps = (float) __glutSwapCount / time;
+        fprintf(stderr, "GLUT: %d frames in %.2f seconds = %.2f FPS\n",
+                __glutSwapCount, time, fps);
+        __glutSwapTime = t;
+        __glutSwapCount = 0;
+     }
+  }
 }
 /* ENDCENTRY */
index b0d6c86b7c42fc97ee5c50e936306da34b06e8e5..5e06bfc435eb6637a1d29be56c26974f6dacd75b 100644 (file)
@@ -798,6 +798,11 @@ extern void __glutDetermineMesaSwapHackSupport(void);
 /* private routines from glut_gameglut.c */
 extern void GLUTAPIENTRYV __glutCloseDownGameMode(void);
 
+/* private variables from glut_swap.c (BrianP) */
+extern GLint __glutFPS;
+extern GLint __glutSwapCount;
+extern GLint __glutSwapTime;
+
 #if defined(_WIN32)
 /* private routines from win32_*.c */
 extern LONG WINAPI __glutWindowProc(HWND win, UINT msg, WPARAM w, LPARAM l);