aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/utils/SkShadowUtils.cpp
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2017-05-08 14:19:30 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-05-08 18:42:48 +0000
commite308a122ef996a64a21a6339e3b50b9edfdf654f (patch)
treecdc38ee996e86789f198f93d4a86c240f03d2317 /src/utils/SkShadowUtils.cpp
parent6f24180a99bc486cf4cee5da1a45225e7ff263d7 (diff)
Remove height functor for shadows and replace with plane equation params
Change-Id: I948eceb2c58dc50468993dba54c209f18e440e48 Reviewed-on: https://skia-review.googlesource.com/15873 Commit-Queue: Jim Van Verth <jvanverth@google.com> Reviewed-by: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/utils/SkShadowUtils.cpp')
-rw-r--r--src/utils/SkShadowUtils.cpp19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/utils/SkShadowUtils.cpp b/src/utils/SkShadowUtils.cpp
index 19b2c2d403..7295e48fd5 100644
--- a/src/utils/SkShadowUtils.cpp
+++ b/src/utils/SkShadowUtils.cpp
@@ -170,10 +170,8 @@ struct AmbientVerticesFactory {
}
sk_sp<SkVertices> makeVertices(const SkPath& path, const SkMatrix& ctm) const {
- SkScalar z = fOccluderHeight;
- return SkShadowTessellator::MakeAmbient(path, ctm,
- [z](SkScalar, SkScalar) { return z; },
- fTransparent);
+ SkPoint3 zParams = SkPoint3::Make(0, 0, fOccluderHeight);
+ return SkShadowTessellator::MakeAmbient(path, ctm, zParams, fTransparent);
}
};
@@ -221,9 +219,8 @@ struct SpotVerticesFactory {
sk_sp<SkVertices> makeVertices(const SkPath& path, const SkMatrix& ctm) const {
bool transparent = OccluderType::kTransparent == fOccluderType;
- SkScalar z = fOccluderHeight;
- return SkShadowTessellator::MakeSpot(path, ctm,
- [z](SkScalar, SkScalar) -> SkScalar { return z; },
+ SkPoint3 zParams = SkPoint3::Make(0, 0, fOccluderHeight);
+ return SkShadowTessellator::MakeSpot(path, ctm, zParams,
fDevLightPos, fLightRadius, transparent);
}
};
@@ -680,13 +677,13 @@ void SkShadowUtils::DrawShadow(SkCanvas* canvas, const SkPath& path, SkScalar oc
// Draw an offset spot shadow and outlining ambient shadow for the given path,
// without caching and using a function based on local position to compute the height.
void SkShadowUtils::DrawUncachedShadow(SkCanvas* canvas, const SkPath& path,
- std::function<SkScalar(SkScalar, SkScalar)> heightFunc,
+ const SkPoint3& zPlaneParams,
const SkPoint3& lightPos, SkScalar lightRadius,
SkScalar ambientAlpha, SkScalar spotAlpha, SkColor color,
uint32_t flags) {
// try fast paths
bool skipAnalytic = SkToBool(flags & SkShadowFlags::kGeometricOnly_ShadowFlag);
- if (!skipAnalytic && draw_analytic_shadows(canvas, path, heightFunc(0, 0), lightPos,
+ if (!skipAnalytic && draw_analytic_shadows(canvas, path, zPlaneParams.fZ, lightPos,
lightRadius, ambientAlpha, spotAlpha, color,
flags)) {
return;
@@ -701,7 +698,7 @@ void SkShadowUtils::DrawUncachedShadow(SkCanvas* canvas, const SkPath& path,
if (ambientAlpha > 0) {
ambientAlpha = SkTMin(ambientAlpha, 1.f);
sk_sp<SkVertices> vertices = SkShadowTessellator::MakeAmbient(path, viewMatrix,
- heightFunc, transparent);
+ zPlaneParams, transparent);
SkColor renderColor = compute_render_color(color, ambientAlpha);
SkPaint paint;
// Run the vertex color through a GaussianColorFilter and then modulate the grayscale
@@ -714,7 +711,7 @@ void SkShadowUtils::DrawUncachedShadow(SkCanvas* canvas, const SkPath& path,
if (spotAlpha > 0) {
spotAlpha = SkTMin(spotAlpha, 1.f);
- sk_sp<SkVertices> vertices = SkShadowTessellator::MakeSpot(path, viewMatrix, heightFunc,
+ sk_sp<SkVertices> vertices = SkShadowTessellator::MakeSpot(path, viewMatrix, zPlaneParams,
lightPos, lightRadius,
transparent);
SkColor renderColor = compute_render_color(color, spotAlpha);