Index: src/gpu/GrOvalRenderer.cpp |
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp |
index 72a01813b4028e0edc010d51b93e4d9885787c36..edce12315ff636f50db9fecf26b5cedd80ab845d 100644 |
--- a/src/gpu/GrOvalRenderer.cpp |
+++ b/src/gpu/GrOvalRenderer.cpp |
@@ -100,6 +100,11 @@ public: |
GrGLVertexBuilder* vsBuilder = args.fPB->getVertexShaderBuilder();; |
vsBuilder->codeAppendf("%s = %s;", v.vsOut(), circleEffect.inCircleEdge().c_str()); |
+ // setup position varying |
+ vsBuilder->codeAppendf("vec3 pos3 = %s * vec3(%s, 1);", args.fGP.uViewM(), |
+ args.fGP.inPosition()); |
+ vsBuilder->transformPositionToDeviceSpace("pos3"); |
+ |
GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
fsBuilder->codeAppendf("float d = length(%s.xy);", v.fsIn()); |
fsBuilder->codeAppendf("float edgeAlpha = clamp(%s.z - d, 0.0, 1.0);", v.fsIn()); |
@@ -219,6 +224,11 @@ public: |
vsBuilder->codeAppendf("%s = %s;", ellipseRadii.vsOut(), |
ellipseEffect.inEllipseRadii().c_str()); |
+ // setup position varying |
+ vsBuilder->codeAppendf("vec3 pos3 = %s * vec3(%s, 1);", args.fGP.uViewM(), |
+ args.fGP.inPosition()); |
+ vsBuilder->transformPositionToDeviceSpace("pos3"); |
+ |
// for outer curve |
GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
fsBuilder->codeAppendf("vec2 scaledOffset = %s*%s.xy;", ellipseOffsets.fsIn(), |
@@ -365,6 +375,11 @@ public: |
vsBuilder->codeAppendf("%s = %s;", offsets1.vsOut(), |
ellipseEffect.inEllipseOffsets1().c_str()); |
+ // setup position varying |
+ vsBuilder->codeAppendf("vec3 pos3 = %s * vec3(%s, 1);", args.fGP.uViewM(), |
+ args.fGP.inPosition()); |
+ vsBuilder->transformPositionToDeviceSpace("pos3"); |
+ |
GrGLGPFragmentBuilder* fsBuilder = args.fPB->getFragmentShaderBuilder(); |
SkAssertResult(fsBuilder->enableFeature( |
GrGLFragmentShaderBuilder::kStandardDerivatives_GLSLFeature)); |