X-Git-Url: http://git.mutantstargoat.com/user/nuclear/?a=blobdiff_plain;f=src%2Ffreeglut_gamemode.c;h=b0194b2e04c304f7a6087b1ebb36b302937c68bf;hb=97e842e50bcf77fb81f83de8d6983e0ddfa0b6d6;hp=d466156a5ff81c5995f90110633a12f38713487d;hpb=7fdce1253e14170b6cb933f13c1f2a1644c93793;p=freeglut diff --git a/src/freeglut_gamemode.c b/src/freeglut_gamemode.c index d466156..b0194b2 100644 --- a/src/freeglut_gamemode.c +++ b/src/freeglut_gamemode.c @@ -110,7 +110,7 @@ static void fghRememberState( void ) /* hack to get around my stupid cross-gcc headers */ #define FREEGLUT_ENUM_CURRENT_SETTINGS -1 - EnumDisplaySettings( NULL, FREEGLUT_ENUM_CURRENT_SETTINGS, + EnumDisplaySettings( fgDisplay.DisplayName, FREEGLUT_ENUM_CURRENT_SETTINGS, &fgDisplay.DisplayMode ); /* Make sure we will be restoring all settings needed */ @@ -205,7 +205,7 @@ static void fghRestoreState( void ) #elif TARGET_HOST_MS_WINDOWS /* Restore the previously rememebered desktop display settings */ - ChangeDisplaySettings( &fgDisplay.DisplayMode, 0 ); + ChangeDisplaySettingsEx( fgDisplay.DisplayName,&fgDisplay.DisplayMode, 0,0,0 ); #endif } @@ -323,22 +323,37 @@ static GLboolean fghChangeDisplayMode( GLboolean haveToTest ) success = GL_FALSE; - EnumDisplaySettings( NULL, -1, &devMode ); - devMode.dmFields |= DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; + EnumDisplaySettings( fgDisplay.DisplayName, -1, &devMode ); + devMode.dmFields = 0; - devMode.dmPelsWidth = fgState.GameModeSize.X; - devMode.dmPelsHeight = fgState.GameModeSize.Y; - devMode.dmBitsPerPel = fgState.GameModeDepth; - devMode.dmDisplayFrequency = fgState.GameModeRefresh; - devMode.dmFields = DM_PELSWIDTH | DM_PELSHEIGHT | DM_BITSPERPEL | DM_DISPLAYFREQUENCY; + if (fgState.GameModeSize.X!=-1) + { + devMode.dmPelsWidth = fgState.GameModeSize.X; + devMode.dmFields |= DM_PELSWIDTH; + } + if (fgState.GameModeSize.Y!=-1) + { + devMode.dmPelsHeight = fgState.GameModeSize.Y; + devMode.dmFields |= DM_PELSHEIGHT; + } + if (fgState.GameModeDepth!=-1) + { + devMode.dmBitsPerPel = fgState.GameModeDepth; + devMode.dmFields |= DM_BITSPERPEL; + } + if (fgState.GameModeRefresh!=-1) + { + devMode.dmDisplayFrequency = fgState.GameModeRefresh; + devMode.dmFields |= DM_DISPLAYFREQUENCY; + } - switch ( ChangeDisplaySettingsEx(NULL, &devMode, NULL, haveToTest ? CDS_TEST : CDS_FULLSCREEN , NULL) ) + switch ( ChangeDisplaySettingsEx(fgDisplay.DisplayName, &devMode, NULL, haveToTest ? CDS_TEST : CDS_FULLSCREEN , NULL) ) { case DISP_CHANGE_SUCCESSFUL: success = GL_TRUE; /* update vars in case if windows switched to proper mode */ - EnumDisplaySettings( NULL, FREEGLUT_ENUM_CURRENT_SETTINGS, &devMode ); + EnumDisplaySettings( fgDisplay.DisplayName, FREEGLUT_ENUM_CURRENT_SETTINGS, &devMode ); fgState.GameModeSize.X = devMode.dmPelsWidth; fgState.GameModeSize.Y = devMode.dmPelsHeight; fgState.GameModeDepth = devMode.dmBitsPerPel; @@ -380,7 +395,7 @@ static GLboolean fghChangeDisplayMode( GLboolean haveToTest ) */ void FGAPIENTRY glutGameModeString( const char* string ) { - int width = 640, height = 480, depth = 16, refresh = 72; + int width = -1, height = -1, depth = -1, refresh = -1; FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glutGameModeString" ); @@ -404,12 +419,14 @@ void FGAPIENTRY glutGameModeString( const char* string ) ); /* Hopefully it worked, and if not, we still have the default values */ - fgState.GameModeSize.X = width; - fgState.GameModeSize.Y = height; - fgState.GameModeDepth = depth; - fgState.GameModeRefresh = refresh; + if ( width > 0 ) fgState.GameModeSize.X = width; + if ( height > 0 ) fgState.GameModeSize.Y = height; + if ( depth > 0 ) fgState.GameModeDepth = depth; + if ( refresh > 0 ) fgState.GameModeRefresh = refresh; } + + /* * Enters the game mode */ @@ -429,16 +446,15 @@ int FGAPIENTRY glutEnterGameMode( void ) } fgStructure.GameModeWindow = fgCreateWindow( - NULL, "FREEGLUT", 0, 0, - fgState.GameModeSize.X, fgState.GameModeSize.Y, GL_TRUE, GL_FALSE + NULL, "FREEGLUT", GL_TRUE, 0, 0, + GL_TRUE, fgState.GameModeSize.X, fgState.GameModeSize.Y, + GL_TRUE, GL_FALSE ); fgStructure.GameModeWindow->State.Width = fgState.GameModeSize.X; fgStructure.GameModeWindow->State.Height = fgState.GameModeSize.Y; fgStructure.GameModeWindow->State.NeedToResize = GL_TRUE; - fgStructure.GameModeWindow->State.IsGameMode = GL_TRUE; - #if TARGET_HOST_POSIX_X11 /* @@ -541,8 +557,6 @@ void FGAPIENTRY glutLeaveGameMode( void ) freeglut_return_if_fail( fgStructure.GameModeWindow ); - fgStructure.GameModeWindow->State.IsGameMode = GL_FALSE; - fgAddToWindowDestroyList( fgStructure.GameModeWindow ); fgStructure.GameModeWindow = NULL;