From 956961d1a3375c0a97e9e75f5a31c8407bf67a43 Mon Sep 17 00:00:00 2001 From: Markus Stange Date: Wed, 20 Aug 2014 17:23:57 +0200 Subject: [PATCH] Bug 1055585 - Support OP_SOURCE blend mode in CompositorOGL. r=mattwoodrow --- gfx/layers/opengl/CompositorOGL.cpp | 12 ++++++------ gfx/layers/opengl/CompositorOGL.h | 1 + 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/gfx/layers/opengl/CompositorOGL.cpp b/gfx/layers/opengl/CompositorOGL.cpp index 91650779411d..47f8c187afc8 100644 --- a/gfx/layers/opengl/CompositorOGL.cpp +++ b/gfx/layers/opengl/CompositorOGL.cpp @@ -976,8 +976,8 @@ static bool SetBlendMode(GLContext* aGL, gfx::CompositionOp aBlendMode, bool aIs GLenum srcBlend; GLenum dstBlend; - GLenum srcColorBlend = LOCAL_GL_ONE; - GLenum dstColorBlend = LOCAL_GL_ONE; + GLenum srcAlphaBlend = LOCAL_GL_ONE; + GLenum dstAlphaBlend = LOCAL_GL_ONE; switch (aBlendMode) { case gfx::CompositionOp::OP_OVER: @@ -996,10 +996,10 @@ static bool SetBlendMode(GLContext* aGL, gfx::CompositionOp aBlendMode, bool aIs dstBlend = LOCAL_GL_ONE_MINUS_SRC_ALPHA; break; case gfx::CompositionOp::OP_SOURCE: - srcBlend = LOCAL_GL_ONE; + srcBlend = aIsPremultiplied ? LOCAL_GL_ONE : LOCAL_GL_SRC_ALPHA; dstBlend = LOCAL_GL_ZERO; - srcColorBlend = LOCAL_GL_ONE; - dstColorBlend = LOCAL_GL_ZERO; + srcAlphaBlend = LOCAL_GL_ONE; + dstAlphaBlend = LOCAL_GL_ZERO; break; default: MOZ_ASSERT_UNREACHABLE("Unsupported blend mode!"); @@ -1007,7 +1007,7 @@ static bool SetBlendMode(GLContext* aGL, gfx::CompositionOp aBlendMode, bool aIs } aGL->fBlendFuncSeparate(srcBlend, dstBlend, - srcColorBlend, dstColorBlend); + srcAlphaBlend, dstAlphaBlend); return true; } diff --git a/gfx/layers/opengl/CompositorOGL.h b/gfx/layers/opengl/CompositorOGL.h index d858fa004533..e9246dda9d26 100644 --- a/gfx/layers/opengl/CompositorOGL.h +++ b/gfx/layers/opengl/CompositorOGL.h @@ -186,6 +186,7 @@ public: SupportsPartialTextureUpdate()); result.mSupportedBlendModes += gfx::CompositionOp::OP_SCREEN; result.mSupportedBlendModes += gfx::CompositionOp::OP_MULTIPLY; + result.mSupportedBlendModes += gfx::CompositionOp::OP_SOURCE; return result; }