X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=freeglut-1.3%2Ffreeglut_gamemode.c;h=d6c6a25642cd13c0c66d4b07c68ff8e0be7ab9af;hb=244417cf0e67e55547c077f771513e67f362a8c3;hp=30c552c011b6303c588084119822e1349f9ceb77;hpb=325b6327a5df4c476789ac5a329031677f3ca59b;p=freeglut diff --git a/freeglut-1.3/freeglut_gamemode.c b/freeglut-1.3/freeglut_gamemode.c index 30c552c..d6c6a25 100644 --- a/freeglut-1.3/freeglut_gamemode.c +++ b/freeglut-1.3/freeglut_gamemode.c @@ -75,7 +75,7 @@ void fghRememberState( void ) #elif TARGET_HOST_WIN32 - DEVMODE devMode; +/* DEVMODE devMode; */ /* * Grab the current desktop settings... @@ -137,6 +137,15 @@ void fghRestoreState( void ) displayModes[ i ] ); + /* + * In case this will be the last X11 call we do before exit, + * we've to flush the X11 output queue to be sure the command + * is really brought onto it's way to the X server. + * The application should not do this because it + * would not be platform independent then. + */ + XFlush(fgDisplay.Display); + return; } } @@ -200,6 +209,8 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest ) if( fghCheckDisplayMode( displayModes[ i ]->hdisplay, displayModes[ i ]->vdisplay, fgState.GameModeDepth, fgState.GameModeRefresh ) ) { + if( haveToTest ) + return( TRUE ); /* * OKi, this is the display mode we have been looking for... */ @@ -239,11 +250,12 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest ) unsigned int displayModes = 0, mode = 0xffffffff; GLboolean success = FALSE; - HDC desktopDC; +/* HDC desktopDC; */ DEVMODE devMode; /* * Enumerate the available display modes + * Try to get a complete match */ while( EnumDisplaySettings( NULL, displayModes, &devMode ) == TRUE ) { @@ -251,7 +263,7 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest ) * Does the enumerated display mode match the user's preferences? */ if( fghCheckDisplayMode( devMode.dmPelsWidth, devMode.dmPelsHeight, - devMode.dmBitsPerPel, fgState.GameModeRefresh ) ) + devMode.dmBitsPerPel, devMode.dmDisplayFrequency ) ) { /* * OKi, we've found a matching display mode, remember its number and break @@ -266,6 +278,35 @@ GLboolean fghChangeDisplayMode( GLboolean haveToTest ) displayModes++; } + if ( mode == 0xffffffff ) + { + /* then try without Display Frequency */ + displayModes = 0; + + /* + * Enumerate the available display modes + */ + while( EnumDisplaySettings( NULL, displayModes, &devMode ) == TRUE ) + { + /* then try without Display Frequency */ + + if( fghCheckDisplayMode( devMode.dmPelsWidth, devMode.dmPelsHeight, + devMode.dmBitsPerPel, fgState.GameModeRefresh)) + { + /* + * OKi, we've found a matching display mode, remember its number and break + */ + mode = displayModes; + break; + } + + /* + * Switch to the next display mode, if any + */ + displayModes++; + } + } + /* * Did we find a matching display mode? */