x11: Correctly restore previous GL context after sacrificial context is done.
parent
a3dda100f4
commit
74043994b8
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue