• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google Inc.
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef GrSimpleMeshDrawOpHelperWithStencil_DEFINED
9 #define GrSimpleMeshDrawOpHelperWithStencil_DEFINED
10 
11 #include "src/gpu/ops/GrSimpleMeshDrawOpHelper.h"
12 
13 /**
14  * This class extends GrSimpleMeshDrawOpHelper to support an optional GrUserStencilSettings. This
15  * uses private inheritance because it non-virtually overrides methods in the base class and should
16  * never be used with a GrSimpleMeshDrawOpHelper pointer or reference.
17  */
18 class GrSimpleMeshDrawOpHelperWithStencil : private GrSimpleMeshDrawOpHelper {
19 public:
20     using InputFlags = GrSimpleMeshDrawOpHelper::InputFlags;
21 
22     using GrSimpleMeshDrawOpHelper::visitProxies;
23     using GrSimpleMeshDrawOpHelper::createPipeline;
24 
25     GrProgramInfo* createProgramInfoWithStencil(const GrCaps*,
26                                                 SkArenaAlloc*,
27                                                 const GrSurfaceProxyView& writeView,
28                                                 bool usesMSAASurface,
29                                                 GrAppliedClip&&,
30                                                 const GrDstProxyView&,
31                                                 GrGeometryProcessor*,
32                                                 GrPrimitiveType,
33                                                 GrXferBarrierFlags renderPassXferBarriers,
34                                                 GrLoadOp colorLoadOp);
35 
36     // using declarations can't be templated, so this is a pass through function instead.
37     template <typename Op, typename... OpArgs>
FactoryHelper(GrRecordingContext * context,GrPaint && paint,OpArgs...opArgs)38     static GrOp::Owner FactoryHelper(GrRecordingContext* context, GrPaint&& paint,
39                                      OpArgs... opArgs) {
40         return GrSimpleMeshDrawOpHelper::FactoryHelper<Op, OpArgs...>(
41                 context, std::move(paint), std::forward<OpArgs>(opArgs)...);
42     }
43 
44     GrSimpleMeshDrawOpHelperWithStencil(GrProcessorSet*, GrAAType, const GrUserStencilSettings*,
45                                         InputFlags = InputFlags::kNone);
46 
47     GrDrawOp::FixedFunctionFlags fixedFunctionFlags() const;
48 
finalizeProcessors(const GrCaps & caps,const GrAppliedClip * clip,GrClampType clampType,GrProcessorAnalysisCoverage geometryCoverage,GrProcessorAnalysisColor * geometryColor)49     GrProcessorSet::Analysis finalizeProcessors(const GrCaps& caps, const GrAppliedClip* clip,
50                                                 GrClampType clampType,
51                                                 GrProcessorAnalysisCoverage geometryCoverage,
52                                                 GrProcessorAnalysisColor* geometryColor) {
53         return this->INHERITED::finalizeProcessors(caps, clip, fStencilSettings, clampType,
54                                                    geometryCoverage, geometryColor);
55     }
56 
57     GrProcessorSet::Analysis finalizeProcessors(const GrCaps&, const GrAppliedClip*, GrClampType,
58                                                 GrProcessorAnalysisCoverage geometryCoverage,
59                                                 SkPMColor4f* geometryColor, bool* wideColor);
60 
61     using GrSimpleMeshDrawOpHelper::aaType;
62     using GrSimpleMeshDrawOpHelper::setAAType;
63     using GrSimpleMeshDrawOpHelper::isTrivial;
64     using GrSimpleMeshDrawOpHelper::usesLocalCoords;
65     using GrSimpleMeshDrawOpHelper::compatibleWithCoverageAsAlpha;
66     using GrSimpleMeshDrawOpHelper::detachProcessorSet;
67     using GrSimpleMeshDrawOpHelper::pipelineFlags;
68 
69     bool isCompatible(const GrSimpleMeshDrawOpHelperWithStencil& that, const GrCaps&,
70                       const SkRect& thisBounds, const SkRect& thatBounds,
71                       bool ignoreAAType = false) const;
72 
73 #if GR_TEST_UTILS
74     SkString dumpInfo() const;
75 #endif
76 
stencilSettings()77     const GrUserStencilSettings* stencilSettings() const { return fStencilSettings; }
78 
79 private:
80     const GrUserStencilSettings* fStencilSettings;
81     using INHERITED = GrSimpleMeshDrawOpHelper;
82 };
83 
84 #endif
85