aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrPathRenderer.cpp
diff options
context:
space:
mode:
authorGravatar Brian Salomon <bsalomon@google.com>2018-07-10 10:07:31 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2018-07-10 14:56:05 +0000
commit653f42f72a1ccb4a5d86cdf128993cbb5c9a310b (patch)
tree8f3f322166c9b8718f1467007b09a230d98bb4ec /src/gpu/GrPathRenderer.cpp
parentc098f2bf2fa37ca3eaddc3827d1dcad81f26181c (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.cpp102
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);
+}