Fixing the unspecified game mode parameter problem per e-mail from Diederick Niehorster dated 3/16/11 1:06 AM -- putting in both 'gamemode-unspecified' patch files at once

git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@901 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
fayjf 2011-03-17 02:53:40 +00:00
parent f11acde225
commit fb0382908b

View File

@ -364,7 +364,7 @@ static GLboolean fghChangeDisplayMode( GLboolean haveToTest )
# ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H # ifdef HAVE_X11_EXTENSIONS_XF86VMODE_H
/* /*
* This is also used by applcations which check modes by calling * This is also used by applications which check modes by calling
* glutGameModeGet(GLUT_GAME_MODE_POSSIBLE), so allow the check: * glutGameModeGet(GLUT_GAME_MODE_POSSIBLE), so allow the check:
*/ */
if( haveToTest || fgDisplay.DisplayModeValid ) if( haveToTest || fgDisplay.DisplayModeValid )
@ -372,6 +372,33 @@ static GLboolean fghChangeDisplayMode( GLboolean haveToTest )
XF86VidModeModeInfo** displayModes; XF86VidModeModeInfo** displayModes;
int i, displayModesCount; int i, displayModesCount;
/* current display mode was queried in fghRememberState
* set defaulted values to the current display mode's
*/
if (fgState.GameModeSize.X == -1)
{
fgState.GameModeSize.X = fgDisplay.DisplayMode.hdisplay;
}
if (fgState.GameModeSize.Y == -1)
{
fgState.GameModeSize.Y = fgDisplay.DisplayMode.vdisplay;
}
if (fgState.GameModeDepth == -1)
{
/* can't get color depth from this, nor can we change it, do nothing
* TODO: get with XGetVisualInfo()? but then how to set?
*/
}
if (fgState.GameModeRefresh != -1)
{
/* Compute the displays refresh rate, dotclock comes in kHz. */
int refresh = ( fgDisplay.DisplayModeClock * 1000 ) /
( fgDisplay.DisplayMode.htotal * fgDisplay.DisplayMode.vtotal );
fgState.GameModeRefresh = refresh;
}
/* query all possible display modes */
if( !XF86VidModeGetAllModeLines( if( !XF86VidModeGetAllModeLines(
fgDisplay.Display, fgDisplay.Display,
fgDisplay.Screen, fgDisplay.Screen,
@ -516,11 +543,14 @@ void FGAPIENTRY glutGameModeString( const char* string )
string string
); );
/* Hopefully it worked, and if not, we still have the default values */ /* All values not specified are now set to -1, which means those
if ( width > 0 ) fgState.GameModeSize.X = width; * aspects of the current display mode are not changed in
if ( height > 0 ) fgState.GameModeSize.Y = height; * fghChangeDisplayMode() above.
if ( depth > 0 ) fgState.GameModeDepth = depth; */
if ( refresh > 0 ) fgState.GameModeRefresh = refresh; fgState.GameModeSize.X = width;
fgState.GameModeSize.Y = height;
fgState.GameModeDepth = depth;
fgState.GameModeRefresh = refresh;
} }