From 74043994b832ae03094cb7f7b66b36129238e74a Mon Sep 17 00:00:00 2001 From: "Ryan C. Gordon" Date: Fri, 1 Sep 2017 14:08:09 -0400 Subject: [PATCH] x11: Correctly restore previous GL context after sacrificial context is done. --- src/video/x11/SDL_x11opengl.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/video/x11/SDL_x11opengl.c b/src/video/x11/SDL_x11opengl.c index 828a18d9f3e50..ab1bf58ca1df5 100644 --- a/src/video/x11/SDL_x11opengl.c +++ b/src/video/x11/SDL_x11opengl.c @@ -333,7 +333,8 @@ X11_GL_InitExtensions(_THIS) const int screen = DefaultScreen(display); XVisualInfo *vinfo = NULL; Window w = 0; - GLXContext current_context = 0; + GLXContext prev_ctx = 0; + GLXDrawable prev_drawable = 0; GLXContext context = 0; const char *(*glXQueryExtensionsStringFunc) (Display *, int); const char *extensions; @@ -342,11 +343,16 @@ X11_GL_InitExtensions(_THIS) if (vinfo) { GLXContext (*glXGetCurrentContextFunc) (void) = (GLXContext(*)(void)) - X11_GL_GetProcAddress(_this, "glXGetCurrentContextFunc"); + X11_GL_GetProcAddress(_this, "glXGetCurrentContext"); - if (glXGetCurrentContextFunc) { + GLXDrawable (*glXGetCurrentDrawableFunc) (void) = + (GLXDrawable(*)(void)) + X11_GL_GetProcAddress(_this, "glXGetCurrentDrawable"); + + if (glXGetCurrentContextFunc && glXGetCurrentDrawableFunc) { XSetWindowAttributes xattr; - current_context = glXGetCurrentContextFunc(); + prev_ctx = glXGetCurrentContextFunc(); + prev_drawable = glXGetCurrentDrawableFunc(); xattr.background_pixel = 0; xattr.border_pixel = 0; @@ -452,8 +458,8 @@ X11_GL_InitExtensions(_THIS) if (context) { _this->gl_data->glXMakeCurrent(display, None, NULL); _this->gl_data->glXDestroyContext(display, context); - if (current_context) { - _this->gl_data->glXMakeCurrent(display, w, current_context); + if (prev_ctx && prev_drawable) { + _this->gl_data->glXMakeCurrent(display, prev_drawable, prev_ctx); } }