Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Commit

Permalink
The gl_data is optional for the driver, so don't early out of the con…
Browse files Browse the repository at this point in the history
…text delete call if it doesn't exist.
  • Loading branch information
slouken committed Sep 30, 2012
1 parent 0779f14 commit 0df86b8
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 22 deletions.
2 changes: 1 addition & 1 deletion src/video/SDL_video.c
Expand Up @@ -2639,7 +2639,7 @@ SDL_GL_SwapWindow(SDL_Window * window)
void
SDL_GL_DeleteContext(SDL_GLContext context)
{
if (!_this || !_this->gl_data || !context) {
if (!_this || !context) {
return;
}
_this->GL_MakeCurrent(_this, NULL, NULL);
Expand Down
8 changes: 8 additions & 0 deletions src/video/windows/SDL_windowsopengl.c
Expand Up @@ -613,6 +613,11 @@ WIN_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
HDC hdc;
int status;

if (!_this->gl_data) {
SDL_SetError("OpenGL not initialized");
return -1;
}

if (window) {
hdc = ((SDL_WindowData *) window->driverdata)->hdc;
} else {
Expand Down Expand Up @@ -666,6 +671,9 @@ WIN_GL_SwapWindow(_THIS, SDL_Window * window)
void
WIN_GL_DeleteContext(_THIS, SDL_GLContext context)
{
if (!_this->gl_data) {
return;
}
_this->gl_data->wglDeleteContext((HGLRC) context);
}

Expand Down
8 changes: 8 additions & 0 deletions src/video/x11/SDL_x11opengl.c
Expand Up @@ -610,6 +610,11 @@ X11_GL_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
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");
Expand Down Expand Up @@ -714,6 +719,9 @@ X11_GL_DeleteContext(_THIS, SDL_GLContext context)
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);
}
Expand Down
48 changes: 27 additions & 21 deletions src/video/x11/SDL_x11opengles.c
Expand Up @@ -358,6 +358,11 @@ X11_GLES_MakeCurrent(_THIS, SDL_Window * window, SDL_GLContext context)
// 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,
Expand Down Expand Up @@ -412,32 +417,33 @@ void
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->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) {
return;
}

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->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_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 */
Expand Down

0 comments on commit 0df86b8

Please sign in to comment.