From 67ed894353a102fd88bf5e83987d719bacb7a1dc Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 1 Jan 2017 19:10:36 -0800 Subject: [PATCH] Fixed bug 3529 - SDL_EGL_UnloadLibrary is not called at all on SDL_Quit kaisyu In case of OpenGLES, the sequences of loading and unloading driver library should be like that: SDL_Init ... SDL_GL_LoadLibrary SDL_EGL_LoadLibrary ... SDL_Quit ... SDL_GL_UnloadLibrary SDL_EGL_UnloadLibrary ... However, according to my test results, the varible '_this->gl_config.driver_loaded' does not allow 'SDL_GL_UnloadLibrary' to call 'SDL_EGL_UnloadLibrary'. --- src/video/SDL_egl.c | 2 -- src/video/directfb/SDL_DirectFB_opengl.c | 15 ++++----------- src/video/emscripten/SDL_emscriptenopengles.c | 2 -- src/video/psp/SDL_pspgl.c | 4 ---- 4 files changed, 4 insertions(+), 19 deletions(-) diff --git a/src/video/SDL_egl.c b/src/video/SDL_egl.c index 2c2663203..21276f1a2 100644 --- a/src/video/SDL_egl.c +++ b/src/video/SDL_egl.c @@ -313,8 +313,6 @@ SDL_EGL_LoadLibrary(_THIS, const char *egl_path, NativeDisplayType native_displa } #endif - _this->gl_config.driver_loaded = 1; - if (path) { SDL_strlcpy(_this->gl_config.driver_path, path, sizeof(_this->gl_config.driver_path) - 1); } else { diff --git a/src/video/directfb/SDL_DirectFB_opengl.c b/src/video/directfb/SDL_DirectFB_opengl.c index 2068e7561..0541e556a 100644 --- a/src/video/directfb/SDL_DirectFB_opengl.c +++ b/src/video/directfb/SDL_DirectFB_opengl.c @@ -133,7 +133,6 @@ DirectFB_GL_LoadLibrary(_THIS, const char *path) SDL_DFB_DEBUG("Loaded library: %s\n", path); _this->gl_config.dll_handle = handle; - _this->gl_config.driver_loaded = 1; if (path) { SDL_strlcpy(_this->gl_config.driver_path, path, SDL_arraysize(_this->gl_config.driver_path)); @@ -151,16 +150,10 @@ static void DirectFB_GL_UnloadLibrary(_THIS) { #if 0 - int ret; - - if (_this->gl_config.driver_loaded) { - - ret = GL_UnloadObject(_this->gl_config.dll_handle); - if (ret) - SDL_DFB_ERR("Error #%d trying to unload library.\n", ret); - _this->gl_config.dll_handle = NULL; - _this->gl_config.driver_loaded = 0; - } + int ret = GL_UnloadObject(_this->gl_config.dll_handle); + if (ret) + SDL_DFB_ERR("Error #%d trying to unload library.\n", ret); + _this->gl_config.dll_handle = NULL; #endif /* Free OpenGL memory */ SDL_free(_this->gl_data); diff --git a/src/video/emscripten/SDL_emscriptenopengles.c b/src/video/emscripten/SDL_emscriptenopengles.c index 078797873..2d9c1ddce 100644 --- a/src/video/emscripten/SDL_emscriptenopengles.c +++ b/src/video/emscripten/SDL_emscriptenopengles.c @@ -70,8 +70,6 @@ Emscripten_GLES_LoadLibrary(_THIS, const char *path) { return SDL_SetError("Could not initialize EGL"); } - _this->gl_config.driver_loaded = 1; - if (path) { SDL_strlcpy(_this->gl_config.driver_path, path, sizeof(_this->gl_config.driver_path) - 1); } else { diff --git a/src/video/psp/SDL_pspgl.c b/src/video/psp/SDL_pspgl.c index e7fc0592d..f8ff10bfe 100644 --- a/src/video/psp/SDL_pspgl.c +++ b/src/video/psp/SDL_pspgl.c @@ -47,10 +47,6 @@ int PSP_GL_LoadLibrary(_THIS, const char *path) { - if (!_this->gl_config.driver_loaded) { - _this->gl_config.driver_loaded = 1; - } - return 0; }