diff --git a/gst-libs/gst/gl/win32/gstglcontext_wgl.c b/gst-libs/gst/gl/win32/gstglcontext_wgl.c index 6fd7dd17c8..0961e404ba 100644 --- a/gst-libs/gst/gl/win32/gstglcontext_wgl.c +++ b/gst-libs/gst/gl/win32/gstglcontext_wgl.c @@ -223,23 +223,35 @@ gst_gl_context_wgl_create_context (GstGLContext * context, } if (!context_wgl->wgl_context) { - context_wgl->wgl_context = wglCreateContext (device); - if (!context_wgl->wgl_context) { - g_set_error (error, GST_GL_CONTEXT_ERROR, - GST_GL_CONTEXT_ERROR_CREATE_CONTEXT, - "Failed to create WGL context 0x%x", (unsigned int) GetLastError ()); - goto failure; + if (context_wgl->priv->wglCreateContextAttribsARB && external_gl_context) { + context_wgl->wgl_context = + context_wgl->priv->wglCreateContextAttribsARB (device, + external_gl_context, 0); } - if (external_gl_context) { - if (!wglShareLists (external_gl_context, context_wgl->wgl_context)) { + + if (!context_wgl->wgl_context) { + + context_wgl->wgl_context = wglCreateContext (device); + + if (!context_wgl->wgl_context) { g_set_error (error, GST_GL_CONTEXT_ERROR, GST_GL_CONTEXT_ERROR_CREATE_CONTEXT, - "failed to share contexts through wglShareLists 0x%x", + "Failed to create WGL context 0x%x", (unsigned int) GetLastError ()); goto failure; } + + if (external_gl_context) { + if (!wglShareLists (external_gl_context, context_wgl->wgl_context)) { + g_set_error (error, GST_GL_CONTEXT_ERROR, + GST_GL_CONTEXT_ERROR_CREATE_CONTEXT, + "failed to share contexts through wglShareLists 0x%x", + (unsigned int) GetLastError ()); + goto failure; + } + } } context_wgl->priv->context_api = GST_GL_API_OPENGL;