Index: src/gpu/batches/GrStencilAndCoverPathRenderer.cpp |
diff --git a/src/gpu/batches/GrStencilAndCoverPathRenderer.cpp b/src/gpu/batches/GrStencilAndCoverPathRenderer.cpp |
index 6933efebe330744543d07a970cd93695a8fd6106..9d8d07de84b1aa3a88452313eeacf3b9e67a57b3 100644 |
--- a/src/gpu/batches/GrStencilAndCoverPathRenderer.cpp |
+++ b/src/gpu/batches/GrStencilAndCoverPathRenderer.cpp |
@@ -14,7 +14,7 @@ |
#include "GrPath.h" |
#include "GrRenderTarget.h" |
#include "GrResourceProvider.h" |
-#include "GrStrokeInfo.h" |
+#include "GrStyle.h" |
#include "batches/GrRectBatchFactory.h" |
GrPathRenderer* GrStencilAndCoverPathRenderer::Create(GrResourceProvider* resourceProvider, |
@@ -31,7 +31,9 @@ GrStencilAndCoverPathRenderer::GrStencilAndCoverPathRenderer(GrResourceProvider* |
} |
bool GrStencilAndCoverPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const { |
- if (args.fStroke->isHairlineStyle()) { |
+ // GrPath doesn't support hairline paths. Also, an arbitrary path effect could change |
+ // the style type to hairline. |
+ if (!args.fStyle->hasNonDashPathEffect() || args.fStyle->strokeRec().isHairlineStyle()) { |
return false; |
} |
if (!args.fIsStencilDisabled) { |
@@ -45,19 +47,19 @@ bool GrStencilAndCoverPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) c |
} |
static GrPath* get_gr_path(GrResourceProvider* resourceProvider, const SkPath& skPath, |
- const GrStrokeInfo& stroke) { |
+ const GrStyle& style) { |
GrUniqueKey key; |
bool isVolatile; |
- GrPath::ComputeKey(skPath, stroke, &key, &isVolatile); |
+ GrPath::ComputeKey(skPath, style, &key, &isVolatile); |
SkAutoTUnref<GrPath> path( |
static_cast<GrPath*>(resourceProvider->findAndRefResourceByUniqueKey(key))); |
if (!path) { |
- path.reset(resourceProvider->createPath(skPath, stroke)); |
+ path.reset(resourceProvider->createPath(skPath, style)); |
if (!isVolatile) { |
resourceProvider->assignUniqueKeyToResource(key, path); |
} |
} else { |
- SkASSERT(path->isEqualTo(skPath, stroke)); |
+ SkASSERT(path->isEqualTo(skPath, style)); |
} |
return path.release(); |
} |
@@ -66,14 +68,14 @@ void GrStencilAndCoverPathRenderer::onStencilPath(const StencilPathArgs& args) { |
GR_AUDIT_TRAIL_AUTO_FRAME(args.fTarget->getAuditTrail(), |
"GrStencilAndCoverPathRenderer::onStencilPath"); |
SkASSERT(!args.fPath->isInverseFillType()); |
- SkAutoTUnref<GrPath> p(get_gr_path(fResourceProvider, *args.fPath, GrStrokeInfo::FillInfo())); |
+ SkAutoTUnref<GrPath> p(get_gr_path(fResourceProvider, *args.fPath, GrStyle::SimpleFill())); |
args.fTarget->stencilPath(*args.fPipelineBuilder, *args.fViewMatrix, p, p->getFillType()); |
} |
bool GrStencilAndCoverPathRenderer::onDrawPath(const DrawPathArgs& args) { |
GR_AUDIT_TRAIL_AUTO_FRAME(args.fTarget->getAuditTrail(), |
"GrStencilAndCoverPathRenderer::onDrawPath"); |
- SkASSERT(!args.fStroke->isHairlineStyle()); |
+ SkASSERT(!args.fStyle->strokeRec().isHairlineStyle()); |
const SkPath& path = *args.fPath; |
GrPipelineBuilder* pipelineBuilder = args.fPipelineBuilder; |
const SkMatrix& viewMatrix = *args.fViewMatrix; |
@@ -85,7 +87,7 @@ bool GrStencilAndCoverPathRenderer::onDrawPath(const DrawPathArgs& args) { |
pipelineBuilder->enableState(GrPipelineBuilder::kHWAntialias_Flag); |
} |
- SkAutoTUnref<GrPath> p(get_gr_path(fResourceProvider, path, *args.fStroke)); |
+ SkAutoTUnref<GrPath> p(get_gr_path(fResourceProvider, path, *args.fStyle)); |
if (path.isInverseFillType()) { |
static constexpr GrStencilSettings kInvertedStencilPass( |