Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c63c5b21 authored by Leon Scroggins III's avatar Leon Scroggins III
Browse files

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
parent e360c271
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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();