diff options
author | 2017-01-25 09:39:46 -0500 | |
---|---|---|
committer | 2017-01-25 15:29:07 +0000 | |
commit | bce7496d7dd9131cc7121389a55f6d512ee7661e (patch) | |
tree | 123c8568e919e09db600d21aae858ef09bfe6327 /src/effects/SkGaussianEdgeShader.cpp | |
parent | b92234a3210bce532f103d71002f4e04d336a182 (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.cpp | 7 |
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;"); |