The gl_data is optional for the driver, so don't early out of the context delete call if it doesn't exist.
authorSam Lantinga <slouken@libsdl.org>
Sun, 30 Sep 2012 01:08:48 -0700
changeset 6522 edacce9402fb
parent 6521 f36bbe0a10c9
child 6523 62d0193a7a02
The gl_data is optional for the driver, so don't early out of the context delete call if it doesn't exist.
src/video/SDL_video.c
src/video/windows/SDL_windowsopengl.c
src/video/x11/SDL_x11opengl.c
src/video/x11/SDL_x11opengles.c
--- a/src/video/SDL_video.c	Sun Sep 30 01:01:48 2012 -0700
+++ b/src/video/SDL_video.c	Sun Sep 30 01:08:48 2012 -0700
@@ -2639,7 +2639,7 @@
 void
 SDL_GL_DeleteContext(SDL_GLContext context)
 {
-    if (!_this || !_this->gl_data || !context) {
+    if (!_this || !context) {
         return;
     }
     _this->GL_MakeCurrent(_this, NULL, NULL);
--- a/src/video/windows/SDL_windowsopengl.c	Sun Sep 30 01:01:48 2012 -0700
+++ b/src/video/windows/SDL_windowsopengl.c	Sun Sep 30 01:08:48 2012 -0700
@@ -613,6 +613,11 @@
     HDC hdc;
     int status;
 
+    if (!_this->gl_data) {
+        SDL_SetError("OpenGL not initialized");
+        return -1;
+    }
+
     if (window) {
         hdc = ((SDL_WindowData *) window->driverdata)->hdc;
     } else {
@@ -666,6 +671,9 @@
 void
 WIN_GL_DeleteContext(_THIS, SDL_GLContext context)
 {
+    if (!_this->gl_data) {
+        return;
+    }
     _this->gl_data->wglDeleteContext((HGLRC) context);
 }
 
--- a/src/video/x11/SDL_x11opengl.c	Sun Sep 30 01:01:48 2012 -0700
+++ b/src/video/x11/SDL_x11opengl.c	Sun Sep 30 01:08:48 2012 -0700
@@ -610,6 +610,11 @@
     GLXContext glx_context = (GLXContext) context;
     int status;
 
+    if (!_this->gl_data) {
+        SDL_SetError("OpenGL not initialized");
+        return -1;
+    }
+
     status = 0;
     if (!_this->gl_data->glXMakeCurrent(display, drawable, glx_context)) {
         SDL_SetError("Unable to make GL context current");
@@ -714,6 +719,9 @@
     Display *display = ((SDL_VideoData *) _this->driverdata)->display;
     GLXContext glx_context = (GLXContext) context;
 
+    if (!_this->gl_data) {
+        return;
+    }
     _this->gl_data->glXDestroyContext(display, glx_context);
     XSync(display, False);
 }
--- a/src/video/x11/SDL_x11opengles.c	Sun Sep 30 01:01:48 2012 -0700
+++ b/src/video/x11/SDL_x11opengles.c	Sun Sep 30 01:08:48 2012 -0700
@@ -358,6 +358,11 @@
 //    SDL_WindowData *data = (SDL_WindowData *) window->driverdata;
 //    Display *display = data->videodata->display;
 
+    if (!_this->gles_data) {
+        SDL_SetError("OpenGL not initialized");
+        return -1;
+    }
+
     retval = 1;
     if (!_this->gles_data->eglMakeCurrent(_this->gles_data->egl_display,
                                           _this->gles_data->egl_surface,
@@ -412,32 +417,33 @@
 X11_GLES_DeleteContext(_THIS, SDL_GLContext context)
 {
     /* Clean up GLES and EGL */
-    if (_this->gles_data) {  
-        if (_this->gles_data->egl_context != EGL_NO_CONTEXT ||
-            _this->gles_data->egl_surface != EGL_NO_SURFACE) {
-            _this->gles_data->eglMakeCurrent(_this->gles_data->egl_display,
-                                             EGL_NO_SURFACE, EGL_NO_SURFACE,
-                                             EGL_NO_CONTEXT);
+    if (!_this->gles_data) {  
+        return;
+    }
 
-            if (_this->gles_data->egl_context != EGL_NO_CONTEXT) {
-                _this->gles_data->eglDestroyContext(_this->gles_data->egl_display,
-                                                    _this->gles_data->
-                                                    egl_context);
-                _this->gles_data->egl_context = EGL_NO_CONTEXT;
-            }
+    if (_this->gles_data->egl_context != EGL_NO_CONTEXT ||
+        _this->gles_data->egl_surface != EGL_NO_SURFACE) {
+        _this->gles_data->eglMakeCurrent(_this->gles_data->egl_display,
+                                         EGL_NO_SURFACE, EGL_NO_SURFACE,
+                                         EGL_NO_CONTEXT);
 
-            if (_this->gles_data->egl_surface != EGL_NO_SURFACE) {
-                _this->gles_data->eglDestroySurface(_this->gles_data->egl_display,
-                                                    _this->gles_data->
-                                                    egl_surface);
-                _this->gles_data->egl_surface = EGL_NO_SURFACE;
-            }
+        if (_this->gles_data->egl_context != EGL_NO_CONTEXT) {
+            _this->gles_data->eglDestroyContext(_this->gles_data->egl_display,
+                                                _this->gles_data->
+                                                egl_context);
+            _this->gles_data->egl_context = EGL_NO_CONTEXT;
         }
 
-        /* crappy fix */
-        X11_GLES_UnloadLibrary(_this);
+        if (_this->gles_data->egl_surface != EGL_NO_SURFACE) {
+            _this->gles_data->eglDestroySurface(_this->gles_data->egl_display,
+                                                _this->gles_data->
+                                                egl_surface);
+            _this->gles_data->egl_surface = EGL_NO_SURFACE;
+        }
     }
 
+    /* crappy fix */
+    X11_GLES_UnloadLibrary(_this);
 }
 
 #endif /* SDL_VIDEO_DRIVER_X11 && SDL_VIDEO_OPENGL_ES */