Index: src/gpu/batches/GrAADistanceFieldPathRenderer.cpp |
diff --git a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp |
index e6be590fc50241e2b1300bc4b2d981e25470d543..6cf3e4b82c64148efbb18525f0c54fdcd3e5f059 100644 |
--- a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp |
+++ b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp |
@@ -82,13 +82,13 @@ GrAADistanceFieldPathRenderer::~GrAADistanceFieldPathRenderer() { |
//////////////////////////////////////////////////////////////////////////////// |
bool GrAADistanceFieldPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const { |
// We don't currently apply the dash or factor it into the DF key. (skbug.com/5082) |
- if (args.fStyle->pathEffect()) { |
+ if (args.fShape->style().pathEffect()) { |
return false; |
} |
// TODO: Support inverse fill |
if (!args.fShaderCaps->shaderDerivativeSupport() || !args.fAntiAlias || |
- args.fStyle->isSimpleHairline() || args.fPath->isInverseFillType() || |
- args.fPath->isVolatile()) { |
+ args.fShape->style().isSimpleHairline() || args.fShape->mayBeInverseFilledAfterStyling() || |
+ !args.fShape->hasUnstyledKey()) { |
return false; |
} |
@@ -102,7 +102,7 @@ bool GrAADistanceFieldPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) c |
// the goal is to accelerate rendering of lots of small paths that may be scaling |
SkScalar maxScale = args.fViewMatrix->getMaxScale(); |
SkRect bounds; |
- args.fStyle->adjustBounds(&bounds, args.fPath->getBounds()); |
+ args.fShape->styledBounds(&bounds); |
SkScalar maxDim = SkMaxScalar(bounds.width(), bounds.height()); |
return maxDim <= kMediumMIP && maxDim * maxScale <= 2.0f*kLargeMIP; |
@@ -532,9 +532,7 @@ bool GrAADistanceFieldPathRenderer::onDrawPath(const DrawPathArgs& args) { |
SkASSERT(!args.fDrawContext->isUnifiedMultisampled()); |
// we've already bailed on inverse filled paths, so this is safe |
- if (args.fPath->isEmpty()) { |
- return true; |
- } |
+ SkASSERT(!args.fShape->isEmpty()); |
if (!fAtlas) { |
fAtlas = args.fResourceProvider->createAtlas(kAlpha_8_GrPixelConfig, |
@@ -547,19 +545,19 @@ bool GrAADistanceFieldPathRenderer::onDrawPath(const DrawPathArgs& args) { |
} |
} |
+ const GrStyle& style = args.fShape->style(); |
// It's ok to ignore style's path effect because canDrawPath filtered out path effects. |
- AADistanceFieldPathBatch::Geometry geometry(args.fStyle->strokeRec()); |
- if (args.fStyle->isSimpleFill()) { |
- geometry.fPath = *args.fPath; |
- } else { |
- args.fStyle->strokeRec().applyToPath(&geometry.fPath, *args.fPath); |
- } |
- geometry.fColor = args.fColor; |
- geometry.fAntiAlias = args.fAntiAlias; |
+ AADistanceFieldPathBatch::Geometry geometry(style.strokeRec()); |
+ args.fShape->asPath(&geometry.fPath); |
// Note: this is the generation ID of the _original_ path. When a new path is |
// generated due to stroking it is important that the original path's id is used |
// for caching. |
- geometry.fGenID = args.fPath->getGenerationID(); |
+ geometry.fGenID = geometry.fPath.getGenerationID(); |
+ if (!style.isSimpleFill()) { |
+ style.strokeRec().applyToPath(&geometry.fPath, geometry.fPath); |
+ } |
+ geometry.fColor = args.fColor; |
+ geometry.fAntiAlias = args.fAntiAlias; |
SkAutoTUnref<GrDrawBatch> batch(AADistanceFieldPathBatch::Create(geometry, |
*args.fViewMatrix, fAtlas, |