diff options
author | 2012-03-02 21:26:50 +0000 | |
---|---|---|
committer | 2012-03-02 21:26:50 +0000 | |
commit | c2099d2707abcc94e139627399aed4b8894b69bb (patch) | |
tree | f66f3a950979a6df3d1abf90088d2cf94942025c /src/gpu/GrAAConvexPathRenderer.cpp | |
parent | 6a81b8a282dd388044c433a4c2d8e549e7402d01 (diff) |
simplify GrPathRenderer interface
Review URL: http://codereview.appspot.com/5706053/
git-svn-id: http://skia.googlecode.com/svn/trunk@3312 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/GrAAConvexPathRenderer.cpp')
-rw-r--r-- | src/gpu/GrAAConvexPathRenderer.cpp | 73 |
1 files changed, 43 insertions, 30 deletions
diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp index d5962849f0..60749d81c0 100644 --- a/src/gpu/GrAAConvexPathRenderer.cpp +++ b/src/gpu/GrAAConvexPathRenderer.cpp @@ -18,15 +18,6 @@ GrAAConvexPathRenderer::GrAAConvexPathRenderer() { } -bool GrAAConvexPathRenderer::canDrawPath(const GrDrawTarget::Caps& targetCaps, - const SkPath& path, - GrPathFill fill, - bool antiAlias) const { - return targetCaps.fShaderDerivativeSupport && antiAlias && - kHairLine_PathFill != fill && !GrIsFillInverted(fill) && - path.isConvex(); -} - namespace { struct Segment { @@ -415,17 +406,38 @@ void create_vertices(const SegmentArray& segments, } -void GrAAConvexPathRenderer::drawPath(GrDrawState::StageMask stageMask) { - GrAssert(fPath->isConvex()); - if (fPath->isEmpty()) { - return; +bool GrAAConvexPathRenderer::canDrawPath(const SkPath& path, + GrPathFill fill, + const GrDrawTarget* target, + bool antiAlias) const { + if (!target->getCaps().fShaderDerivativeSupport || !antiAlias || + kHairLine_PathFill == fill || GrIsFillInverted(fill) || + !path.isConvex()) { + return false; + } else { + return true; + } +} + +bool GrAAConvexPathRenderer::onDrawPath(const SkPath& origPath, + GrPathFill fill, + const GrVec* translate, + GrDrawTarget* target, + GrDrawState::StageMask stageMask, + bool antiAlias) { + + + if (origPath.isEmpty()) { + return true; } - GrDrawState* drawState = fTarget->drawState(); + GrDrawState* drawState = target->drawState(); GrDrawTarget::AutoStateRestore asr; GrMatrix vm = drawState->getViewMatrix(); - vm.postTranslate(fTranslate.fX, fTranslate.fY); - asr.set(fTarget); + if (NULL != translate) { + vm.postTranslate(translate->fX, translate->fY); + } + asr.set(target); GrMatrix ivm; if (vm.invert(&ivm)) { drawState->preConcatSamplerMatrices(stageMask, ivm); @@ -433,7 +445,7 @@ void GrAAConvexPathRenderer::drawPath(GrDrawState::StageMask stageMask) { drawState->setViewMatrix(GrMatrix::I()); SkPath path; - fPath->transform(vm, &path); + origPath.transform(vm, &path); GrVertexLayout layout = 0; for (int s = 0; s < GrDrawState::kNumStages; ++s) { @@ -451,26 +463,27 @@ void GrAAConvexPathRenderer::drawPath(GrDrawState::StageMask stageMask) { SegmentArray segments; SkPoint fanPt; if (!get_segments(path, &segments, &fanPt, &vCount, &iCount)) { - return; + return false; } - if (!fTarget->reserveVertexSpace(layout, - vCount, - reinterpret_cast<void**>(&verts))) { - return; + if (!target->reserveVertexSpace(layout, + vCount, + reinterpret_cast<void**>(&verts))) { + return false; } - if (!fTarget->reserveIndexSpace(iCount, reinterpret_cast<void**>(&idxs))) { - fTarget->resetVertexSource(); - return; + if (!target->reserveIndexSpace(iCount, reinterpret_cast<void**>(&idxs))) { + target->resetVertexSource(); + return false; } create_vertices(segments, fanPt, verts, idxs); drawState->setVertexEdgeType(GrDrawState::kQuad_EdgeType); - fTarget->drawIndexed(kTriangles_PrimitiveType, - 0, // start vertex - 0, // start index - vCount, - iCount); + target->drawIndexed(kTriangles_PrimitiveType, + 0, // start vertex + 0, // start index + vCount, + iCount); + return true; } |