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);
}
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);