Index: src/gpu/GrTessellatingPathRenderer.cpp |
diff --git a/src/gpu/GrTessellatingPathRenderer.cpp b/src/gpu/GrTessellatingPathRenderer.cpp |
index 5bbc4757ff3e434a417414f79f1da3940c04776d..282efe251666a46ac42b04424e58c76d46c3b447 100644 |
--- a/src/gpu/GrTessellatingPathRenderer.cpp |
+++ b/src/gpu/GrTessellatingPathRenderer.cpp |
@@ -1384,10 +1384,9 @@ |
} // namespace |
bool GrTessellatingPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const { |
- // This path renderer can draw all fill styles, all stroke styles except hairlines, but does |
- // not do antialiasing. It can do convex and concave paths, but we'll leave the convex ones to |
- // simpler algorithms. |
- return !args.fStroke->isHairlineStyle() && !args.fAntiAlias && !args.fPath->isConvex(); |
+ // This path renderer can draw all fill styles, but does not do antialiasing. It can do convex |
+ // and concave paths, but we'll leave the convex ones to simpler algorithms. |
+ return args.fStroke->isFillStyle() && !args.fAntiAlias && !args.fPath->isConvex(); |
} |
class TessellatingPathBatch : public GrBatch { |
@@ -1395,10 +1394,9 @@ |
static GrBatch* Create(const GrColor& color, |
const SkPath& path, |
- const GrStrokeInfo& stroke, |
const SkMatrix& viewMatrix, |
SkRect clipBounds) { |
- return SkNEW_ARGS(TessellatingPathBatch, (color, path, stroke, viewMatrix, clipBounds)); |
+ return SkNEW_ARGS(TessellatingPathBatch, (color, path, viewMatrix, clipBounds)); |
} |
const char* name() const override { return "TessellatingPathBatch"; } |
@@ -1423,23 +1421,7 @@ |
int tessellate(GrUniqueKey* key, |
GrResourceProvider* resourceProvider, |
SkAutoTUnref<GrVertexBuffer>& vertexBuffer) { |
- SkPath path; |
- GrStrokeInfo stroke(fStroke); |
- if (stroke.isDashed()) { |
- if (!stroke.applyDashToPath(&path, &stroke, fPath)) { |
- return 0; |
- } |
- } else { |
- path = fPath; |
- } |
- if (!stroke.isFillStyle()) { |
- stroke.setResScale(SkScalarAbs(fViewMatrix.getMaxScale())); |
- if (!stroke.applyToPath(&path, path)) { |
- return 0; |
- } |
- stroke.setFillStyle(); |
- } |
- SkRect pathBounds = path.getBounds(); |
+ SkRect pathBounds = fPath.getBounds(); |
Comparator c; |
if (pathBounds.width() > pathBounds.height()) { |
c.sweep_lt = sweep_lt_horiz; |
@@ -1451,7 +1433,7 @@ |
SkScalar screenSpaceTol = GrPathUtils::kDefaultTolerance; |
SkScalar tol = GrPathUtils::scaleToleranceToSrc(screenSpaceTol, fViewMatrix, pathBounds); |
int contourCnt; |
- int maxPts = GrPathUtils::worstCasePointCount(path, &contourCnt, tol); |
+ int maxPts = GrPathUtils::worstCasePointCount(fPath, &contourCnt, tol); |
if (maxPts <= 0) { |
return 0; |
} |
@@ -1459,7 +1441,7 @@ |
SkDebugf("Path not rendered, too many verts (%d)\n", maxPts); |
return 0; |
} |
- SkPath::FillType fillType = path.getFillType(); |
+ SkPath::FillType fillType = fPath.getFillType(); |
if (SkPath::IsInverseFillType(fillType)) { |
contourCnt++; |
} |
@@ -1473,7 +1455,7 @@ |
// connectivity of one Edge per Vertex (will grow for intersections). |
SkChunkAlloc alloc(maxPts * (3 * sizeof(Vertex) + sizeof(Edge))); |
bool isLinear; |
- path_to_contours(path, tol, fClipBounds, contours.get(), alloc, &isLinear); |
+ path_to_contours(fPath, tol, fClipBounds, contours.get(), alloc, &isLinear); |
Poly* polys; |
polys = contours_to_polys(contours.get(), contourCnt, c, alloc); |
int count = 0; |
@@ -1521,15 +1503,13 @@ |
GrUniqueKey key; |
int clipBoundsSize32 = |
fPath.isInverseFillType() ? sizeof(fClipBounds) / sizeof(uint32_t) : 0; |
- int strokeDataSize32 = fStroke.computeUniqueKeyFragmentData32Cnt(); |
- GrUniqueKey::Builder builder(&key, kDomain, 2 + clipBoundsSize32 + strokeDataSize32); |
+ GrUniqueKey::Builder builder(&key, kDomain, 2 + clipBoundsSize32); |
builder[0] = fPath.getGenerationID(); |
builder[1] = fPath.getFillType(); |
// For inverse fills, the tessellation is dependent on clip bounds. |
if (fPath.isInverseFillType()) { |
memcpy(&builder[2], &fClipBounds, sizeof(fClipBounds)); |
} |
- fStroke.asUniqueKeyFragment(&builder[2 + clipBoundsSize32]); |
builder.finish(); |
GrResourceProvider* rp = batchTarget->resourceProvider(); |
SkAutoTUnref<GrVertexBuffer> vertexBuffer(rp->findAndRefTByUniqueKey<GrVertexBuffer>(key)); |
@@ -1581,12 +1561,10 @@ |
private: |
TessellatingPathBatch(const GrColor& color, |
const SkPath& path, |
- const GrStrokeInfo& stroke, |
const SkMatrix& viewMatrix, |
const SkRect& clipBounds) |
: fColor(color) |
, fPath(path) |
- , fStroke(stroke) |
, fViewMatrix(viewMatrix) |
, fClipBounds(clipBounds) { |
this->initClassID<TessellatingPathBatch>(); |
@@ -1597,7 +1575,6 @@ |
GrColor fColor; |
SkPath fPath; |
- GrStrokeInfo fStroke; |
SkMatrix fViewMatrix; |
SkRect fClipBounds; // in source space |
GrPipelineInfo fPipelineInfo; |
@@ -1619,8 +1596,7 @@ |
} |
vmi.mapRect(&clipBounds); |
SkAutoTUnref<GrBatch> batch(TessellatingPathBatch::Create(args.fColor, *args.fPath, |
- *args.fStroke, *args.fViewMatrix, |
- clipBounds)); |
+ *args.fViewMatrix, clipBounds)); |
args.fTarget->drawBatch(*args.fPipelineBuilder, batch); |
return true; |
@@ -1641,8 +1617,7 @@ |
SkFAIL("Cannot invert matrix\n"); |
} |
vmi.mapRect(&clipBounds); |
- GrStrokeInfo strokeInfo = GrTest::TestStrokeInfo(random); |
- return TessellatingPathBatch::Create(color, path, strokeInfo, viewMatrix, clipBounds); |
+ return TessellatingPathBatch::Create(color, path, viewMatrix, clipBounds); |
} |
#endif |