diff options
author | Brian Salomon <bsalomon@google.com> | 2018-07-10 10:07:31 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2018-07-10 14:56:05 +0000 |
commit | 653f42f72a1ccb4a5d86cdf128993cbb5c9a310b (patch) | |
tree | 8f3f322166c9b8718f1467007b09a230d98bb4ec /src/gpu/GrPathRenderer.cpp | |
parent | c098f2bf2fa37ca3eaddc3827d1dcad81f26181c (diff) |
Deinline some GrPathRenderer method and one GrDrawingMananger method.
Removes circular dependencies from coming change.
Some IWYU fallout from removing #includes from GrPathRenderer.h and
GrDrawingManager.h
Bug: skia:
Change-Id: Ice377538e6d64b6a74a59e6140e1de9a58ab99bf
Reviewed-on: https://skia-review.googlesource.com/140181
Commit-Queue: Brian Salomon <bsalomon@google.com>
Auto-Submit: Brian Salomon <bsalomon@google.com>
Reviewed-by: Greg Daniel <egdaniel@google.com>
Diffstat (limited to 'src/gpu/GrPathRenderer.cpp')
-rw-r--r-- | src/gpu/GrPathRenderer.cpp | 102 |
1 files changed, 101 insertions, 1 deletions
diff --git a/src/gpu/GrPathRenderer.cpp b/src/gpu/GrPathRenderer.cpp index 1f53e84057..6c7bfed2d2 100644 --- a/src/gpu/GrPathRenderer.cpp +++ b/src/gpu/GrPathRenderer.cpp @@ -6,9 +6,84 @@ */ #include "GrPathRenderer.h" +#include "GrCaps.h" +#include "GrContextPriv.h" +#include "GrPaint.h" +#include "GrRenderTargetContext.h" +#include "GrShape.h" +#include "GrUserStencilSettings.h" +#include "SkDrawProcs.h" -GrPathRenderer::GrPathRenderer() { +#ifdef SK_DEBUG +void GrPathRenderer::StencilPathArgs::validate() const { + SkASSERT(fContext); + SkASSERT(fRenderTargetContext); + SkASSERT(fClipConservativeBounds); + SkASSERT(fViewMatrix); + SkASSERT(fShape); + SkASSERT(fShape->style().isSimpleFill()); + SkASSERT(GrAAType::kCoverage != fAAType); + SkPath path; + fShape->asPath(&path); + SkASSERT(!path.isInverseFillType()); } +#endif + +////////////////////////////////////////////////////////////////////////////// + +GrPathRenderer::GrPathRenderer() {} + +GrPathRenderer::StencilSupport GrPathRenderer::getStencilSupport(const GrShape& shape) const { + SkDEBUGCODE(SkPath path;) + SkDEBUGCODE(shape.asPath(&path);) + SkASSERT(shape.style().isSimpleFill()); + SkASSERT(!path.isInverseFillType()); + return this->onGetStencilSupport(shape); +} + +bool GrPathRenderer::drawPath(const DrawPathArgs& args) { +#ifdef SK_DEBUG + args.validate(); + CanDrawPathArgs canArgs; + canArgs.fCaps = args.fContext->contextPriv().caps(); + canArgs.fClipConservativeBounds = args.fClipConservativeBounds; + canArgs.fViewMatrix = args.fViewMatrix; + canArgs.fShape = args.fShape; + canArgs.fAAType = args.fAAType; + canArgs.validate(); + + canArgs.fHasUserStencilSettings = !args.fUserStencilSettings->isUnused(); + SkASSERT(!(canArgs.fAAType == GrAAType::kMSAA && + GrFSAAType::kUnifiedMSAA != args.fRenderTargetContext->fsaaType())); + SkASSERT(!(canArgs.fAAType == GrAAType::kMixedSamples && + GrFSAAType::kMixedSamples != args.fRenderTargetContext->fsaaType())); + SkASSERT(CanDrawPath::kNo != this->canDrawPath(canArgs)); + if (!args.fUserStencilSettings->isUnused()) { + SkPath path; + args.fShape->asPath(&path); + SkASSERT(args.fShape->style().isSimpleFill()); + SkASSERT(kNoRestriction_StencilSupport == this->getStencilSupport(*args.fShape)); + } +#endif + return this->onDrawPath(args); +} + +bool GrPathRenderer::IsStrokeHairlineOrEquivalent(const GrStyle& style, const SkMatrix& matrix, + SkScalar* outCoverage) { + if (style.pathEffect()) { + return false; + } + const SkStrokeRec& stroke = style.strokeRec(); + if (stroke.isHairlineStyle()) { + if (outCoverage) { + *outCoverage = SK_Scalar1; + } + return true; + } + return stroke.getStyle() == SkStrokeRec::kStroke_Style && + SkDrawTreatAAStrokeAsHairline(stroke.getWidth(), matrix, outCoverage); +} + void GrPathRenderer::GetPathDevBounds(const SkPath& path, int devW, int devH, @@ -21,3 +96,28 @@ void GrPathRenderer::GetPathDevBounds(const SkPath& path, *bounds = path.getBounds(); matrix.mapRect(bounds); } + +void GrPathRenderer::onStencilPath(const StencilPathArgs& args) { + static constexpr GrUserStencilSettings kIncrementStencil( + GrUserStencilSettings::StaticInit< + 0xffff, + GrUserStencilTest::kAlways, + 0xffff, + GrUserStencilOp::kReplace, + GrUserStencilOp::kReplace, + 0xffff>() + ); + + GrPaint paint; + DrawPathArgs drawArgs{args.fContext, + std::move(paint), + &kIncrementStencil, + args.fRenderTargetContext, + nullptr, // clip + args.fClipConservativeBounds, + args.fViewMatrix, + args.fShape, + args.fAAType, + false}; + this->drawPath(drawArgs); +} |