Revert "Revert "gl: use correct blend functions for unpremultiplied alpha""
authorMatthew Waters <matthew@centricular.com>
Thu, 4 Oct 2018 15:19:29 +0000 (01:19 +1000)
committerMatthew Waters <matthew@centricular.com>
Thu, 4 Oct 2018 15:21:01 +0000 (01:21 +1000)
This reverts commit 452d90a88c6e68a3daa38e02213782836788236a.

This was actually correct. sorry for the noise!

ext/gl/gstglimagesink.c
ext/gl/gstgloverlay.c

index 30062d0..aa0ae40 100644 (file)
@@ -2250,7 +2250,14 @@ gst_glimage_sink_on_draw (GstGLImageSink * gl_sink)
 
     if (gl_sink->ignore_alpha) {
       gl->BlendColor (0.0, 0.0, 0.0, alpha);
-      gl->BlendFunc (GL_SRC_ALPHA, GL_CONSTANT_COLOR);
+      if (gl->BlendFuncSeparate) {
+        gl->BlendFuncSeparate (GL_SRC_ALPHA, GL_CONSTANT_COLOR, GL_ONE,
+            GL_ONE_MINUS_SRC_ALPHA);
+      } else {
+        /* we don't have separate blend modes, perform something close to
+         * correct instead */
+        gl->BlendFunc (GL_SRC_ALPHA, GL_CONSTANT_COLOR);
+      }
       gl->BlendEquation (GL_FUNC_ADD);
       gl->Enable (GL_BLEND);
     }
index 864ea64..59096cb 100644 (file)
@@ -530,7 +530,11 @@ gst_gl_overlay_callback (GstGLFilter * filter, GstGLMemory * in_tex,
   gst_gl_shader_set_uniform_1f (overlay->shader, "alpha", overlay->alpha);
 
   gl->Enable (GL_BLEND);
-  gl->BlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+  if (gl->BlendFuncSeparate)
+    gl->BlendFuncSeparate (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_ONE,
+        GL_ONE_MINUS_SRC_ALPHA);
+  else
+    gl->BlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
   gl->BlendEquation (GL_FUNC_ADD);
 
   gl->DrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_SHORT, 0);