qt/gloverlay: reset OpenGL state after Qt drawing
authorMatthew Waters <matthew@centricular.com>
Fri, 12 Jun 2020 02:18:11 +0000 (12:18 +1000)
committerGStreamer Merge Bot <gitlab-merge-bot@gstreamer-foundation.org>
Fri, 12 Jun 2020 07:23:19 +0000 (07:23 +0000)
Reset to the original OpenGL state as required by the GStreamer OpenGL
API contract.  Fixes output with a glimagesink element downstream.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/-/merge_requests/623>

ext/qt/qtglrenderer.cc

index 9a8d75d..6e337cd 100644 (file)
@@ -555,6 +555,8 @@ void GstQuickRenderer::ensureFbo()
 void
 GstQuickRenderer::renderGstGL ()
 {
+    const GstGLFuncs *gl = gl_context->gl_vtable;
+
     GST_TRACE ("%p current QOpenGLContext %p", this,
         QOpenGLContext::currentContext());
     m_quickWindow->resetOpenGLState();
@@ -585,6 +587,11 @@ GstQuickRenderer::renderGstGL ()
     gl_mem = (GstGLMemory *) gst_gl_base_memory_alloc (gl_allocator, gl_params);
 
     m_fbo = nullptr;
+
+    m_quickWindow->resetOpenGLState ();
+    /* Qt doesn't seem to reset this, breaking glimagesink */
+    if (gl->DrawBuffer)
+      gl->DrawBuffer (GL_BACK);
 }
 
 GstGLMemory *GstQuickRenderer::generateOutput(GstClockTime input_ns)