aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkGaussianEdgeShader.cpp
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2017-01-25 09:39:46 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-25 15:29:07 +0000
commitbce7496d7dd9131cc7121389a55f6d512ee7661e (patch)
tree123c8568e919e09db600d21aae858ef09bfe6327 /src/effects/SkGaussianEdgeShader.cpp
parentb92234a3210bce532f103d71002f4e04d336a182 (diff)
Add geometric implementation for ambient shadows
Original: https://skia-review.googlesource.com/7273 BUG=skia:6119 Change-Id: Ie7debd7727768f55dafad922a2b8b9fd3a638fda Reviewed-on: https://skia-review.googlesource.com/7500 Commit-Queue: Jim Van Verth <jvanverth@google.com> Reviewed-by: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/effects/SkGaussianEdgeShader.cpp')
-rw-r--r--src/effects/SkGaussianEdgeShader.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/effects/SkGaussianEdgeShader.cpp b/src/effects/SkGaussianEdgeShader.cpp
index e1c30c8fbf..7405fd14d9 100644
--- a/src/effects/SkGaussianEdgeShader.cpp
+++ b/src/effects/SkGaussianEdgeShader.cpp
@@ -79,9 +79,10 @@ public:
if (!args.fGpImplementsDistanceVector) {
fragBuilder->codeAppendf("// GP does not implement fsDistanceVector - "
- " returning grey in GLSLGaussianEdgeFP\n");
- fragBuilder->codeAppendf("vec4 color = %s;", args.fInputColor);
- fragBuilder->codeAppendf("%s = vec4(0.0, 0.0, 0.0, color.r);", args.fOutputColor);
+ " using alpha as input to GLSLGaussianEdgeFP\n");
+ fragBuilder->codeAppendf("float factor = 1.0 - %s.a;", args.fInputColor);
+ fragBuilder->codeAppend("factor = exp(-factor * factor * 4.0) - 0.018;");
+ fragBuilder->codeAppendf("%s = vec4(0.0, 0.0, 0.0, factor);", args.fOutputColor);
} else {
fragBuilder->codeAppendf("vec4 color = %s;", args.fInputColor);
fragBuilder->codeAppend("float radius = color.r*256.0*64.0 + color.g*64.0;");