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

Commit 1be9766a authored by Jim Van Verth's avatar Jim Van Verth Committed by Android (Google) Code Review
Browse files

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

parents 29c70437 5745a0a3
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