12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- * 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 "src/gpu/GrAuditTrail.h"
- #include "src/gpu/GrGpu.h"
- #include "src/gpu/GrRenderTargetContext.h"
- #include "src/gpu/geometry/GrShape.h"
- #include "src/gpu/ops/GrDashLinePathRenderer.h"
- #include "src/gpu/ops/GrDashOp.h"
- #include "src/gpu/ops/GrMeshDrawOp.h"
- GrPathRenderer::CanDrawPath
- GrDashLinePathRenderer::onCanDrawPath(const CanDrawPathArgs& args) const {
- SkPoint pts[2];
- bool inverted;
- if (args.fShape->style().isDashed() && args.fShape->asLine(pts, &inverted)) {
- // We should never have an inverse dashed case.
- SkASSERT(!inverted);
- if (!GrDashOp::CanDrawDashLine(pts, args.fShape->style(), *args.fViewMatrix)) {
- return CanDrawPath::kNo;
- }
- return CanDrawPath::kYes;
- }
- return CanDrawPath::kNo;
- }
- bool GrDashLinePathRenderer::onDrawPath(const DrawPathArgs& args) {
- GR_AUDIT_TRAIL_AUTO_FRAME(args.fRenderTargetContext->auditTrail(),
- "GrDashLinePathRenderer::onDrawPath");
- GrDashOp::AAMode aaMode;
- switch (args.fAAType) {
- case GrAAType::kNone:
- aaMode = GrDashOp::AAMode::kNone;
- 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;
- case GrAAType::kCoverage:
- aaMode = GrDashOp::AAMode::kCoverage;
- break;
- }
- SkPoint pts[2];
- SkAssertResult(args.fShape->asLine(pts, nullptr));
- std::unique_ptr<GrDrawOp> op =
- GrDashOp::MakeDashLineOp(args.fContext, std::move(args.fPaint), *args.fViewMatrix, pts,
- aaMode, args.fShape->style(), args.fUserStencilSettings);
- if (!op) {
- return false;
- }
- args.fRenderTargetContext->addDrawOp(*args.fClip, std::move(op));
- return true;
- }
|