Chromium Code Reviews| Index: src/effects/SkGaussianEdgeShader.cpp |
| diff --git a/src/effects/SkGaussianEdgeShader.cpp b/src/effects/SkGaussianEdgeShader.cpp |
| index d73bfadbd77bead16a7c33f836186fd313a2bde1..884f7d402131af426dee4223ef5fc740b5bca3e6 100644 |
| --- a/src/effects/SkGaussianEdgeShader.cpp |
| +++ b/src/effects/SkGaussianEdgeShader.cpp |
| @@ -67,17 +67,23 @@ 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 black in \n"); |
| + fragBuilder->codeAppendf("%s = vec4(0, 0, 0, 1);", 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);", |
|
egdaniel
2016/09/08 14:31:09
100 chars
robertphillips
2016/09/08 14:34:50
Done.
|
| + 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 +139,6 @@ sk_sp<SkFlattenable> SkGaussianEdgeShaderImpl::CreateProc(SkReadBuffer& buf) { |
| } |
| void SkGaussianEdgeShaderImpl::flatten(SkWriteBuffer& buf) const { |
| - this->INHERITED::flatten(buf); |
| } |
| /////////////////////////////////////////////////////////////////////////////// |