From a164d868046ba6f3e1659b3fab431c5e8de19926 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Fri, 5 Oct 2018 01:19:29 +1000 Subject: [PATCH] Revert "Revert "gl: use correct blend functions for unpremultiplied alpha"" This reverts commit 452d90a88c6e68a3daa38e02213782836788236a. This was actually correct. sorry for the noise! --- ext/gl/gstglimagesink.c | 9 ++++++++- ext/gl/gstgloverlay.c | 6 +++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/ext/gl/gstglimagesink.c b/ext/gl/gstglimagesink.c index 30062d0..aa0ae40 100644 --- a/ext/gl/gstglimagesink.c +++ b/ext/gl/gstglimagesink.c @@ -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); } diff --git a/ext/gl/gstgloverlay.c b/ext/gl/gstgloverlay.c index 864ea64..59096cb 100644 --- a/ext/gl/gstgloverlay.c +++ b/ext/gl/gstgloverlay.c @@ -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); -- 2.7.4