From: David Steele Date: Thu, 7 Oct 2021 16:40:53 +0000 (+0100) Subject: Updated gfx back end to handle photoshop blend modes X-Git-Tag: dali_2.0.48~2^2 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git;a=commitdiff_plain;h=67784a66e669e2e209ad7f47ba8e163713748cd8 Updated gfx back end to handle photoshop blend modes Change-Id: I16a5e6d6b9139ed5dec30acddc8ced23302d81db --- diff --git a/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp b/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp index 0886719..d2d8b16 100644 --- a/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp +++ b/automated-tests/src/dali-adaptor/dali-test-suite-utils/test-graphics-controller.cpp @@ -379,8 +379,81 @@ GLenum GetBlendOp(Graphics::BlendOp blendOp) case Graphics::BlendOp::MAX: op = GL_MAX; break; - - // @todo Add advanced blend equations + case Graphics::BlendOp::MULTIPLY: + { + op = GL_MULTIPLY; + break; + } + case Graphics::BlendOp::SCREEN: + { + op = GL_SCREEN; + break; + } + case Graphics::BlendOp::OVERLAY: + { + op = GL_OVERLAY; + break; + } + case Graphics::BlendOp::DARKEN: + { + op = GL_DARKEN; + break; + } + case Graphics::BlendOp::LIGHTEN: + { + op = GL_LIGHTEN; + break; + } + case Graphics::BlendOp::COLOR_DODGE: + { + op = GL_COLORDODGE; + break; + } + case Graphics::BlendOp::COLOR_BURN: + { + op = GL_COLORBURN; + break; + } + case Graphics::BlendOp::HARD_LIGHT: + { + op = GL_HARDLIGHT; + break; + } + case Graphics::BlendOp::SOFT_LIGHT: + { + op = GL_SOFTLIGHT; + break; + } + case Graphics::BlendOp::DIFFERENCE: + { + op = GL_DIFFERENCE; + break; + } + case Graphics::BlendOp::EXCLUSION: + { + op = GL_EXCLUSION; + break; + } + case Graphics::BlendOp::HUE: + { + op = GL_HSL_HUE; + break; + } + case Graphics::BlendOp::SATURATION: + { + op = GL_HSL_SATURATION; + break; + } + case Graphics::BlendOp::COLOR: + { + op = GL_HSL_COLOR; + break; + } + case Graphics::BlendOp::LUMINOSITY: + { + op = GL_HSL_LUMINOSITY; + break; + } } return op; } diff --git a/dali/internal/graphics/gles-impl/gles-context.cpp b/dali/internal/graphics/gles-impl/gles-context.cpp index 13c1bad..de5e058 100644 --- a/dali/internal/graphics/gles-impl/gles-context.cpp +++ b/dali/internal/graphics/gles-impl/gles-context.cpp @@ -517,6 +517,10 @@ void Context::ResolveBlendState() if(newBlendState->colorBlendOp == newBlendState->alphaBlendOp) { gl.BlendEquation(GLBlendOp(newBlendState->colorBlendOp)); + if(newBlendState->colorBlendOp >= Graphics::ADVANCED_BLEND_OPTIONS_START) + { + gl.BlendBarrier(); + } } else { diff --git a/dali/internal/graphics/gles-impl/gles-graphics-types.h b/dali/internal/graphics/gles-impl/gles-graphics-types.h index 06f95e3..18069eb 100644 --- a/dali/internal/graphics/gles-impl/gles-graphics-types.h +++ b/dali/internal/graphics/gles-impl/gles-graphics-types.h @@ -1820,6 +1820,81 @@ struct GLBlendOp glBlendOp = GL_MAX; break; } + case Graphics::BlendOp::MULTIPLY: + { + glBlendOp = GL_MULTIPLY; + break; + } + case Graphics::BlendOp::SCREEN: + { + glBlendOp = GL_SCREEN; + break; + } + case Graphics::BlendOp::OVERLAY: + { + glBlendOp = GL_OVERLAY; + break; + } + case Graphics::BlendOp::DARKEN: + { + glBlendOp = GL_DARKEN; + break; + } + case Graphics::BlendOp::LIGHTEN: + { + glBlendOp = GL_LIGHTEN; + break; + } + case Graphics::BlendOp::COLOR_DODGE: + { + glBlendOp = GL_COLORDODGE; + break; + } + case Graphics::BlendOp::COLOR_BURN: + { + glBlendOp = GL_COLORBURN; + break; + } + case Graphics::BlendOp::HARD_LIGHT: + { + glBlendOp = GL_HARDLIGHT; + break; + } + case Graphics::BlendOp::SOFT_LIGHT: + { + glBlendOp = GL_SOFTLIGHT; + break; + } + case Graphics::BlendOp::DIFFERENCE: + { + glBlendOp = GL_DIFFERENCE; + break; + } + case Graphics::BlendOp::EXCLUSION: + { + glBlendOp = GL_EXCLUSION; + break; + } + case Graphics::BlendOp::HUE: + { + glBlendOp = GL_HSL_HUE; + break; + } + case Graphics::BlendOp::SATURATION: + { + glBlendOp = GL_HSL_SATURATION; + break; + } + case Graphics::BlendOp::COLOR: + { + glBlendOp = GL_HSL_COLOR; + break; + } + case Graphics::BlendOp::LUMINOSITY: + { + glBlendOp = GL_HSL_LUMINOSITY; + break; + } } }