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
diff --git a/src/gpu/GrAAConvexPathRenderer.cpp b/src/gpu/GrAAConvexPathRenderer.cpp
index d596284..60749d8 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 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;
}
- GrDrawState* drawState = fTarget->drawState();
+}
+
+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 = 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 @@
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 @@
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;
}