aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkGaussianEdgeShader.cpp
diff options
context:
space:
mode:
authorGravatar Jim Van Verth <jvanverth@google.com>2017-01-24 16:27:57 -0500
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-01-24 23:33:16 +0000
commitfdb1bdf1aa4e7f14befcb3acc3f586e7734190ea (patch)
tree6addb828abf8dedba1e0e02e1dc63b4918b15f58 /src/effects/SkGaussianEdgeShader.cpp
parent7f9c29a887106ab3babe0ec423a3bcae87ae4788 (diff)
Add geometric implementation for ambient shadows
BUG=skia:6119 Change-Id: I3140522f223c35fc059a33b593064897485dff7c Reviewed-on: https://skia-review.googlesource.com/7273 Reviewed-by: Brian Salomon <bsalomon@google.com> Commit-Queue: Jim Van Verth <jvanverth@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;");