OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2010 Google Inc. | 2 * Copyright 2010 Google Inc. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
6 */ | 6 */ |
7 | 7 |
8 #ifndef GrClip_DEFINED | 8 #ifndef GrClip_DEFINED |
9 #define GrClip_DEFINED | 9 #define GrClip_DEFINED |
10 | 10 |
11 #include "GrFragmentProcessor.h" | 11 #include "SkRect.h" |
12 #include "GrTypesPriv.h" | 12 #include "SkRRect.h" |
13 | 13 |
14 class GrAppliedClip; | 14 class GrAppliedClip; |
| 15 class GrContext; |
15 class GrDrawContext; | 16 class GrDrawContext; |
16 | 17 |
17 /** | 18 /** |
18 * GrClip is an abstract base class for applying a clip. It constructs a clip ma
sk if necessary, and | 19 * GrClip is an abstract base class for applying a clip. It constructs a clip ma
sk if necessary, and |
19 * fills out a GrAppliedClip instructing the caller on how to set up the draw st
ate. | 20 * fills out a GrAppliedClip instructing the caller on how to set up the draw st
ate. |
20 */ | 21 */ |
21 class GrClip { | 22 class GrClip { |
22 public: | 23 public: |
23 virtual bool quickContains(const SkRect&) const = 0; | 24 virtual bool quickContains(const SkRect&) const = 0; |
24 virtual bool quickContains(const SkRRect& rrect) const { | 25 virtual bool quickContains(const SkRRect& rrect) const { |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
101 SkScalarAbs(SkScalarRoundToScalar(rect.fRight) - rect.fRight) <=
kBoundsTolerance && | 102 SkScalarAbs(SkScalarRoundToScalar(rect.fRight) - rect.fRight) <=
kBoundsTolerance && |
102 SkScalarAbs(SkScalarRoundToScalar(rect.fBottom) - rect.fBottom) <
= kBoundsTolerance; | 103 SkScalarAbs(SkScalarRoundToScalar(rect.fBottom) - rect.fBottom) <
= kBoundsTolerance; |
103 } | 104 } |
104 }; | 105 }; |
105 | 106 |
106 /** | 107 /** |
107 * Specialized implementation for no clip. | 108 * Specialized implementation for no clip. |
108 */ | 109 */ |
109 class GrNoClip final : public GrClip { | 110 class GrNoClip final : public GrClip { |
110 private: | 111 private: |
111 bool quickContains(const SkRect&) const final { return true; } | 112 bool quickContains(const SkRect&) const final { |
| 113 return true; |
| 114 } |
112 void getConservativeBounds(int width, int height, SkIRect* devResult, | 115 void getConservativeBounds(int width, int height, SkIRect* devResult, |
113 bool* isIntersectionOfRects) const final; | 116 bool* isIntersectionOfRects) const final { |
114 bool apply(GrContext*, GrDrawContext*, bool, bool, GrAppliedClip*) const fin
al { return true; } | 117 devResult->setXYWH(0, 0, width, height); |
115 }; | 118 if (isIntersectionOfRects) { |
116 | 119 *isIntersectionOfRects = true; |
117 /** | 120 } |
118 * GrFixedClip is a clip that can be represented by fixed-function hardware. It
never modifies the | |
119 * stencil buffer itself, but can be configured to use whatever clip is already
there. | |
120 */ | |
121 class GrFixedClip final : public GrClip { | |
122 public: | |
123 GrFixedClip() : fHasStencilClip(false) {} | |
124 GrFixedClip(const SkIRect& scissorRect) | |
125 : fScissorState(scissorRect) | |
126 , fHasStencilClip(false) {} | |
127 | |
128 void reset() { | |
129 fScissorState.setDisabled(); | |
130 fHasStencilClip = false; | |
131 } | 121 } |
132 | 122 bool apply(GrContext*, GrDrawContext*, bool, bool, GrAppliedClip*) const fin
al { |
133 void reset(const SkIRect& scissorRect) { | 123 return true; |
134 fScissorState.set(scissorRect); | |
135 fHasStencilClip = false; | |
136 } | 124 } |
137 | |
138 void enableStencilClip() { fHasStencilClip = true; } | |
139 void disableStencilClip() { fHasStencilClip = false; } | |
140 | |
141 bool quickContains(const SkRect&) const final; | |
142 void getConservativeBounds(int width, int height, SkIRect* devResult, | |
143 bool* isIntersectionOfRects) const final; | |
144 | |
145 private: | |
146 bool apply(GrContext*, GrDrawContext*, bool useHWAA, bool hasUserStencilSett
ings, | |
147 GrAppliedClip* out) const final; | |
148 | |
149 GrScissorState fScissorState; | |
150 bool fHasStencilClip; | |
151 }; | 125 }; |
152 | 126 |
153 #endif | 127 #endif |
OLD | NEW |