xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrFixedClip.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2016 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 GrFixedClip_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define GrFixedClip_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRect.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/base/SkAssert.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrClip.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrScissorState.h"
15*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrWindowRectsState.h"
16*c8dee2aaSAndroid Build Coastguard Worker 
17*c8dee2aaSAndroid Build Coastguard Worker class GrAppliedHardClip;
18*c8dee2aaSAndroid Build Coastguard Worker class GrWindowRectangles;
19*c8dee2aaSAndroid Build Coastguard Worker enum class GrAA : bool;
20*c8dee2aaSAndroid Build Coastguard Worker struct SkISize;
21*c8dee2aaSAndroid Build Coastguard Worker 
22*c8dee2aaSAndroid Build Coastguard Worker /**
23*c8dee2aaSAndroid Build Coastguard Worker  * Implements GrHardClip with scissor and window rectangles.
24*c8dee2aaSAndroid Build Coastguard Worker  */
25*c8dee2aaSAndroid Build Coastguard Worker class GrFixedClip final : public GrHardClip {
26*c8dee2aaSAndroid Build Coastguard Worker public:
GrFixedClip(const SkISize & rtDims)27*c8dee2aaSAndroid Build Coastguard Worker     explicit GrFixedClip(const SkISize& rtDims) : fScissorState(rtDims) {}
GrFixedClip(const SkISize & rtDims,const SkIRect & scissorRect)28*c8dee2aaSAndroid Build Coastguard Worker     GrFixedClip(const SkISize& rtDims, const SkIRect& scissorRect)
29*c8dee2aaSAndroid Build Coastguard Worker             : GrFixedClip(rtDims) {
30*c8dee2aaSAndroid Build Coastguard Worker         SkAssertResult(fScissorState.set(scissorRect));
31*c8dee2aaSAndroid Build Coastguard Worker     }
32*c8dee2aaSAndroid Build Coastguard Worker 
scissorState()33*c8dee2aaSAndroid Build Coastguard Worker     const GrScissorState& scissorState() const { return fScissorState; }
scissorEnabled()34*c8dee2aaSAndroid Build Coastguard Worker     bool scissorEnabled() const { return fScissorState.enabled(); }
35*c8dee2aaSAndroid Build Coastguard Worker     // Returns the scissor rect or rt bounds if the scissor test is not enabled.
scissorRect()36*c8dee2aaSAndroid Build Coastguard Worker     const SkIRect& scissorRect() const { return fScissorState.rect(); }
37*c8dee2aaSAndroid Build Coastguard Worker 
disableScissor()38*c8dee2aaSAndroid Build Coastguard Worker     void disableScissor() { fScissorState.setDisabled(); }
39*c8dee2aaSAndroid Build Coastguard Worker 
setScissor(const SkIRect & irect)40*c8dee2aaSAndroid Build Coastguard Worker     [[nodiscard]] bool setScissor(const SkIRect& irect) {
41*c8dee2aaSAndroid Build Coastguard Worker         return fScissorState.set(irect);
42*c8dee2aaSAndroid Build Coastguard Worker     }
intersect(const SkIRect & irect)43*c8dee2aaSAndroid Build Coastguard Worker     [[nodiscard]] bool intersect(const SkIRect& irect) {
44*c8dee2aaSAndroid Build Coastguard Worker         return fScissorState.intersect(irect);
45*c8dee2aaSAndroid Build Coastguard Worker     }
46*c8dee2aaSAndroid Build Coastguard Worker 
windowRectsState()47*c8dee2aaSAndroid Build Coastguard Worker     const GrWindowRectsState& windowRectsState() const { return fWindowRectsState; }
hasWindowRectangles()48*c8dee2aaSAndroid Build Coastguard Worker     bool hasWindowRectangles() const { return fWindowRectsState.enabled(); }
49*c8dee2aaSAndroid Build Coastguard Worker 
disableWindowRectangles()50*c8dee2aaSAndroid Build Coastguard Worker     void disableWindowRectangles() { fWindowRectsState.setDisabled(); }
51*c8dee2aaSAndroid Build Coastguard Worker 
setWindowRectangles(const GrWindowRectangles & windows,GrWindowRectsState::Mode mode)52*c8dee2aaSAndroid Build Coastguard Worker     void setWindowRectangles(const GrWindowRectangles& windows, GrWindowRectsState::Mode mode) {
53*c8dee2aaSAndroid Build Coastguard Worker         fWindowRectsState.set(windows, mode);
54*c8dee2aaSAndroid Build Coastguard Worker     }
55*c8dee2aaSAndroid Build Coastguard Worker 
56*c8dee2aaSAndroid Build Coastguard Worker     SkIRect getConservativeBounds() const final;
57*c8dee2aaSAndroid Build Coastguard Worker     Effect apply(GrAppliedHardClip*, SkIRect*) const final;
58*c8dee2aaSAndroid Build Coastguard Worker     PreClipResult preApply(const SkRect& drawBounds, GrAA aa) const final;
59*c8dee2aaSAndroid Build Coastguard Worker 
60*c8dee2aaSAndroid Build Coastguard Worker private:
61*c8dee2aaSAndroid Build Coastguard Worker     GrScissorState       fScissorState;
62*c8dee2aaSAndroid Build Coastguard Worker     GrWindowRectsState   fWindowRectsState;
63*c8dee2aaSAndroid Build Coastguard Worker };
64*c8dee2aaSAndroid Build Coastguard Worker 
65*c8dee2aaSAndroid Build Coastguard Worker #endif
66