SkiaRE: respect disableBlending
Fixes: 182617606
Test: atest librenderengine_test
RenderEngineTest#testClear
RenderEngineTest#testDisableBlendingBuffer
When drawing an image or a solid color, use SkBlendMode::kSrc to
avoid blending with other layers. Assert that disableBlending is not
combined with a shadow, since our existing API does not support that.
Continue to ignore disableBlending with blur, which we do not expect
to see as input.
Add RenderEngineTest#testClear and #testDisableBlendingBuffer to verify
the fix.
Change-Id: Ie12cbf497ecb6b71a9b4b625710161fce2b06ee4
diff --git a/libs/renderengine/skia/SkiaGLRenderEngine.cpp b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
index f76bfa2..908aae3 100644
--- a/libs/renderengine/skia/SkiaGLRenderEngine.cpp
+++ b/libs/renderengine/skia/SkiaGLRenderEngine.cpp
@@ -797,6 +797,8 @@
const auto rect = layer->geometry.roundedCornersRadius > 0
? getSkRect(layer->geometry.roundedCornersCrop)
: bounds;
+ // This would require a new parameter/flag to SkShadowUtils::DrawShadow
+ LOG_ALWAYS_FATAL_IF(layer->disableBlending, "Cannot disableBlending with a shadow");
drawShadow(canvas, rect, layer->geometry.roundedCornersRadius, layer->shadow);
continue;
}
@@ -806,7 +808,7 @@
needsToneMapping(layer->sourceDataspace, display.outputDataspace));
// quick abort from drawing the remaining portion of the layer
- if (layer->alpha == 0 && !requiresLinearEffect &&
+ if (layer->alpha == 0 && !requiresLinearEffect && !layer->disableBlending &&
(!displayColorTransform || displayColorTransform->isAlphaUnchanged())) {
continue;
}
@@ -912,6 +914,10 @@
requiresLinearEffect));
}
+ if (layer->disableBlending) {
+ paint.setBlendMode(SkBlendMode::kSrc);
+ }
+
paint.setColorFilter(displayColorTransform);
if (layer->geometry.roundedCornersRadius > 0) {