From e52def47371f3934ee57a98717e3d13237accb4b Mon Sep 17 00:00:00 2001 From: Gwenole Beauchesne Date: Tue, 24 Jul 2012 10:58:32 +0200 Subject: [PATCH] utils: fix gl_create_context() with parent context set. If GLX window was created from a foreign Display, then that same Display shall be used for subsequent glXMakeCurrent(). This means that gl_create_context() will now use the same Display that the parent, if available. This fixes cluttersink with the Intel GenX VA driver. --- gst-libs/gst/vaapi/gstvaapiutils_glx.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/gst-libs/gst/vaapi/gstvaapiutils_glx.c b/gst-libs/gst/vaapi/gstvaapiutils_glx.c index bf7c358..3821181 100644 --- a/gst-libs/gst/vaapi/gstvaapiutils_glx.c +++ b/gst-libs/gst/vaapi/gstvaapiutils_glx.c @@ -309,8 +309,15 @@ gl_create_context(Display *dpy, int screen, GLContextState *parent) if (!cs) goto error; - cs->display = dpy; - cs->window = parent ? parent->window : None; + if (parent) { + cs->display = parent->display; + cs->window = parent->window; + screen = DefaultScreen(parent->display); + } + else { + cs->display = dpy; + cs->window = None; + } cs->visual = NULL; cs->context = NULL; cs->swapped_buffers = FALSE; @@ -327,14 +334,14 @@ gl_create_context(Display *dpy, int screen, GLContextState *parent) if (fbconfig_id == GLX_DONT_CARE) goto choose_fbconfig; - fbconfigs = glXGetFBConfigs(dpy, screen, &n_fbconfigs); + fbconfigs = glXGetFBConfigs(parent->display, screen, &n_fbconfigs); if (!fbconfigs) goto error; /* Find out a GLXFBConfig compatible with the parent context */ for (n = 0; n < n_fbconfigs; n++) { status = glXGetFBConfigAttrib( - dpy, + parent->display, fbconfigs[n], GLX_FBCONFIG_ID, &val ); @@ -347,7 +354,7 @@ gl_create_context(Display *dpy, int screen, GLContextState *parent) else { choose_fbconfig: fbconfigs = glXChooseFBConfig( - dpy, + cs->display, screen, fbconfig_attrs, &n_fbconfigs ); @@ -358,9 +365,9 @@ gl_create_context(Display *dpy, int screen, GLContextState *parent) n = 0; } - cs->visual = glXGetVisualFromFBConfig(dpy, fbconfigs[n]); + cs->visual = glXGetVisualFromFBConfig(cs->display, fbconfigs[n]); cs->context = glXCreateNewContext( - dpy, + cs->display, fbconfigs[n], GLX_RGBA_TYPE, parent ? parent->context : NULL, -- 2.7.4