Skip to content
Permalink
Browse files

x11: Correctly restore previous GL context after sacrificial context …

…is done.
  • Loading branch information
icculus committed Sep 1, 2017
1 parent a3dda10 commit 74043994b832ae03094cb7f7b66b36129238e74a
Showing with 12 additions and 6 deletions.
  1. +12 −6 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);
}
}

0 comments on commit 7404399

Please sign in to comment.