xref: /aosp_15_r20/external/skia/src/gpu/ganesh/ops/FillRectOp.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2018 Google Inc.
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #ifndef FillRectOp_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define FillRectOp_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/ops/GrOp.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/ops/GrSimpleMeshDrawOpHelper.h"
13*c8dee2aaSAndroid Build Coastguard Worker 
14*c8dee2aaSAndroid Build Coastguard Worker #include <cstdint>
15*c8dee2aaSAndroid Build Coastguard Worker 
16*c8dee2aaSAndroid Build Coastguard Worker class GrClip;
17*c8dee2aaSAndroid Build Coastguard Worker class GrPaint;
18*c8dee2aaSAndroid Build Coastguard Worker class GrRecordingContext;
19*c8dee2aaSAndroid Build Coastguard Worker class SkMatrix;
20*c8dee2aaSAndroid Build Coastguard Worker enum class GrAAType : unsigned int;
21*c8dee2aaSAndroid Build Coastguard Worker struct DrawQuad;
22*c8dee2aaSAndroid Build Coastguard Worker struct GrQuadSetEntry;
23*c8dee2aaSAndroid Build Coastguard Worker struct GrUserStencilSettings;
24*c8dee2aaSAndroid Build Coastguard Worker struct SkRect;
25*c8dee2aaSAndroid Build Coastguard Worker 
26*c8dee2aaSAndroid Build Coastguard Worker namespace skgpu::ganesh {
27*c8dee2aaSAndroid Build Coastguard Worker 
28*c8dee2aaSAndroid Build Coastguard Worker class SurfaceDrawContext;
29*c8dee2aaSAndroid Build Coastguard Worker 
30*c8dee2aaSAndroid Build Coastguard Worker /**
31*c8dee2aaSAndroid Build Coastguard Worker  * A set of factory functions for drawing filled rectangles either coverage-antialiased, or
32*c8dee2aaSAndroid Build Coastguard Worker  * non-antialiased. The non-antialiased ops can be used with MSAA. As with other GrDrawOp factories,
33*c8dee2aaSAndroid Build Coastguard Worker  * the GrPaint is only consumed by these methods if a valid op is returned. If null is returned then
34*c8dee2aaSAndroid Build Coastguard Worker  * the paint is unmodified and may still be used.
35*c8dee2aaSAndroid Build Coastguard Worker  */
36*c8dee2aaSAndroid Build Coastguard Worker class FillRectOp {
37*c8dee2aaSAndroid Build Coastguard Worker public:
38*c8dee2aaSAndroid Build Coastguard Worker     using InputFlags = GrSimpleMeshDrawOpHelper::InputFlags;
39*c8dee2aaSAndroid Build Coastguard Worker 
40*c8dee2aaSAndroid Build Coastguard Worker     static GrOp::Owner Make(GrRecordingContext*,
41*c8dee2aaSAndroid Build Coastguard Worker                             GrPaint&&,
42*c8dee2aaSAndroid Build Coastguard Worker                             GrAAType,
43*c8dee2aaSAndroid Build Coastguard Worker                             DrawQuad*,
44*c8dee2aaSAndroid Build Coastguard Worker                             const GrUserStencilSettings* = nullptr,
45*c8dee2aaSAndroid Build Coastguard Worker                             InputFlags = InputFlags::kNone);
46*c8dee2aaSAndroid Build Coastguard Worker 
47*c8dee2aaSAndroid Build Coastguard Worker     // Utility function to create a non-AA rect transformed by view. This is used commonly enough
48*c8dee2aaSAndroid Build Coastguard Worker     // in testing and GMs that manage ops without going through GrRTC that it's worth the
49*c8dee2aaSAndroid Build Coastguard Worker     // convenience.
50*c8dee2aaSAndroid Build Coastguard Worker     static GrOp::Owner MakeNonAARect(GrRecordingContext*,
51*c8dee2aaSAndroid Build Coastguard Worker                                      GrPaint&&,
52*c8dee2aaSAndroid Build Coastguard Worker                                      const SkMatrix& view,
53*c8dee2aaSAndroid Build Coastguard Worker                                      const SkRect&,
54*c8dee2aaSAndroid Build Coastguard Worker                                      const GrUserStencilSettings* = nullptr);
55*c8dee2aaSAndroid Build Coastguard Worker 
56*c8dee2aaSAndroid Build Coastguard Worker     // Bulk API for drawing quads with a single op
57*c8dee2aaSAndroid Build Coastguard Worker     // TODO(michaelludwig) - remove if the bulk API is not useful for SkiaRenderer
58*c8dee2aaSAndroid Build Coastguard Worker     static void AddFillRectOps(SurfaceDrawContext*,
59*c8dee2aaSAndroid Build Coastguard Worker                                const GrClip*,
60*c8dee2aaSAndroid Build Coastguard Worker                                GrRecordingContext*,
61*c8dee2aaSAndroid Build Coastguard Worker                                GrPaint&&,
62*c8dee2aaSAndroid Build Coastguard Worker                                GrAAType,
63*c8dee2aaSAndroid Build Coastguard Worker                                const SkMatrix& viewMatrix,
64*c8dee2aaSAndroid Build Coastguard Worker                                const GrQuadSetEntry quads[],
65*c8dee2aaSAndroid Build Coastguard Worker                                int quadCount,
66*c8dee2aaSAndroid Build Coastguard Worker                                const GrUserStencilSettings* = nullptr);
67*c8dee2aaSAndroid Build Coastguard Worker 
68*c8dee2aaSAndroid Build Coastguard Worker #if defined(GPU_TEST_UTILS)
69*c8dee2aaSAndroid Build Coastguard Worker     static uint32_t ClassID();
70*c8dee2aaSAndroid Build Coastguard Worker #endif
71*c8dee2aaSAndroid Build Coastguard Worker 
72*c8dee2aaSAndroid Build Coastguard Worker private:
73*c8dee2aaSAndroid Build Coastguard Worker     // Create a FillRectOp that uses as many quads as possible from 'quads' w/o exceeding
74*c8dee2aaSAndroid Build Coastguard Worker     // any index buffer size limits.
75*c8dee2aaSAndroid Build Coastguard Worker     static GrOp::Owner MakeOp(GrRecordingContext*,
76*c8dee2aaSAndroid Build Coastguard Worker                               GrPaint&&,
77*c8dee2aaSAndroid Build Coastguard Worker                               GrAAType,
78*c8dee2aaSAndroid Build Coastguard Worker                               const SkMatrix& viewMatrix,
79*c8dee2aaSAndroid Build Coastguard Worker                               const GrQuadSetEntry quads[],
80*c8dee2aaSAndroid Build Coastguard Worker                               int quadCount,
81*c8dee2aaSAndroid Build Coastguard Worker                               const GrUserStencilSettings*,
82*c8dee2aaSAndroid Build Coastguard Worker                               int* numConsumed);
83*c8dee2aaSAndroid Build Coastguard Worker };
84*c8dee2aaSAndroid Build Coastguard Worker 
85*c8dee2aaSAndroid Build Coastguard Worker }  // namespace skgpu::ganesh
86*c8dee2aaSAndroid Build Coastguard Worker 
87*c8dee2aaSAndroid Build Coastguard Worker #endif // FillRectOp_DEFINED
88