Only initialise OpenGL if you actually intend to use it.

This commit is contained in:
Jaime Passos 2020-02-15 14:10:55 -03:00
parent edb7d20290
commit 88e99fed57
3 changed files with 19 additions and 12 deletions

View file

@ -37,8 +37,9 @@ typedef enum
extern rendermode_t rendermode; extern rendermode_t rendermode;
/** \brief hardware renderer loaded /** \brief hardware renderer loaded
0 = never loaded, 1 = loaded successfully, -1 = failed loading
*/ */
extern boolean hwrenderloaded; extern INT32 hwrenderloaded;
/** \brief use highcolor modes if true /** \brief use highcolor modes if true
*/ */

View file

@ -104,7 +104,7 @@ static consvar_t cv_stretch = {"stretch", "Off", CV_SAVE|CV_NOSHOWHELP, CV_OnOff
static consvar_t cv_alwaysgrabmouse = {"alwaysgrabmouse", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL}; static consvar_t cv_alwaysgrabmouse = {"alwaysgrabmouse", "Off", CV_SAVE, CV_OnOff, NULL, 0, NULL, NULL, 0, 0, NULL};
UINT8 graphics_started = 0; // Is used in console.c and screen.c UINT8 graphics_started = 0; // Is used in console.c and screen.c
boolean hwrenderloaded = false; INT32 hwrenderloaded = 0;
// To disable fullscreen at startup; is set in VID_PrepareModeList // To disable fullscreen at startup; is set in VID_PrepareModeList
boolean allow_fullscreen = false; boolean allow_fullscreen = false;
@ -1473,7 +1473,7 @@ static SDL_bool Impl_CreateContext(void)
#ifdef HWRENDER #ifdef HWRENDER
static void VID_CheckGLLoaded(rendermode_t oldrender) static void VID_CheckGLLoaded(rendermode_t oldrender)
{ {
if (!hwrenderloaded) // Well, it didn't work the first time anyway. if (hwrenderloaded == -1) // Well, it didn't work the first time anyway.
{ {
CONS_Alert(CONS_ERROR, "OpenGL never loaded\n"); CONS_Alert(CONS_ERROR, "OpenGL never loaded\n");
rendermode = oldrender; rendermode = oldrender;
@ -1505,8 +1505,13 @@ void VID_CheckRenderer(void)
{ {
rendermode = setrenderneeded; rendermode = setrenderneeded;
#ifdef HWRENDER #ifdef HWRENDER
if (setrenderneeded == render_opengl) if (rendermode == render_opengl)
{
VID_CheckGLLoaded(oldrenderer); VID_CheckGLLoaded(oldrenderer);
// Initialise OpenGL before calling SDLSetMode!!!
if (hwrenderloaded != 1)
I_StartupHardwareGraphics();
}
#endif #endif
Impl_CreateContext(); Impl_CreateContext();
} }
@ -1522,14 +1527,14 @@ void VID_CheckRenderer(void)
bufSurface = NULL; bufSurface = NULL;
} }
#ifdef HWRENDER #ifdef HWRENDER
HWR_FreeTextureCache(); if (hwrenderloaded == 1) // Only if OpenGL ever loaded!
HWR_FreeTextureCache();
#endif #endif
SCR_SetDrawFuncs(); SCR_SetDrawFuncs();
} }
#ifdef HWRENDER #ifdef HWRENDER
else if (rendermode == render_opengl) else if (rendermode == render_opengl)
{ {
I_StartupHardwareGraphics();
// Needs to check if switching failed somehow, too. // Needs to check if switching failed somehow, too.
if (rendermode == render_opengl) if (rendermode == render_opengl)
{ {
@ -1714,7 +1719,8 @@ void I_StartupGraphics(void)
//SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY>>1,SDL_DEFAULT_REPEAT_INTERVAL<<2); //SDL_EnableKeyRepeat(SDL_DEFAULT_REPEAT_DELAY>>1,SDL_DEFAULT_REPEAT_INTERVAL<<2);
VID_Command_ModeList_f(); VID_Command_ModeList_f();
#ifdef HWRENDER #ifdef HWRENDER
I_StartupHardwareGraphics(); if (chosenrendermode == render_opengl)
I_StartupHardwareGraphics();
#endif #endif
// Fury: we do window initialization after GL setup to allow // Fury: we do window initialization after GL setup to allow
@ -1807,12 +1813,12 @@ void I_StartupHardwareGraphics(void)
if (HWD.pfnGetRenderVersion() != VERSION) if (HWD.pfnGetRenderVersion() != VERSION)
{ {
CONS_Alert(CONS_ERROR, M_GetText("The version of the renderer doesn't match the version of the executable\nBe sure you have installed SRB2 properly.\n")); CONS_Alert(CONS_ERROR, M_GetText("The version of the renderer doesn't match the version of the executable\nBe sure you have installed SRB2 properly.\n"));
hwrenderloaded = false; hwrenderloaded = -1;
} }
else else
hwrenderloaded = HWD.pfnInit(I_Error); // let load the OpenGL library hwrenderloaded = HWD.pfnInit(I_Error) ? 1 : -1; // let load the OpenGL library
if (!hwrenderloaded) if (hwrenderloaded == -1)
{ {
rendermode = render_soft; rendermode = render_soft;
setrenderneeded = 0; setrenderneeded = 0;

View file

@ -95,10 +95,10 @@ boolean LoadGL(void)
if (SDL_GL_LoadLibrary(OGLLibname) != 0) if (SDL_GL_LoadLibrary(OGLLibname) != 0)
{ {
I_OutputMsg("Could not load OpenGL Library: %s\n" CONS_Alert(CONS_ERROR, "Could not load OpenGL Library: %s\n"
"Falling back to Software mode.\n", SDL_GetError()); "Falling back to Software mode.\n", SDL_GetError());
if (!M_CheckParm ("-OGLlib")) if (!M_CheckParm ("-OGLlib"))
I_OutputMsg("If you know what is the OpenGL library's name, use -OGLlib\n"); CONS_Alert(CONS_ERROR, "If you know what is the OpenGL library's name, use -OGLlib\n");
return 0; return 0;
} }