Skip to content

Commit

Permalink
x11: Correctly restore previous GL context after sacrificial context …
Browse files Browse the repository at this point in the history
…is done.
  • Loading branch information
icculus committed Sep 1, 2017
1 parent a3dda10 commit 7404399
Showing 1 changed file with 12 additions and 6 deletions.
18 changes: 12 additions & 6 deletions src/video/x11/SDL_x11opengl.c
Expand Up @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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);
}
}

Expand Down

0 comments on commit 7404399

Please sign in to comment.