Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3441)

Unified Diff: cc/output/shader.cc

Issue 2659023003: [cc] Add SkBlendMode::kDstIn support to cc::Layer (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/output/shader.cc
diff --git a/cc/output/shader.cc b/cc/output/shader.cc
index 3bd260f4a3deee18948fe883f19a62e9ef5b164d..055bedaaba359a943e8285c9d3bb8a21f7b85ddd 100644
--- a/cc/output/shader.cc
+++ b/cc/output/shader.cc
@@ -724,17 +724,25 @@ std::string FragmentShader::GetHelperFunctions() const {
std::string FragmentShader::GetBlendFunction() const {
return "vec4 Blend(vec4 src, vec4 dst) {"
- " vec4 result;"
- " result.a = src.a + (1.0 - src.a) * dst.a;" +
- GetBlendFunctionBodyForRGB() +
+ " vec4 result;" +
+ GetBlendFunctionBodyForAlpha() + GetBlendFunctionBodyForRGB() +
" return result;"
"}";
}
+std::string FragmentShader::GetBlendFunctionBodyForAlpha() const {
+ if (blend_mode_ == BLEND_MODE_DESTINATION_IN)
+ return "result.a = src.a * dst.a;";
+ else
+ return "result.a = src.a + (1.0 - src.a) * dst.a;";
+}
+
std::string FragmentShader::GetBlendFunctionBodyForRGB() const {
switch (blend_mode_) {
case BLEND_MODE_NORMAL:
return "result.rgb = src.rgb + dst.rgb * (1.0 - src.a);";
+ case BLEND_MODE_DESTINATION_IN:
+ return "result.rgb = dst.rgb * src.a;";
case BLEND_MODE_SCREEN:
return "result.rgb = src.rgb + (1.0 - src.rgb) * dst.rgb;";
case BLEND_MODE_LIGHTEN:

Powered by Google App Engine
This is Rietveld 408576698