diff options
Diffstat (limited to 'src/gpu/GrAAConvexPathRenderer.cpp')
-rw-r--r-- | src/gpu/GrAAConvexPathRenderer.cpp | 19 |
1 files changed, 10 insertions, 9 deletions
diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp index 487878f898..a525968283 100644 --- a/src/gpu/GrAAConvexPathRenderer.cpp +++ b/src/gpu/GrAAConvexPathRenderer.cpp @@ -452,15 +452,13 @@ bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath, if (path->isEmpty()) { return true; } - GrDrawTarget::AutoStateRestore asr(target, - GrDrawTarget::kPreserve_ASRInit); GrDrawState* drawState = target->drawState(); - GrMatrix vm = drawState->getViewMatrix(); - if (!drawState->preConcatSamplerMatricesWithInverse(vm)) { + GrDrawState::AutoDeviceCoordDraw adcd(drawState); + if (!adcd.succeeded()) { return false; } - drawState->viewMatrix()->reset(); + const GrMatrix* vm = &adcd.getOriginalMatrix(); GrVertexLayout layout = 0; layout |= GrDrawTarget::kEdge_VertexLayoutBit; @@ -469,10 +467,10 @@ bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath, // perspective. Otherwise, we apply the view matrix when copying to the // segment representation. SkPath tmpPath; - if (vm.hasPerspective()) { - origPath.transform(vm, &tmpPath); + if (vm->hasPerspective()) { + origPath.transform(*vm, &tmpPath); path = &tmpPath; - vm.reset(); + vm = &GrMatrix::I(); } QuadVertex *verts; @@ -486,7 +484,7 @@ bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath, SkSTArray<kPreallocSegmentCnt, Segment, true> segments; SkPoint fanPt; - if (!get_segments(*path, vm, &segments, &fanPt, &vCount, &iCount)) { + if (!get_segments(*path, *vm, &segments, &fanPt, &vCount, &iCount)) { return false; } @@ -499,12 +497,15 @@ bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath, create_vertices(segments, fanPt, verts, idxs); + GrDrawState::VertexEdgeType oldEdgeType = drawState->getVertexEdgeType(); drawState->setVertexEdgeType(GrDrawState::kQuad_EdgeType); target->drawIndexed(kTriangles_GrPrimitiveType, 0, // start vertex 0, // start index vCount, iCount); + drawState->setVertexEdgeType(oldEdgeType); + return true; } |