Chromium Code Reviews| Index: src/gpu/GrOvalRenderer.cpp |
| diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp |
| index aec9b76ba85f986236a0382fcb451f84beb5e2c2..8bced483955a8fbbaf3a5f8bc68b2378abc60456 100644 |
| --- a/src/gpu/GrOvalRenderer.cpp |
| +++ b/src/gpu/GrOvalRenderer.cpp |
| @@ -83,10 +83,13 @@ public: |
| fStroke = stroke; |
| } |
| + bool implementsDistanceVector() const override { return true; }; |
| + |
| const Attribute* inPosition() const { return fInPosition; } |
| const Attribute* inColor() const { return fInColor; } |
| const Attribute* inCircleEdge() const { return fInCircleEdge; } |
| const SkMatrix& localMatrix() const { return fLocalMatrix; } |
| + |
| virtual ~CircleGeometryProcessor() {} |
| const char* name() const override { return "CircleEdge"; } |
| @@ -126,14 +129,24 @@ public: |
| args.fTransformsOut); |
| fragBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn()); |
| - fragBuilder->codeAppendf("float edgeAlpha = clamp(%s.z * (1.0 - d), 0.0, 1.0);", |
| - v.fsIn()); |
| + fragBuilder->codeAppendf("float distanceToEdge = %s.z * (1.0 - d);", v.fsIn()); |
| + fragBuilder->codeAppendf("float edgeAlpha = clamp(distanceToEdge, 0.0, 1.0);"); |
| if (cgp.fStroke) { |
| fragBuilder->codeAppendf("float innerAlpha = clamp(%s.z * (d - %s.w), 0.0, 1.0);", |
| v.fsIn(), v.fsIn()); |
| fragBuilder->codeAppend("edgeAlpha *= innerAlpha;"); |
| } |
| + if (args.fDistanceVectorName) { |
| + fragBuilder->codeAppend ("if (d == 0.0) {"); // if on the center of the circle |
| + fragBuilder->codeAppendf(" %s = vec2(distanceToEdge, 0.0);", // avoid normalizing |
| + args.fDistanceVectorName); |
|
egdaniel
2016/07/29 15:11:59
align this inside ( of function
dvonbeck
2016/07/29 17:20:24
Done.
|
| + fragBuilder->codeAppend ("} else {"); |
| + fragBuilder->codeAppendf(" %s = normalize(%s.xy) * distanceToEdge;", |
| + args.fDistanceVectorName, v.fsIn()); |
|
egdaniel
2016/07/29 15:11:59
align this to function
dvonbeck
2016/07/29 17:20:24
Done.
|
| + fragBuilder->codeAppend ("}"); |
| + } |
| + |
| fragBuilder->codeAppendf("%s = vec4(edgeAlpha);", args.fOutputCoverage); |
| } |