added GLUT_FPS env var option

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@66 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
brianp 2003-06-17 16:55:22 +00:00
parent 863ce91b8e
commit 5ebfbb5e97
3 changed files with 62 additions and 4 deletions

View File

@ -92,6 +92,22 @@ void FGAPIENTRY glutSwapBuffers( void )
SwapBuffers( fgStructure.Window->Window.Device ); SwapBuffers( fgStructure.Window->Window.Device );
#endif #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;
}
}
} }
/* /*

View 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, SFG_State fgState = { { -1, -1, FALSE }, /* Position */
FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, { 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 #else
{ { 0, 0 }, FALSE }, { { 0, 0 }, FALSE },
#endif #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.MenuStateCallback = (FGCBmenuState)NULL ;
fgState.MenuStatusCallback = (FGCBmenuStatus)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,17 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
#endif #endif
fgState.Time.Set = TRUE; 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. * Grab the environment variable indicating the X display to use.
* This is harmless under Win32, so let's let it stay here... * This is harmless under Win32, so let's let it stay here...

View 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_Time Time; /* The time that glutInit was called */
SFG_List Timers; /* The freeglut timer hooks */ SFG_List Timers; /* The freeglut timer hooks */