Index: src/gpu/GrAAHairLinePathRenderer.cpp |
diff --git a/src/gpu/GrAAHairLinePathRenderer.cpp b/src/gpu/GrAAHairLinePathRenderer.cpp |
index 74d19bdb0b94dea72f808c2735f13ae6894b29cd..0d16cf8ea2fa6bf7c8f1d2291950b75f33f38aa4 100644 |
--- a/src/gpu/GrAAHairLinePathRenderer.cpp |
+++ b/src/gpu/GrAAHairLinePathRenderer.cpp |
@@ -650,14 +650,13 @@ extern const GrVertexAttrib gHairlineBezierAttribs[] = { |
}; |
}; |
-bool GrAAHairLinePathRenderer::createLineGeom(const SkPath& path, |
- GrDrawTarget* target, |
- const PtArray& lines, |
- int lineCnt, |
+bool GrAAHairLinePathRenderer::createLineGeom(GrDrawTarget* target, |
+ GrDrawState* drawState, |
GrDrawTarget::AutoReleaseGeometry* arg, |
- SkRect* devBounds) { |
- GrDrawState* drawState = target->drawState(); |
- |
+ SkRect* devBounds, |
+ const SkPath& path, |
+ const PtArray& lines, |
+ int lineCnt) { |
const SkMatrix& viewM = drawState->getViewMatrix(); |
int vertCnt = kLineSegNumVertices * lineCnt; |
@@ -665,7 +664,7 @@ bool GrAAHairLinePathRenderer::createLineGeom(const SkPath& path, |
GrDefaultGeoProcFactory::SetAttribs(drawState, GrDefaultGeoProcFactory::kPosition_GPType | |
GrDefaultGeoProcFactory::kCoverage_GPType); |
- if (!arg->set(target, vertCnt, 0)) { |
+ if (!arg->set(target, vertCnt, drawState->getVertexStride(), 0)) { |
return false; |
} |
@@ -692,27 +691,25 @@ bool GrAAHairLinePathRenderer::createLineGeom(const SkPath& path, |
return true; |
} |
-bool GrAAHairLinePathRenderer::createBezierGeom( |
- const SkPath& path, |
- GrDrawTarget* target, |
- const PtArray& quads, |
- int quadCnt, |
- const PtArray& conics, |
- int conicCnt, |
- const IntArray& qSubdivs, |
- const FloatArray& cWeights, |
- GrDrawTarget::AutoReleaseGeometry* arg, |
- SkRect* devBounds) { |
- GrDrawState* drawState = target->drawState(); |
- |
+bool GrAAHairLinePathRenderer::createBezierGeom(GrDrawTarget* target, |
+ GrDrawState* drawState, |
+ GrDrawTarget::AutoReleaseGeometry* arg, |
+ SkRect* devBounds, |
+ const SkPath& path, |
+ const PtArray& quads, |
+ int quadCnt, |
+ const PtArray& conics, |
+ int conicCnt, |
+ const IntArray& qSubdivs, |
+ const FloatArray& cWeights) { |
const SkMatrix& viewM = drawState->getViewMatrix(); |
int vertCnt = kQuadNumVertices * quadCnt + kQuadNumVertices * conicCnt; |
int vAttribCnt = SK_ARRAY_COUNT(gHairlineBezierAttribs); |
- target->drawState()->setVertexAttribs<gHairlineBezierAttribs>(vAttribCnt, sizeof(BezierVertex)); |
+ drawState->setVertexAttribs<gHairlineBezierAttribs>(vAttribCnt, sizeof(BezierVertex)); |
- if (!arg->set(target, vertCnt, 0)) { |
+ if (!arg->set(target, vertCnt, drawState->getVertexStride(), 0)) { |
return false; |
} |
@@ -757,16 +754,17 @@ bool GrAAHairLinePathRenderer::createBezierGeom( |
return true; |
} |
-bool GrAAHairLinePathRenderer::canDrawPath(const SkPath& path, |
+bool GrAAHairLinePathRenderer::canDrawPath(const GrDrawTarget* target, |
+ const GrDrawState* drawState, |
+ const SkPath& path, |
const SkStrokeRec& stroke, |
- const GrDrawTarget* target, |
bool antiAlias) const { |
if (!antiAlias) { |
return false; |
} |
if (!IsStrokeHairlineOrEquivalent(stroke, |
- target->getDrawState().getViewMatrix(), |
+ drawState->getViewMatrix(), |
NULL)) { |
return false; |
} |
@@ -815,19 +813,16 @@ bool check_bounds(GrDrawState* drawState, const SkRect& devBounds, void* vertice |
return true; |
} |
-bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path, |
+bool GrAAHairLinePathRenderer::onDrawPath(GrDrawTarget* target, |
+ GrDrawState* drawState, |
+ const SkPath& path, |
const SkStrokeRec& stroke, |
- GrDrawTarget* target, |
bool antiAlias) { |
- GrDrawState* drawState = target->drawState(); |
- |
SkScalar hairlineCoverage; |
- if (IsStrokeHairlineOrEquivalent(stroke, |
- target->getDrawState().getViewMatrix(), |
+ if (IsStrokeHairlineOrEquivalent(stroke, drawState->getViewMatrix(), |
&hairlineCoverage)) { |
- uint8_t newCoverage = SkScalarRoundToInt(hairlineCoverage * |
- target->getDrawState().getCoverage()); |
- target->drawState()->setCoverage(newCoverage); |
+ uint8_t newCoverage = SkScalarRoundToInt(hairlineCoverage * drawState->getCoverage()); |
+ drawState->setCoverage(newCoverage); |
} |
SkIRect devClipBounds; |
@@ -851,25 +846,22 @@ bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path, |
GrDrawTarget::AutoReleaseGeometry arg; |
SkRect devBounds; |
- if (!this->createLineGeom(path, |
- target, |
- lines, |
- lineCnt, |
+ if (!this->createLineGeom(target, |
+ drawState, |
&arg, |
- &devBounds)) { |
+ &devBounds, |
+ path, |
+ lines, |
+ lineCnt)) { |
return false; |
} |
- GrDrawTarget::AutoStateRestore asr; |
- |
// createLineGeom transforms the geometry to device space when the matrix does not have |
// perspective. |
- if (target->getDrawState().getViewMatrix().hasPerspective()) { |
- asr.set(target, GrDrawTarget::kPreserve_ASRInit); |
- } else if (!asr.setIdentity(target, GrDrawTarget::kPreserve_ASRInit)) { |
+ GrDrawState::AutoViewMatrixRestore avmr; |
+ if (!drawState->getViewMatrix().hasPerspective() && !avmr.setIdentity(drawState)) { |
return false; |
} |
- GrDrawState* drawState = target->drawState(); |
// Check devBounds |
SkASSERT(check_bounds<LineVertex>(drawState, devBounds, arg.vertices(), |
@@ -882,7 +874,8 @@ bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path, |
int lines = 0; |
while (lines < lineCnt) { |
int n = SkTMin(lineCnt - lines, kLineSegsNumInIdxBuffer); |
- target->drawIndexed(kTriangles_GrPrimitiveType, |
+ target->drawIndexed(drawState, |
+ kTriangles_GrPrimitiveType, |
kLineSegNumVertices*lines, // startV |
0, // startI |
kLineSegNumVertices*n, // vCount |
@@ -898,29 +891,27 @@ bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path, |
GrDrawTarget::AutoReleaseGeometry arg; |
SkRect devBounds; |
- if (!this->createBezierGeom(path, |
- target, |
+ if (!this->createBezierGeom(target, |
+ drawState, |
+ &arg, |
+ &devBounds, |
+ path, |
quads, |
quadCnt, |
conics, |
conicCnt, |
qSubdivs, |
- cWeights, |
- &arg, |
- &devBounds)) { |
+ cWeights)) { |
return false; |
} |
- GrDrawTarget::AutoStateRestore asr; |
- |
// createGeom transforms the geometry to device space when the matrix does not have |
// perspective. |
- if (target->getDrawState().getViewMatrix().hasPerspective()) { |
- asr.set(target, GrDrawTarget::kPreserve_ASRInit); |
- } else if (!asr.setIdentity(target, GrDrawTarget::kPreserve_ASRInit)) { |
+ GrDrawState::AutoViewMatrixRestore avmr; |
+ if (!drawState->getViewMatrix().hasPerspective() && !avmr.setIdentity(drawState)) { |
return false; |
} |
- GrDrawState* drawState = target->drawState(); |
+ |
// Check devBounds |
SkASSERT(check_bounds<BezierVertex>(drawState, devBounds, arg.vertices(), |
@@ -936,7 +927,8 @@ bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path, |
int quads = 0; |
while (quads < quadCnt) { |
int n = SkTMin(quadCnt - quads, kQuadsNumInIdxBuffer); |
- target->drawIndexed(kTriangles_GrPrimitiveType, |
+ target->drawIndexed(drawState, |
+ kTriangles_GrPrimitiveType, |
kQuadNumVertices*quads, // startV |
0, // startI |
kQuadNumVertices*n, // vCount |
@@ -955,7 +947,8 @@ bool GrAAHairLinePathRenderer::onDrawPath(const SkPath& path, |
int conics = 0; |
while (conics < conicCnt) { |
int n = SkTMin(conicCnt - conics, kQuadsNumInIdxBuffer); |
- target->drawIndexed(kTriangles_GrPrimitiveType, |
+ target->drawIndexed(drawState, |
+ kTriangles_GrPrimitiveType, |
kQuadNumVertices*(quadCnt + conics), // startV |
0, // startI |
kQuadNumVertices*n, // vCount |