aboutsummaryrefslogtreecommitdiffstats
path: root/code/sdl
diff options
context:
space:
mode:
Diffstat (limited to 'code/sdl')
-rw-r--r--code/sdl/sdl_glimp.c36
1 files changed, 20 insertions, 16 deletions
diff --git a/code/sdl/sdl_glimp.c b/code/sdl/sdl_glimp.c
index 0b143d7..ba08ade 100644
--- a/code/sdl/sdl_glimp.c
+++ b/code/sdl/sdl_glimp.c
@@ -665,31 +665,35 @@ of OpenGL
*/
void GLimp_Init( void )
{
- qboolean success = qtrue;
-
r_allowSoftwareGL = ri.Cvar_Get( "r_allowSoftwareGL", "0", CVAR_LATCH );
r_sdlDriver = ri.Cvar_Get( "r_sdlDriver", "", CVAR_ROM );
Sys_GLimpInit( );
- // create the window and set up the context
- if( !GLimp_StartDriverAndSetMode( r_mode->integer, r_fullscreen->integer ) )
+ // Create the window and set up the context
+ if( GLimp_StartDriverAndSetMode( r_mode->integer, r_fullscreen->integer ) )
+ goto success;
+
+ // Try again, this time in a platform specific "safe mode"
+ Sys_GLimpSafeInit( );
+
+ if( GLimp_StartDriverAndSetMode( r_mode->integer, r_fullscreen->integer ) )
+ goto success;
+
+ // Finally, try the default screen resolution
+ if( r_mode->integer != R_MODE_FALLBACK )
{
- if( r_mode->integer != R_MODE_FALLBACK )
- {
- ri.Printf( PRINT_ALL, "Setting r_mode %d failed, falling back on r_mode %d\n",
- r_mode->integer, R_MODE_FALLBACK );
- ri.Cvar_Set("r_ext_multisample", "0");
- if( !GLimp_StartDriverAndSetMode( R_MODE_FALLBACK, r_fullscreen->integer ) )
- success = qfalse;
- }
- else
- success = qfalse;
+ ri.Printf( PRINT_ALL, "Setting r_mode %d failed, falling back on r_mode %d\n",
+ r_mode->integer, R_MODE_FALLBACK );
+
+ if( GLimp_StartDriverAndSetMode( R_MODE_FALLBACK, r_fullscreen->integer ) )
+ goto success;
}
- if( !success )
- ri.Error( ERR_FATAL, "GLimp_Init() - could not load OpenGL subsystem\n" );
+ // Nothing worked, give up
+ ri.Error( ERR_FATAL, "GLimp_Init() - could not load OpenGL subsystem\n" );
+success:
// This values force the UI to disable driver selection
glConfig.driverType = GLDRV_ICD;
glConfig.hardwareType = GLHW_GENERIC;