Browse Source

sdl: vid: prevent infinite recursion if SDL failed create window with selected GL attributes

pull/2/head
Alibek Omarov 5 years ago
parent
commit
7be094b563
  1. 34
      engine/platform/sdl/vid_sdl.c
  2. 3
      engine/ref_api.h

34
engine/platform/sdl/vid_sdl.c

@ -548,23 +548,29 @@ qboolean VID_CreateWindow( int width, int height, qboolean fullscreen )
xpos = ypos = 0; xpos = ypos = 0;
} }
host.hWnd = SDL_CreateWindow( wndname, xpos, ypos, width, height, wndFlags ); while( glw_state.safe >= SAFE_NO && glw_state.safe < SAFE_LAST )
if( !host.hWnd )
{ {
Con_Reportf( S_ERROR "VID_CreateWindow: couldn't create '%s': %s\n", wndname, SDL_GetError()); host.hWnd = SDL_CreateWindow( wndname, xpos, ypos, width, height, wndFlags );
// skip some attribs in hope that context creating will not fail // we have window, exit loop
if( glw_state.safe >= SAFE_NO ) if( host.hWnd )
{ break;
if( !gl_wgl_msaa_samples->value && glw_state.safe + 1 == SAFE_NOMSAA )
glw_state.safe += 2; // no need to skip msaa, if we already disabled it
else glw_state.safe++;
GL_SetupAttributes( ); // re-choose attributes
// try again Con_Reportf( S_ERROR "VID_CreateWindow: couldn't create '%s' with safegl level %d: %s\n", wndname, glw_state.safe, SDL_GetError());
return VID_CreateWindow( width, height, fullscreen );
} glw_state.safe++;
if( !gl_wgl_msaa_samples->value && glw_state.safe == SAFE_NOMSAA )
glw_state.safe++; // no need to skip msaa, if we already disabled it
GL_SetupAttributes(); // re-choose attributes
// try again create window
}
// window creation has failed...
if( glw_state.safe >= SAFE_LAST )
{
return false; return false;
} }

3
engine/ref_api.h

@ -166,7 +166,8 @@ typedef enum
SAFE_NOALPHA, // don't set alpha bits SAFE_NOALPHA, // don't set alpha bits
SAFE_NODEPTH, // don't set depth bits SAFE_NODEPTH, // don't set depth bits
SAFE_NOCOLOR, // don't set color bits SAFE_NOCOLOR, // don't set color bits
SAFE_DONTCARE // ignore everything, let SDL/EGL decide SAFE_DONTCARE, // ignore everything, let SDL/EGL decide
SAFE_LAST, // must be last
} ref_safegl_context_t; } ref_safegl_context_t;
enum // OpenGL configuration attributes enum // OpenGL configuration attributes

Loading…
Cancel
Save