| Index: src/gpu/batches/GrDefaultPathRenderer.cpp
|
| diff --git a/src/gpu/batches/GrDefaultPathRenderer.cpp b/src/gpu/batches/GrDefaultPathRenderer.cpp
|
| index 7fd7913aaead860674ba23e062926049b9ca12b1..1e807f8e3a315a52908223d69bd08354dddd2f3b 100644
|
| --- a/src/gpu/batches/GrDefaultPathRenderer.cpp
|
| +++ b/src/gpu/batches/GrDefaultPathRenderer.cpp
|
| @@ -34,20 +34,20 @@ GrDefaultPathRenderer::GrDefaultPathRenderer(bool separateStencilSupport,
|
|
|
| #define STENCIL_OFF 0 // Always disable stencil (even when needed)
|
|
|
| -static inline bool single_pass_path(const SkPath& path, const SkStrokeRec& stroke) {
|
| +static inline bool single_pass_shape(const GrShape& shape) {
|
| #if STENCIL_OFF
|
| return true;
|
| #else
|
| - if (!stroke.isHairlineStyle() && !path.isInverseFillType()) {
|
| - return path.isConvex();
|
| + if (!shape.style().couldBeHairline() && !shape.inverseFilled()) {
|
| + return shape.knownToBeConvex();
|
| }
|
| return false;
|
| #endif
|
| }
|
|
|
| GrPathRenderer::StencilSupport
|
| -GrDefaultPathRenderer::onGetStencilSupport(const SkPath& path) const {
|
| - if (single_pass_path(path, SkStrokeRec(SkStrokeRec::kFill_InitStyle))) {
|
| +GrDefaultPathRenderer::onGetStencilSupport(const GrShape& shape) const {
|
| + if (single_pass_shape(shape)) {
|
| return GrPathRenderer::kNoRestriction_StencilSupport;
|
| } else {
|
| return GrPathRenderer::kStencilOnly_StencilSupport;
|
| @@ -422,20 +422,19 @@ bool GrDefaultPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| const GrClip& clip,
|
| GrColor color,
|
| const SkMatrix& viewMatrix,
|
| - const SkPath& path,
|
| - const GrStyle& origStyle,
|
| + const GrShape& shape,
|
| bool stencilOnly) {
|
| - const GrStyle* style = &origStyle;
|
| + SkPath path;
|
| + shape.asPath(&path);
|
|
|
| SkScalar hairlineCoverage;
|
| uint8_t newCoverage = 0xff;
|
| bool isHairline = false;
|
| - if (IsStrokeHairlineOrEquivalent(*style, viewMatrix, &hairlineCoverage)) {
|
| + if (IsStrokeHairlineOrEquivalent(shape.style(), viewMatrix, &hairlineCoverage)) {
|
| newCoverage = SkScalarRoundToInt(hairlineCoverage * 0xff);
|
| - style = &GrStyle::SimpleHairline();
|
| isHairline = true;
|
| } else {
|
| - SkASSERT(style->isSimpleFill());
|
| + SkASSERT(shape.style().isSimpleFill());
|
| }
|
|
|
| int passCount = 0;
|
| @@ -454,7 +453,7 @@ bool GrDefaultPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| lastPassIsBounds = false;
|
| drawFace[0] = GrPipelineBuilder::kBoth_DrawFace;
|
| } else {
|
| - if (single_pass_path(path, style->strokeRec())) {
|
| + if (single_pass_shape(shape)) {
|
| passCount = 1;
|
| if (stencilOnly) {
|
| passes[0] = &gDirectToStencil;
|
| @@ -600,9 +599,8 @@ bool GrDefaultPathRenderer::internalDrawPath(GrDrawContext* drawContext,
|
| bool GrDefaultPathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const {
|
| // this class can draw any path with any simple fill style but doesn't do any anti-aliasing.
|
| return !args.fAntiAlias &&
|
| - (args.fStyle->isSimpleFill() || IsStrokeHairlineOrEquivalent(*args.fStyle,
|
| - *args.fViewMatrix,
|
| - nullptr));
|
| + (args.fShape->style().isSimpleFill() ||
|
| + IsStrokeHairlineOrEquivalent(args.fShape->style(), *args.fViewMatrix, nullptr));
|
| }
|
|
|
| bool GrDefaultPathRenderer::onDrawPath(const DrawPathArgs& args) {
|
| @@ -614,30 +612,21 @@ bool GrDefaultPathRenderer::onDrawPath(const DrawPathArgs& args) {
|
| *args.fClip,
|
| args.fColor,
|
| *args.fViewMatrix,
|
| - *args.fPath,
|
| - *args.fStyle,
|
| + *args.fShape,
|
| false);
|
| }
|
|
|
| void GrDefaultPathRenderer::onStencilPath(const StencilPathArgs& args) {
|
| GR_AUDIT_TRAIL_AUTO_FRAME(args.fDrawContext->auditTrail(),
|
| "GrDefaultPathRenderer::onStencilPath");
|
| - SkASSERT(SkPath::kInverseEvenOdd_FillType != args.fPath->getFillType());
|
| - SkASSERT(SkPath::kInverseWinding_FillType != args.fPath->getFillType());
|
| + SkASSERT(!args.fShape->inverseFilled());
|
|
|
| GrPaint paint;
|
| paint.setXPFactory(GrDisableColorXPFactory::Make());
|
| paint.setAntiAlias(args.fIsAA);
|
|
|
| - this->internalDrawPath(args.fDrawContext,
|
| - paint,
|
| - &GrUserStencilSettings::kUnused,
|
| - *args.fClip,
|
| - GrColor_WHITE,
|
| - *args.fViewMatrix,
|
| - *args.fPath,
|
| - GrStyle::SimpleFill(),
|
| - true);
|
| + this->internalDrawPath(args.fDrawContext, paint, &GrUserStencilSettings::kUnused, *args.fClip,
|
| + GrColor_WHITE, *args.fViewMatrix, *args.fShape, true);
|
| }
|
|
|
| ///////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|