Index: src/gpu/GrAAConvexPathRenderer.cpp |
diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp |
index 3a344ce0b8130f9f4a90c3f8bdc4641bb345cbcb..bd4085f2c2f550dd8f7e04a5257df8b49ba9dba7 100644 |
--- a/src/gpu/GrAAConvexPathRenderer.cpp |
+++ b/src/gpu/GrAAConvexPathRenderer.cpp |
@@ -505,8 +505,10 @@ static void create_vertices(const SegmentArray& segments, |
class QuadEdgeEffect : public GrGeometryProcessor { |
public: |
- static GrGeometryProcessor* Create(GrColor color, const SkMatrix& localMatrix) { |
- return SkNEW_ARGS(QuadEdgeEffect, (color, localMatrix)); |
+ static GrGeometryProcessor* Create(GrColor color, |
+ const SkMatrix& viewMatrix, |
+ const SkMatrix& localMatrix) { |
+ return SkNEW_ARGS(QuadEdgeEffect, (color, viewMatrix, localMatrix)); |
} |
virtual ~QuadEdgeEffect() {} |
@@ -626,8 +628,8 @@ public: |
} |
private: |
- QuadEdgeEffect(GrColor color, const SkMatrix& localMatrix) |
- : INHERITED(color, false, localMatrix) { |
+ QuadEdgeEffect(GrColor color, const SkMatrix& viewMatrix, const SkMatrix& localMatrix) |
+ : INHERITED(color, viewMatrix, localMatrix) { |
this->initClassID<QuadEdgeEffect>(); |
fInPosition = &this->addVertexAttrib(GrAttribute("inPosition", kVec2f_GrVertexAttribType)); |
fInQuadEdge = &this->addVertexAttrib(GrAttribute("inQuadEdge", kVec4f_GrVertexAttribType)); |
@@ -664,6 +666,7 @@ GrGeometryProcessor* QuadEdgeEffect::TestCreate(SkRandom* random, |
// Doesn't work without derivative instructions. |
return caps.shaderDerivativeSupport() ? |
QuadEdgeEffect::Create(GrRandomColor(random), |
+ GrProcessorUnitTest::TestMatrix(random), |
GrProcessorUnitTest::TestMatrix(random)) : NULL; |
} |
@@ -671,6 +674,7 @@ GrGeometryProcessor* QuadEdgeEffect::TestCreate(SkRandom* random, |
bool GrAAConvexPathRenderer::canDrawPath(const GrDrawTarget* target, |
const GrDrawState*, |
+ const SkMatrix& viewMatrix, |
const SkPath& path, |
const SkStrokeRec& stroke, |
bool antiAlias) const { |
@@ -681,6 +685,7 @@ bool GrAAConvexPathRenderer::canDrawPath(const GrDrawTarget* target, |
bool GrAAConvexPathRenderer::onDrawPath(GrDrawTarget* target, |
GrDrawState* drawState, |
GrColor color, |
+ const SkMatrix& vm, |
const SkPath& origPath, |
const SkStrokeRec&, |
bool antiAlias) { |
@@ -690,14 +695,12 @@ bool GrAAConvexPathRenderer::onDrawPath(GrDrawTarget* target, |
return true; |
} |
- SkMatrix viewMatrix = drawState->getViewMatrix(); |
+ SkMatrix viewMatrix = vm; |
SkMatrix invert; |
if (!viewMatrix.invert(&invert)) { |
return false; |
} |
- GrDrawState::AutoViewMatrixRestore avmr(drawState); |
- |
// We use the fact that SkPath::transform path does subdivision based on |
// perspective. Otherwise, we apply the view matrix when copying to the |
// segment representation. |
@@ -730,7 +733,9 @@ bool GrAAConvexPathRenderer::onDrawPath(GrDrawTarget* target, |
// Our computed verts should all be within one pixel of the segment control points. |
devBounds.outset(SK_Scalar1, SK_Scalar1); |
- SkAutoTUnref<GrGeometryProcessor> quadProcessor(QuadEdgeEffect::Create(color, invert)); |
+ SkAutoTUnref<GrGeometryProcessor> quadProcessor(QuadEdgeEffect::Create(color, |
+ SkMatrix::I(), |
+ invert)); |
GrDrawTarget::AutoReleaseGeometry arg(target, vCount, quadProcessor->getVertexStride(), iCount); |
SkASSERT(quadProcessor->getVertexStride() == sizeof(QuadVertex)); |