Index: src/gpu/GrOvalRenderer.cpp |
diff --git a/src/gpu/GrOvalRenderer.cpp b/src/gpu/GrOvalRenderer.cpp |
index 4575287d05c3de1fe074818a23ffe9c5e34896b2..a3a1099e639c92582afe26c9562ace7cbd7d2af1 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"); |
bsalomon
2014/11/07 14:44:03
This name is a bit confusing. I'd expect it to tak
|
+ |
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)); |