| Index: src/gpu/GrDrawContext.cpp
|
| diff --git a/src/gpu/GrDrawContext.cpp b/src/gpu/GrDrawContext.cpp
|
| index b5489f1123bd6ca427434ddec98f8a222a680cca..7ee4e620e58ce040d9cddd1b1f7d51a0cf779a06 100644
|
| --- a/src/gpu/GrDrawContext.cpp
|
| +++ b/src/gpu/GrDrawContext.cpp
|
| @@ -925,11 +925,11 @@ bool GrDrawContextPriv::drawAndStencilPath(const GrFixedClip& clip,
|
| useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType
|
| : GrPathRendererChain::kColor_DrawType;
|
|
|
| + GrShape shape(path, GrStyle::SimpleFill());
|
| GrPathRenderer::CanDrawPathArgs canDrawArgs;
|
| canDrawArgs.fShaderCaps = fDrawContext->fDrawingManager->getContext()->caps()->shaderCaps();
|
| canDrawArgs.fViewMatrix = &viewMatrix;
|
| - canDrawArgs.fPath = &path;
|
| - canDrawArgs.fStyle = &GrStyle::SimpleFill();
|
| + canDrawArgs.fShape = &shape;
|
| canDrawArgs.fAntiAlias = useCoverageAA;
|
| canDrawArgs.fHasUserStencilSettings = hasUserStencilSettings;
|
| canDrawArgs.fIsStencilBufferMSAA = isStencilBufferMSAA;
|
| @@ -951,8 +951,7 @@ bool GrDrawContextPriv::drawAndStencilPath(const GrFixedClip& clip,
|
| args.fClip = &clip;
|
| args.fColor = GrColor_WHITE;
|
| args.fViewMatrix = &viewMatrix;
|
| - args.fPath = &path;
|
| - args.fStyle = &GrStyle::SimpleFill();
|
| + args.fShape = &shape;
|
| args.fAntiAlias = useCoverageAA;
|
| args.fGammaCorrect = fDrawContext->isGammaCorrect();
|
| pr->drawPath(args);
|
| @@ -962,11 +961,11 @@ bool GrDrawContextPriv::drawAndStencilPath(const GrFixedClip& clip,
|
| void GrDrawContext::internalDrawPath(const GrClip& clip,
|
| const GrPaint& paint,
|
| const SkMatrix& viewMatrix,
|
| - const SkPath& origPath,
|
| - const GrStyle& origStyle) {
|
| + const SkPath& path,
|
| + const GrStyle& style) {
|
| ASSERT_SINGLE_OWNER
|
| RETURN_IF_ABANDONED
|
| - SkASSERT(!origPath.isEmpty());
|
| + SkASSERT(!path.isEmpty());
|
|
|
| bool useCoverageAA = should_apply_coverage_aa(paint, fRenderTarget.get());
|
| constexpr bool kHasUserStencilSettings = false;
|
| @@ -976,14 +975,11 @@ void GrDrawContext::internalDrawPath(const GrClip& clip,
|
| useCoverageAA ? GrPathRendererChain::kColorAntiAlias_DrawType
|
| : GrPathRendererChain::kColor_DrawType;
|
|
|
| - SkTLazy<SkPath> tmpPath;
|
| - SkTLazy<GrStyle> tmpStyle;
|
| -
|
| + GrShape shape(path, style);
|
| GrPathRenderer::CanDrawPathArgs canDrawArgs;
|
| canDrawArgs.fShaderCaps = fDrawingManager->getContext()->caps()->shaderCaps();
|
| canDrawArgs.fViewMatrix = &viewMatrix;
|
| - canDrawArgs.fPath = &origPath;
|
| - canDrawArgs.fStyle = &origStyle;
|
| + canDrawArgs.fShape = &shape;
|
| canDrawArgs.fAntiAlias = useCoverageAA;
|
| canDrawArgs.fHasUserStencilSettings = kHasUserStencilSettings;
|
| canDrawArgs.fIsStencilBufferMSAA = isStencilBufferMSAA;
|
| @@ -992,55 +988,26 @@ void GrDrawContext::internalDrawPath(const GrClip& clip,
|
| GrPathRenderer* pr = fDrawingManager->getPathRenderer(canDrawArgs, false, type);
|
| SkScalar styleScale = GrStyle::MatrixToScaleFactor(viewMatrix);
|
|
|
| - if (!pr && canDrawArgs.fStyle->pathEffect()) {
|
| + if (!pr && shape.style().pathEffect()) {
|
| // It didn't work above, so try again with the path effect applied.
|
| - SkStrokeRec rec(SkStrokeRec::kFill_InitStyle);
|
| - if (!canDrawArgs.fStyle->applyPathEffectToPath(tmpPath.init(), &rec, *canDrawArgs.fPath,
|
| - styleScale)) {
|
| - GrStyle noPathEffect(canDrawArgs.fStyle->strokeRec(), nullptr);
|
| - this->internalDrawPath(clip, paint, viewMatrix, *canDrawArgs.fPath, noPathEffect);
|
| - return;
|
| - }
|
| - tmpStyle.init(rec, nullptr);
|
| - canDrawArgs.fPath = tmpPath.get();
|
| - canDrawArgs.fStyle = tmpStyle.get();
|
| - if (canDrawArgs.fPath->isEmpty()) {
|
| + shape = shape.applyStyle(GrStyle::Apply::kPathEffectOnly, styleScale);
|
| + if (shape.isEmpty()) {
|
| return;
|
| }
|
| -
|
| pr = fDrawingManager->getPathRenderer(canDrawArgs, false, type);
|
| }
|
| if (!pr) {
|
| - SkASSERT(!canDrawArgs.fStyle->pathEffect());
|
| - if (canDrawArgs.fStyle->strokeRec().needToApply()) {
|
| - if (!tmpPath.isValid()) {
|
| - tmpPath.init();
|
| - }
|
| - // It didn't work above, so try again by applying the stroke to the geometry.
|
| - SkStrokeRec::InitStyle fillOrHairline;
|
| - if (!canDrawArgs.fStyle->applyToPath(tmpPath.get(), &fillOrHairline,
|
| - *canDrawArgs.fPath, styleScale)) {
|
| + if (shape.style().applies()) {
|
| + shape = shape.applyStyle(GrStyle::Apply::kPathEffectAndStrokeRec, styleScale);
|
| + if (shape.isEmpty()) {
|
| return;
|
| }
|
| - if (!tmpStyle.isValid()) {
|
| - tmpStyle.init(fillOrHairline);
|
| - } else {
|
| - tmpStyle.get()->resetToInitStyle(fillOrHairline);
|
| - }
|
| - canDrawArgs.fPath = tmpPath.get();
|
| - canDrawArgs.fStyle = tmpStyle.get();
|
| - if (canDrawArgs.fPath->isEmpty()) {
|
| - return;
|
| - }
|
| -
|
| - pr = fDrawingManager->getPathRenderer(canDrawArgs, false, type);
|
| }
|
| -
|
| // This time, allow SW renderer
|
| pr = fDrawingManager->getPathRenderer(canDrawArgs, true, type);
|
| }
|
|
|
| - if (nullptr == pr) {
|
| + if (!pr) {
|
| #ifdef SK_DEBUG
|
| SkDebugf("Unable to find path renderer compatible with path.\n");
|
| #endif
|
| @@ -1055,8 +1022,7 @@ void GrDrawContext::internalDrawPath(const GrClip& clip,
|
| args.fClip = &clip;
|
| args.fColor = paint.getColor();
|
| args.fViewMatrix = &viewMatrix;
|
| - args.fPath = canDrawArgs.fPath;
|
| - args.fStyle = canDrawArgs.fStyle;
|
| + args.fShape = canDrawArgs.fShape;
|
| args.fAntiAlias = useCoverageAA;
|
| args.fGammaCorrect = this->isGammaCorrect();
|
| pr->drawPath(args);
|
|
|