move src/gpu/batches -> src/gpu/ops
Change-Id: I6410eae41f051ce38bef6f38d670924c3483c325
Reviewed-on: https://skia-review.googlesource.com/6163
Commit-Queue: Brian Salomon <bsalomon@google.com>
Reviewed-by: Brian Osman <brianosman@google.com>
diff --git a/src/gpu/ops/GrDashLinePathRenderer.cpp b/src/gpu/ops/GrDashLinePathRenderer.cpp
new file mode 100644
index 0000000..10e4342
--- /dev/null
+++ b/src/gpu/ops/GrDashLinePathRenderer.cpp
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2015 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#include "GrDashLinePathRenderer.h"
+
+#include "GrAuditTrail.h"
+#include "GrGpu.h"
+#include "GrPipelineBuilder.h"
+#include "ops/GrDashOp.h"
+
+bool GrDashLinePathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const {
+ SkPoint pts[2];
+ bool inverted;
+ if (args.fShape->style().isDashed() && args.fShape->asLine(pts, &inverted)) {
+ if (args.fAAType == GrAAType::kMixedSamples) {
+ return false;
+ }
+ // We should never have an inverse dashed case.
+ SkASSERT(!inverted);
+ return GrDashOp::CanDrawDashLine(pts, args.fShape->style(), *args.fViewMatrix);
+ }
+ return false;
+}
+
+bool GrDashLinePathRenderer::onDrawPath(const DrawPathArgs& args) {
+ GR_AUDIT_TRAIL_AUTO_FRAME(args.fRenderTargetContext->auditTrail(),
+ "GrDashLinePathRenderer::onDrawPath");
+ GrDashOp::AAMode aaMode = GrDashOp::AAMode::kNone;
+ switch (args.fAAType) {
+ case GrAAType::kNone:
+ break;
+ case GrAAType::kCoverage:
+ case GrAAType::kMixedSamples:
+ aaMode = GrDashOp::AAMode::kCoverage;
+ break;
+ case GrAAType::kMSAA:
+ // In this mode we will use aa between dashes but the outer border uses MSAA. Otherwise,
+ // we can wind up with external edges antialiased and internal edges unantialiased.
+ aaMode = GrDashOp::AAMode::kCoverageWithMSAA;
+ break;
+ }
+ SkPoint pts[2];
+ SkAssertResult(args.fShape->asLine(pts, nullptr));
+ sk_sp<GrDrawOp> op = GrDashOp::MakeDashLineOp(
+ args.fPaint->getColor(), *args.fViewMatrix, pts, aaMode, args.fShape->style());
+ if (!op) {
+ return false;
+ }
+
+ GrPipelineBuilder pipelineBuilder(*args.fPaint, args.fAAType);
+ pipelineBuilder.setUserStencil(args.fUserStencilSettings);
+
+ args.fRenderTargetContext->addDrawOp(pipelineBuilder, *args.fClip, std::move(op));
+ return true;
+}