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

Commit c7fd8db8 authored by Jim Van Verth's avatar Jim Van Verth Committed by android-build-merger
Browse files

Merge "Add uncached and perspective shadows to Skia renderer" into oc-dev

am: 1be9766a

Change-Id: I8034dff9695425939a00b3f38d06615ffcc0f2b4
parents 76c71a01 1be9766a
Loading
Loading
Loading
Loading
+24 −1
Original line number Diff line number Diff line
@@ -190,10 +190,33 @@ void EndReorderBarrierDrawable::drawShadow(SkCanvas* canvas, RenderNodeDrawable*
    }
    const Vector3 lightPos = SkiaPipeline::getLightCenter();
    SkPoint3 skiaLightPos = SkPoint3::Make(lightPos.x, lightPos.y, lightPos.z);
    if (shadowMatrix.hasPerspective() || revealClipPath || clippedToBounds) {
        std::function<SkScalar(SkScalar, SkScalar)> casterHeightFunc;
        if (shadowMatrix.hasPerspective()) {
            // get the matrix with the full 3D transform
            mat4 zMatrix;
            caster->getRenderNode()->applyViewPropertyTransforms(zMatrix, true);
            SkScalar A = zMatrix[2];
            SkScalar B = zMatrix[6];
            SkScalar C = zMatrix[mat4::kTranslateZ];
            casterHeightFunc = [A, B, C](SkScalar x, SkScalar y) {
                return A*x + B*y + C;  // casterZValue already baked into C
            };
        } else {
            casterHeightFunc = [casterZValue] (SkScalar, SkScalar) {
                return casterZValue;
            };
        }

        SkShadowUtils::DrawUncachedShadow(canvas, *casterPath, casterHeightFunc, skiaLightPos,
            SkiaPipeline::getLightRadius(), ambientAlpha, spotAlpha, SK_ColorBLACK,
            casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0);
    } else {
        SkShadowUtils::DrawShadow(canvas, *casterPath, casterZValue, skiaLightPos,
            SkiaPipeline::getLightRadius(), ambientAlpha, spotAlpha, SK_ColorBLACK,
            casterAlpha < 1.0f ? SkShadowFlags::kTransparentOccluder_ShadowFlag : 0);
    }
}

}; // namespace skiapipeline
}; // namespace uirenderer