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:
parent
863ce91b8e
commit
5ebfbb5e97
@ -92,6 +92,22 @@ void FGAPIENTRY glutSwapBuffers( void )
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -55,14 +55,33 @@ SFG_Display fgDisplay;
|
||||
/*
|
||||
* 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
|
||||
{ 0, FALSE },
|
||||
{ 0, FALSE }, /* Time */
|
||||
#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 ---------------------------------------------------- */
|
||||
@ -312,6 +331,14 @@ void fgDeinitialize( void )
|
||||
fgState.MenuStateCallback = (FGCBmenuState)NULL ;
|
||||
fgState.MenuStatusCallback = (FGCBmenuStatus)NULL ;
|
||||
|
||||
/*
|
||||
* FPS display
|
||||
*/
|
||||
fgState.SwapCount = 0;
|
||||
fgState.SwapTime = 0;
|
||||
fgState.FPSInterval = 0;
|
||||
|
||||
|
||||
#if TARGET_HOST_UNIX_X11
|
||||
|
||||
/*
|
||||
@ -365,6 +392,17 @@ void FGAPIENTRY glutInit( int* pargc, char** argv )
|
||||
#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...
|
||||
|
@ -220,6 +220,10 @@ struct tagSFG_State
|
||||
|
||||
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 */
|
||||
|
||||
|
Reference in New Issue
Block a user