123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- /*
- * Copyright 2015 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef GrDrawPathOp_DEFINED
- #define GrDrawPathOp_DEFINED
- #include "src/gpu/GrOpFlushState.h"
- #include "src/gpu/GrPath.h"
- #include "src/gpu/GrPathProcessor.h"
- #include "src/gpu/GrPathRendering.h"
- #include "src/gpu/GrProcessorSet.h"
- #include "src/gpu/GrStencilSettings.h"
- #include "src/gpu/ops/GrDrawOp.h"
- class GrPaint;
- class GrRecordingContext;
- class GrDrawPathOpBase : public GrDrawOp {
- protected:
- GrDrawPathOpBase(uint32_t classID, const SkMatrix& viewMatrix, GrPaint&&,
- GrPathRendering::FillType, GrAA);
- FixedFunctionFlags fixedFunctionFlags() const override {
- return (fDoAA)
- ? FixedFunctionFlags::kUsesHWAA | FixedFunctionFlags::kUsesStencil
- : FixedFunctionFlags::kUsesStencil;
- }
- GrProcessorSet::Analysis finalize(
- const GrCaps& caps, const GrAppliedClip* clip, bool hasMixedSampledCoverage,
- GrClampType clampType) override {
- return this->doProcessorAnalysis(caps, clip, hasMixedSampledCoverage, clampType);
- }
- void visitProxies(const VisitProxyFunc& func) const override {
- fProcessorSet.visitProxies(func);
- }
- protected:
- const SkMatrix& viewMatrix() const { return fViewMatrix; }
- const SkPMColor4f& color() const { return fInputColor; }
- GrPathRendering::FillType fillType() const { return fFillType; }
- const GrProcessorSet& processors() const { return fProcessorSet; }
- GrProcessorSet detachProcessors() { return std::move(fProcessorSet); }
- inline GrPipeline::InitArgs pipelineInitArgs(const GrOpFlushState&);
- const GrProcessorSet::Analysis& doProcessorAnalysis(
- const GrCaps&, const GrAppliedClip*, bool hasMixedSampledCoverage, GrClampType);
- const GrProcessorSet::Analysis& processorAnalysis() const {
- SkASSERT(fAnalysis.isInitialized());
- return fAnalysis;
- }
- private:
- void onPrepare(GrOpFlushState*) final {}
- SkMatrix fViewMatrix;
- SkPMColor4f fInputColor;
- GrProcessorSet::Analysis fAnalysis;
- GrPathRendering::FillType fFillType;
- bool fDoAA;
- GrProcessorSet fProcessorSet;
- typedef GrDrawOp INHERITED;
- };
- class GrDrawPathOp final : public GrDrawPathOpBase {
- public:
- DEFINE_OP_CLASS_ID
- static std::unique_ptr<GrDrawOp> Make(
- GrRecordingContext*, const SkMatrix& viewMatrix, GrPaint&&, GrAA, GrPath*);
- const char* name() const override { return "DrawPath"; }
- #ifdef SK_DEBUG
- SkString dumpInfo() const override;
- #endif
- private:
- friend class GrOpMemoryPool; // for ctor
- GrDrawPathOp(const SkMatrix& viewMatrix, GrPaint&& paint, GrAA aa, const GrPath* path)
- : GrDrawPathOpBase(
- ClassID(), viewMatrix, std::move(paint), path->getFillType(), aa)
- , fPath(path) {
- this->setTransformedBounds(path->getBounds(), viewMatrix, HasAABloat::kNo, IsZeroArea::kNo);
- }
- void onExecute(GrOpFlushState*, const SkRect& chainBounds) override;
- GrPendingIOResource<const GrPath, kRead_GrIOType> fPath;
- typedef GrDrawPathOpBase INHERITED;
- };
- #endif
|