| /* | |
| * 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 GrDrawOp_DEFINED | |
| #define GrDrawOp_DEFINED | |
| #include <functional> | |
| #include "GrDeferredUpload.h" | |
| #include "GrOp.h" | |
| #include "GrPipeline.h" | |
| class GrAppliedClip; | |
| /** | |
| * Base class for GrOps that draw. These ops can draw into an op list's GrRenderTarget. | |
| */ | |
| class GrDrawOp : public GrOp { | |
| public: | |
| GrDrawOp(uint32_t classID) : INHERITED(classID) {} | |
| /** | |
| * This information is required to determine how to compute a GrAppliedClip from a GrClip for | |
| * this op. | |
| */ | |
| enum class FixedFunctionFlags : uint32_t { | |
| kNone = 0x0, | |
| /** Indices that the op will enable MSAA or mixed samples rendering. */ | |
| kUsesHWAA = 0x1, | |
| /** Indices that the op reads and/or writes the stencil buffer */ | |
| kUsesStencil = 0x2, | |
| }; | |
| GR_DECL_BITFIELD_CLASS_OPS_FRIENDS(FixedFunctionFlags); | |
| virtual FixedFunctionFlags fixedFunctionFlags() const = 0; | |
| /** | |
| * This is called after the GrAppliedClip has been computed and just prior to recording the op | |
| * or combining it with a previously recorded op. The op should convert any proxies or resources | |
| * it owns to "pending io" status so that resource allocation can be more optimal. Additionally, | |
| * at this time the op must report whether a copy of the destination (or destination texture | |
| * itself) needs to be provided to the GrXferProcessor when this op executes. | |
| */ | |
| virtual GrProcessorSet::Analysis finalize(const GrCaps&, const GrAppliedClip*, GrFSAAType, | |
| GrClampType) = 0; | |
| #ifdef SK_DEBUG | |
| bool fAddDrawOpCalled = false; | |
| void validate() const override { | |
| SkASSERT(fAddDrawOpCalled); | |
| } | |
| #endif | |
| private: | |
| typedef GrOp INHERITED; | |
| }; | |
| GR_MAKE_BITFIELD_CLASS_OPS(GrDrawOp::FixedFunctionFlags); | |
| #endif |