diff options
Diffstat (limited to 'src/gpu/batches/GrAADistanceFieldPathRenderer.cpp')
-rw-r--r-- | src/gpu/batches/GrAADistanceFieldPathRenderer.cpp | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp index f891b8d1f5..ba52bf9213 100644 --- a/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp +++ b/src/gpu/batches/GrAADistanceFieldPathRenderer.cpp @@ -81,13 +81,14 @@ 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()) { + return false; + } // TODO: Support inverse fill if (!args.fShaderCaps->shaderDerivativeSupport() || !args.fAntiAlias || - SkStrokeRec::kHairline_Style == args.fStroke->getStyle() || - args.fPath->isInverseFillType() || args.fPath->isVolatile() || - // We don't currently apply the dash or factor it into the DF key. (skbug.com/5082) - args.fStroke->isDashed()) { + args.fStyle->isSimpleHairline() || args.fPath->isInverseFillType() || + args.fPath->isVolatile()) { return false; } @@ -100,16 +101,23 @@ bool GrAADistanceFieldPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) c // scaled to have bounds within 2.0f*kLargeMIP by 2.0f*kLargeMIP // the goal is to accelerate rendering of lots of small paths that may be scaling SkScalar maxScale = args.fViewMatrix->getMaxScale(); +#if 0 // This is more accurate but changes some GMs. TODO: Standalone change to enable this. + SkRect bounds; + args.fStyle->adjustBounds(&bounds, args.fPath->getBounds()); + SkScalar maxDim = SkMaxScalar(bounds.width(), bounds.height()); +#else const SkRect& bounds = args.fPath->getBounds(); SkScalar maxDim = SkMaxScalar(bounds.width(), bounds.height()); + const SkStrokeRec& stroke = args.fStyle->strokeRec(); // Approximate stroked size by adding the maximum of the stroke width or 2x the miter limit - if (!args.fStroke->isFillStyle()) { - SkScalar extraWidth = args.fStroke->getWidth(); - if (SkPaint::kMiter_Join == args.fStroke->getJoin()) { - extraWidth = SkTMax(extraWidth, 2.0f*args.fStroke->getMiter()); + if (!stroke.isFillStyle()) { + SkScalar extraWidth = stroke.getWidth(); + if (SkPaint::kMiter_Join == stroke.getJoin()) { + extraWidth = SkTMax(extraWidth, 2.0f*stroke.getMiter()); } maxDim += extraWidth; } +#endif return maxDim <= kMediumMIP && maxDim * maxScale <= 2.0f*kLargeMIP; } @@ -552,11 +560,12 @@ bool GrAADistanceFieldPathRenderer::onDrawPath(const DrawPathArgs& args) { } } - AADistanceFieldPathBatch::Geometry geometry(*args.fStroke); - if (SkStrokeRec::kFill_Style == args.fStroke->getStyle()) { + // 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.fStroke->applyToPath(&geometry.fPath, *args.fPath); + args.fStyle->strokeRec().applyToPath(&geometry.fPath, *args.fPath); } geometry.fColor = args.fColor; geometry.fAntiAlias = args.fAntiAlias; |