GLFunctorDrawable: skip alpha filtering
When drawing a GLFunctorDrawable into an AlphaFilterCanvas, there is no gpu device, so topLayerBackendRenderTarget (and therefore GetFboDetails) fails. Applying the alpha would require an extra layer and a performance cost, so draw directly to the underlying gpu canvas. This effectively matches the VkFunctorDrawable fix in I27040347dc25c799b4e75f50526f426e9e33b663. Bug: 208629203 Test: Iab6f59411310fe4f5ea4ccc3bf386dcc6f2007b1 Change-Id: I9b8f0a357b9349fbb568b30dd18b0c150065f13c
This commit is contained in:
@@ -61,6 +61,17 @@ void GLFunctorDrawable::onDraw(SkCanvas* canvas) {
|
||||
return;
|
||||
}
|
||||
|
||||
// canvas may be an AlphaFilterCanvas, which is intended to draw with a
|
||||
// modified alpha. We do not have a way to do this without drawing into an
|
||||
// extra layer, which would have a performance cost. Draw directly into the
|
||||
// underlying gpu canvas. This matches prior behavior and the behavior in
|
||||
// Vulkan.
|
||||
{
|
||||
auto* gpuCanvas = SkAndroidFrameworkUtils::getBaseWrappedCanvas(canvas);
|
||||
LOG_ALWAYS_FATAL_IF(!gpuCanvas, "GLFunctorDrawable::onDraw is using an invalid canvas!");
|
||||
canvas = gpuCanvas;
|
||||
}
|
||||
|
||||
// flush will create a GrRenderTarget if not already present.
|
||||
canvas->flush();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user