diff options
author | robertphillips <robertphillips@google.com> | 2016-09-08 09:02:43 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2016-09-08 09:02:44 -0700 |
commit | 05a4cf59591024d838b204bb0f6fac42598ead28 (patch) | |
tree | 9744866d58622ba2e16ec391cc8859972fbd928f /src/effects | |
parent | 51761d12d00fb1ebe7c63efce91b0e84b4afac5c (diff) |
Add GM/slide to simulate Android-style reveal clip
Hopefully, this will let us play w/ geometric and shader-based solutions.
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2316593003
Committed: https://skia.googlesource.com/skia/+/ffac5c4aae18fc706e4077763c190a89c8507fb0
Review-Url: https://codereview.chromium.org/2316593003
Diffstat (limited to 'src/effects')
-rw-r--r-- | src/effects/SkGaussianEdgeShader.cpp | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/effects/SkGaussianEdgeShader.cpp b/src/effects/SkGaussianEdgeShader.cpp index d73bfadbd7..01b0606c01 100644 --- a/src/effects/SkGaussianEdgeShader.cpp +++ b/src/effects/SkGaussianEdgeShader.cpp @@ -67,17 +67,25 @@ public: GLSLGaussianEdgeFP() {} void emitCode(EmitArgs& args) override { - GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; - fragBuilder->codeAppendf("vec4 color = %s;", args.fInputColor); - fragBuilder->codeAppend("float radius = color.g*64.0;"); - fragBuilder->codeAppend("float pad = color.b*64.0;"); - - fragBuilder->codeAppendf("float factor = 1.0 - clamp((%s.z - pad)/radius, 0.0, 1.0);", - fragBuilder->distanceVectorName()); - fragBuilder->codeAppend("factor = exp(-factor * factor * 4.0) - 0.018;"); - fragBuilder->codeAppendf("%s = factor*vec4(0.0, 0.0, 0.0, color.r);", args.fOutputColor); + 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, color.r);", args.fOutputColor); + } else { + fragBuilder->codeAppendf("vec4 color = %s;", args.fInputColor); + fragBuilder->codeAppend("float radius = color.g*64.0;"); + fragBuilder->codeAppend("float pad = color.b*64.0;"); + + fragBuilder->codeAppendf("float factor = 1.0 - clamp((%s.z - pad)/radius," + "0.0, 1.0);", + fragBuilder->distanceVectorName()); + fragBuilder->codeAppend("factor = exp(-factor * factor * 4.0) - 0.018;"); + fragBuilder->codeAppendf("%s = factor*vec4(0.0, 0.0, 0.0, color.r);", + args.fOutputColor); + } } static void GenKey(const GrProcessor& proc, const GrGLSLCaps&, @@ -133,7 +141,6 @@ sk_sp<SkFlattenable> SkGaussianEdgeShaderImpl::CreateProc(SkReadBuffer& buf) { } void SkGaussianEdgeShaderImpl::flatten(SkWriteBuffer& buf) const { - this->INHERITED::flatten(buf); } /////////////////////////////////////////////////////////////////////////////// |