Fixed:
* GLUT_SINGLE now should behave more or less correctly. Thanks to Brian Paul! * Sleeping is now cognizant of outstanding redisplays. * Fractals_random has been restored more or less to as-before, save that it uses the more minimal glFlush() rather than glutSwapBuffers(). glutSwapBuffers() was only required when freeglut was incorrectly handling promotion to double-buffering. git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@202 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
4d8a8e7085
commit
93d944835a
@ -81,7 +81,7 @@ Display(void)
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
// glutSwapBuffers(); /* Should NOT be here... This is a Single-Buffered Program! */
|
||||
glFlush();
|
||||
glutPostRedisplay(); /* Needed so that this function will be called again */
|
||||
}
|
||||
|
||||
@ -236,10 +236,6 @@ void readConfigFile ( char *fnme )
|
||||
}
|
||||
}
|
||||
|
||||
void Idle(void) {
|
||||
return;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
@ -266,7 +262,6 @@ main(int argc, char *argv[])
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(Special);
|
||||
glutDisplayFunc(Display);
|
||||
glutIdleFunc(Idle);
|
||||
|
||||
glutMainLoop();
|
||||
|
||||
|
@ -454,6 +454,22 @@ static int fgHaveJoystick( void )
|
||||
fgEnumWindows( fgCheckJoystickCallback, &enumerator );
|
||||
return !!enumerator.data;
|
||||
}
|
||||
static void fgHavePendingRedisplaysCallback( SFG_Window* w, SFG_Enumerator* e)
|
||||
{
|
||||
if( w->State.Redisplay )
|
||||
{
|
||||
e->found = TRUE;
|
||||
e->data = w;
|
||||
}
|
||||
}
|
||||
static int fgHavePendingRedisplays (void)
|
||||
{
|
||||
SFG_Enumerator enumerator;
|
||||
enumerator.found = FALSE;
|
||||
enumerator.data = NULL;
|
||||
fgEnumWindows( fgHavePendingRedisplaysCallback, &enumerator );
|
||||
return !!enumerator.data;
|
||||
}
|
||||
/*
|
||||
* Indicates whether there are any outstanding timers.
|
||||
*/
|
||||
@ -490,6 +506,9 @@ static void fgSleepForEvents( void )
|
||||
struct timeval wait;
|
||||
long msec;
|
||||
|
||||
if( fgState.IdleCallback ||
|
||||
fgHavePendingRedisplays() )
|
||||
return;
|
||||
socket = ConnectionNumber( fgDisplay.Display );
|
||||
FD_ZERO( &fdset );
|
||||
FD_SET( socket, &fdset );
|
||||
@ -1227,7 +1246,7 @@ void FGAPIENTRY glutMainLoop( void )
|
||||
*/
|
||||
if ( fgStructure.Windows.First == NULL )
|
||||
fgState.ExecState = GLUT_EXEC_STATE_STOP ;
|
||||
else if( !fgState.IdleCallback )
|
||||
else
|
||||
fgSleepForEvents();
|
||||
}
|
||||
|
||||
|
@ -397,6 +397,10 @@ void fgOpenWindow( SFG_Window* window, const char* title, int x, int y, int w, i
|
||||
*/
|
||||
fgState.DisplayMode |= GLUT_DOUBLE ;
|
||||
window->Window.VisualInfo = fgChooseVisual();
|
||||
/* OK, we got a double-buffered window, but we only wanted
|
||||
* single-buffered. Clear the double-buffer flag now.
|
||||
*/
|
||||
fgState.DisplayMode &= ~GLUT_DOUBLE ;
|
||||
}
|
||||
|
||||
/*
|
||||
|
Reference in New Issue
Block a user