x11: Correctly restore previous GL context after sacrificial context is done.

Ryan C. Gordon 2017-09-01 14:08:09 -04:00
parent a3dda100f4
commit 74043994b8
1 changed files with 12 additions and 6 deletions

View File

@ -333,7 +333,8 @@ X11_GL_InitExtensions(_THIS)
const int screen = DefaultScreen(display); const int screen = DefaultScreen(display);
XVisualInfo *vinfo = NULL; XVisualInfo *vinfo = NULL;
Window w = 0; Window w = 0;
GLXContext current_context = 0; GLXContext prev_ctx = 0;
GLXDrawable prev_drawable = 0;
GLXContext context = 0; GLXContext context = 0;
const char *(*glXQueryExtensionsStringFunc) (Display *, int); const char *(*glXQueryExtensionsStringFunc) (Display *, int);
const char *extensions; const char *extensions;
@ -342,11 +343,16 @@ X11_GL_InitExtensions(_THIS)
if (vinfo) { if (vinfo) {
GLXContext (*glXGetCurrentContextFunc) (void) = GLXContext (*glXGetCurrentContextFunc) (void) =
(GLXContext(*)(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; XSetWindowAttributes xattr;
current_context = glXGetCurrentContextFunc(); prev_ctx = glXGetCurrentContextFunc();
prev_drawable = glXGetCurrentDrawableFunc();
xattr.background_pixel = 0; xattr.background_pixel = 0;
xattr.border_pixel = 0; xattr.border_pixel = 0;
@ -452,8 +458,8 @@ X11_GL_InitExtensions(_THIS)
if (context) { if (context) {
_this->gl_data->glXMakeCurrent(display, None, NULL); _this->gl_data->glXMakeCurrent(display, None, NULL);
_this->gl_data->glXDestroyContext(display, context); _this->gl_data->glXDestroyContext(display, context);
if (current_context) { if (prev_ctx && prev_drawable) {
_this->gl_data->glXMakeCurrent(display, w, current_context); _this->gl_data->glXMakeCurrent(display, prev_drawable, prev_ctx);
} }
} }