Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Side by Side Diff: src/gpu/effects/GrBezierEffect.h

Issue 815553003: Move ViewMatrix off of drawstate (Closed) Base URL: https://skia.googlesource.com/skia.git@remove-fragment-stage
Patch Set: more cleaning Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/gpu/GrStencilAndCoverTextContext.cpp ('k') | src/gpu/effects/GrBezierEffect.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2013 Google Inc. 2 * Copyright 2013 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 GrBezierEffect_DEFINED 8 #ifndef GrBezierEffect_DEFINED
9 #define GrBezierEffect_DEFINED 9 #define GrBezierEffect_DEFINED
10 10
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
52 * that the curves become much thinner and "ropey". If all that was ever rendere d 52 * that the curves become much thinner and "ropey". If all that was ever rendere d
53 * were "not too thin" curves and ellipses then 2nd order may have an advantage since 53 * were "not too thin" curves and ellipses then 2nd order may have an advantage since
54 * only one geometry would need to be rendered. However no benches were run comp aring 54 * only one geometry would need to be rendered. However no benches were run comp aring
55 * chopped first order and non chopped 2nd order. 55 * chopped first order and non chopped 2nd order.
56 */ 56 */
57 class GrGLConicEffect; 57 class GrGLConicEffect;
58 58
59 class GrConicEffect : public GrGeometryProcessor { 59 class GrConicEffect : public GrGeometryProcessor {
60 public: 60 public:
61 static GrGeometryProcessor* Create(GrColor color, 61 static GrGeometryProcessor* Create(GrColor color,
62 const SkMatrix& viewMatrix,
62 const GrPrimitiveEdgeType edgeType, 63 const GrPrimitiveEdgeType edgeType,
63 const GrDrawTargetCaps& caps, 64 const GrDrawTargetCaps& caps,
64 const SkMatrix& localMatrix, 65 const SkMatrix& localMatrix,
65 uint8_t coverage = 0xff) { 66 uint8_t coverage = 0xff) {
66 switch (edgeType) { 67 switch (edgeType) {
67 case kFillAA_GrProcessorEdgeType: 68 case kFillAA_GrProcessorEdgeType:
68 if (!caps.shaderDerivativeSupport()) { 69 if (!caps.shaderDerivativeSupport()) {
69 return NULL; 70 return NULL;
70 } 71 }
71 return SkNEW_ARGS(GrConicEffect, (color, coverage, kFillAA_GrPro cessorEdgeType, 72 return SkNEW_ARGS(GrConicEffect, (color, viewMatrix, coverage,
73 kFillAA_GrProcessorEdgeType,
72 localMatrix)); 74 localMatrix));
73 case kHairlineAA_GrProcessorEdgeType: 75 case kHairlineAA_GrProcessorEdgeType:
74 if (!caps.shaderDerivativeSupport()) { 76 if (!caps.shaderDerivativeSupport()) {
75 return NULL; 77 return NULL;
76 } 78 }
77 return SkNEW_ARGS(GrConicEffect, (color, coverage, 79 return SkNEW_ARGS(GrConicEffect, (color, viewMatrix, coverage,
78 kHairlineAA_GrProcessorEdgeTyp e, 80 kHairlineAA_GrProcessorEdgeTyp e,
79 localMatrix)); 81 localMatrix));
80 case kFillBW_GrProcessorEdgeType: 82 case kFillBW_GrProcessorEdgeType:
81 return SkNEW_ARGS(GrConicEffect, (color, coverage, kFillBW_GrPro cessorEdgeType, 83 return SkNEW_ARGS(GrConicEffect, (color, viewMatrix, coverage,
84 kFillBW_GrProcessorEdgeType,
82 localMatrix)); 85 localMatrix));
83 default: 86 default:
84 return NULL; 87 return NULL;
85 } 88 }
86 } 89 }
87 90
88 virtual ~GrConicEffect(); 91 virtual ~GrConicEffect();
89 92
90 virtual const char* name() const SK_OVERRIDE { return "Conic"; } 93 virtual const char* name() const SK_OVERRIDE { return "Conic"; }
91 94
92 inline const GrAttribute* inPosition() const { return fInPosition; } 95 inline const GrAttribute* inPosition() const { return fInPosition; }
93 inline const GrAttribute* inConicCoeffs() const { return fInConicCoeffs; } 96 inline const GrAttribute* inConicCoeffs() const { return fInConicCoeffs; }
94 inline bool isAntiAliased() const { return GrProcessorEdgeTypeIsAA(fEdgeType ); } 97 inline bool isAntiAliased() const { return GrProcessorEdgeTypeIsAA(fEdgeType ); }
95 inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); } 98 inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); }
96 inline GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 99 inline GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
97 100
98 virtual void getGLProcessorKey(const GrBatchTracker& bt, 101 virtual void getGLProcessorKey(const GrBatchTracker& bt,
99 const GrGLCaps& caps, 102 const GrGLCaps& caps,
100 GrProcessorKeyBuilder* b) const SK_OVERRIDE; 103 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
101 104
102 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE; 105 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE;
103 106
104 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE; 107 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
105 bool onCanMakeEqual(const GrBatchTracker&, 108 bool onCanMakeEqual(const GrBatchTracker&,
106 const GrGeometryProcessor&, 109 const GrGeometryProcessor&,
107 const GrBatchTracker&) const SK_OVERRIDE; 110 const GrBatchTracker&) const SK_OVERRIDE;
108 111
109 private: 112 private:
110 GrConicEffect(GrColor, uint8_t coverage, GrPrimitiveEdgeType, const SkMatrix & localMatrix); 113 GrConicEffect(GrColor, const SkMatrix& viewMatrix, uint8_t coverage, GrPrimi tiveEdgeType,
114 const SkMatrix& localMatrix);
111 115
112 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; 116 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
113 117
114 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { 118 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
115 out->setUnknownSingleComponent(); 119 out->setUnknownSingleComponent();
116 } 120 }
117 121
118 uint8_t fCoverageScale; 122 uint8_t fCoverageScale;
119 GrPrimitiveEdgeType fEdgeType; 123 GrPrimitiveEdgeType fEdgeType;
120 const GrAttribute* fInPosition; 124 const GrAttribute* fInPosition;
(...skipping 11 matching lines...) Expand all
132 * two components of the vertex attribute. At the three control points that defi ne 136 * two components of the vertex attribute. At the three control points that defi ne
133 * the Quadratic, u, v have the values {0,0}, {1/2, 0}, and {1, 1} respectively. 137 * the Quadratic, u, v have the values {0,0}, {1/2, 0}, and {1, 1} respectively.
134 * Coverage for AA is min(0, 1-distance). 3rd & 4th cimponent unused. 138 * Coverage for AA is min(0, 1-distance). 3rd & 4th cimponent unused.
135 * Requires shader derivative instruction support. 139 * Requires shader derivative instruction support.
136 */ 140 */
137 class GrGLQuadEffect; 141 class GrGLQuadEffect;
138 142
139 class GrQuadEffect : public GrGeometryProcessor { 143 class GrQuadEffect : public GrGeometryProcessor {
140 public: 144 public:
141 static GrGeometryProcessor* Create(GrColor color, 145 static GrGeometryProcessor* Create(GrColor color,
146 const SkMatrix& viewMatrix,
142 const GrPrimitiveEdgeType edgeType, 147 const GrPrimitiveEdgeType edgeType,
143 const GrDrawTargetCaps& caps, 148 const GrDrawTargetCaps& caps,
144 const SkMatrix& localMatrix, 149 const SkMatrix& localMatrix,
145 uint8_t coverage = 0xff) { 150 uint8_t coverage = 0xff) {
146 switch (edgeType) { 151 switch (edgeType) {
147 case kFillAA_GrProcessorEdgeType: 152 case kFillAA_GrProcessorEdgeType:
148 if (!caps.shaderDerivativeSupport()) { 153 if (!caps.shaderDerivativeSupport()) {
149 return NULL; 154 return NULL;
150 } 155 }
151 return SkNEW_ARGS(GrQuadEffect, (color, coverage, kFillAA_GrProc essorEdgeType, 156 return SkNEW_ARGS(GrQuadEffect, (color, viewMatrix, coverage,
157 kFillAA_GrProcessorEdgeType,
152 localMatrix)); 158 localMatrix));
153 case kHairlineAA_GrProcessorEdgeType: 159 case kHairlineAA_GrProcessorEdgeType:
154 if (!caps.shaderDerivativeSupport()) { 160 if (!caps.shaderDerivativeSupport()) {
155 return NULL; 161 return NULL;
156 } 162 }
157 return SkNEW_ARGS(GrQuadEffect, (color, coverage, kHairlineAA_Gr ProcessorEdgeType, 163 return SkNEW_ARGS(GrQuadEffect, (color, viewMatrix, coverage,
164 kHairlineAA_GrProcessorEdgeType ,
158 localMatrix)); 165 localMatrix));
159 case kFillBW_GrProcessorEdgeType: 166 case kFillBW_GrProcessorEdgeType:
160 return SkNEW_ARGS(GrQuadEffect, (color, coverage, kFillBW_GrProc essorEdgeType, 167 return SkNEW_ARGS(GrQuadEffect, (color, viewMatrix, coverage,
168 kFillBW_GrProcessorEdgeType,
161 localMatrix)); 169 localMatrix));
162 default: 170 default:
163 return NULL; 171 return NULL;
164 } 172 }
165 } 173 }
166 174
167 virtual ~GrQuadEffect(); 175 virtual ~GrQuadEffect();
168 176
169 virtual const char* name() const SK_OVERRIDE { return "Quad"; } 177 virtual const char* name() const SK_OVERRIDE { return "Quad"; }
170 178
171 inline const GrAttribute* inPosition() const { return fInPosition; } 179 inline const GrAttribute* inPosition() const { return fInPosition; }
172 inline const GrAttribute* inHairQuadEdge() const { return fInHairQuadEdge; } 180 inline const GrAttribute* inHairQuadEdge() const { return fInHairQuadEdge; }
173 inline bool isAntiAliased() const { return GrProcessorEdgeTypeIsAA(fEdgeType ); } 181 inline bool isAntiAliased() const { return GrProcessorEdgeTypeIsAA(fEdgeType ); }
174 inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); } 182 inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); }
175 inline GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 183 inline GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
176 184
177 virtual void getGLProcessorKey(const GrBatchTracker& bt, 185 virtual void getGLProcessorKey(const GrBatchTracker& bt,
178 const GrGLCaps& caps, 186 const GrGLCaps& caps,
179 GrProcessorKeyBuilder* b) const SK_OVERRIDE; 187 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
180 188
181 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE; 189 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE;
182 190
183 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE; 191 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
184 bool onCanMakeEqual(const GrBatchTracker&, 192 bool onCanMakeEqual(const GrBatchTracker&,
185 const GrGeometryProcessor&, 193 const GrGeometryProcessor&,
186 const GrBatchTracker&) const SK_OVERRIDE; 194 const GrBatchTracker&) const SK_OVERRIDE;
187 195
188 private: 196 private:
189 GrQuadEffect(GrColor, uint8_t coverage, GrPrimitiveEdgeType, const SkMatrix& localMatrix); 197 GrQuadEffect(GrColor, const SkMatrix& viewMatrix, uint8_t coverage, GrPrimit iveEdgeType,
198 const SkMatrix& localMatrix);
190 199
191 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; 200 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
192 201
193 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { 202 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
194 out->setUnknownSingleComponent(); 203 out->setUnknownSingleComponent();
195 } 204 }
196 205
197 uint8_t fCoverageScale; 206 uint8_t fCoverageScale;
198 GrPrimitiveEdgeType fEdgeType; 207 GrPrimitiveEdgeType fEdgeType;
199 const GrAttribute* fInPosition; 208 const GrAttribute* fInPosition;
(...skipping 13 matching lines...) Expand all
213 * K, L, and M, are the first three values of the vertex attribute, 222 * K, L, and M, are the first three values of the vertex attribute,
214 * the fourth value is not used. Distance is calculated using a 223 * the fourth value is not used. Distance is calculated using a
215 * first order approximation from the taylor series. 224 * first order approximation from the taylor series.
216 * Coverage for AA is max(0, 1-distance). 225 * Coverage for AA is max(0, 1-distance).
217 */ 226 */
218 class GrGLCubicEffect; 227 class GrGLCubicEffect;
219 228
220 class GrCubicEffect : public GrGeometryProcessor { 229 class GrCubicEffect : public GrGeometryProcessor {
221 public: 230 public:
222 static GrGeometryProcessor* Create(GrColor color, 231 static GrGeometryProcessor* Create(GrColor color,
232 const SkMatrix& viewMatrix,
223 const GrPrimitiveEdgeType edgeType, 233 const GrPrimitiveEdgeType edgeType,
224 const GrDrawTargetCaps& caps) { 234 const GrDrawTargetCaps& caps) {
225 switch (edgeType) { 235 switch (edgeType) {
226 case kFillAA_GrProcessorEdgeType: 236 case kFillAA_GrProcessorEdgeType:
227 if (!caps.shaderDerivativeSupport()) { 237 if (!caps.shaderDerivativeSupport()) {
228 return NULL; 238 return NULL;
229 } 239 }
230 return SkNEW_ARGS(GrCubicEffect, (color, kFillAA_GrProcessorEdge Type)); 240 return SkNEW_ARGS(GrCubicEffect, (color, viewMatrix, kFillAA_GrP rocessorEdgeType));
231 case kHairlineAA_GrProcessorEdgeType: 241 case kHairlineAA_GrProcessorEdgeType:
232 if (!caps.shaderDerivativeSupport()) { 242 if (!caps.shaderDerivativeSupport()) {
233 return NULL; 243 return NULL;
234 } 244 }
235 return SkNEW_ARGS(GrCubicEffect, (color, kHairlineAA_GrProcessor EdgeType)); 245 return SkNEW_ARGS(GrCubicEffect, (color, viewMatrix,
246 kHairlineAA_GrProcessorEdgeTyp e));
236 case kFillBW_GrProcessorEdgeType: 247 case kFillBW_GrProcessorEdgeType:
237 return SkNEW_ARGS(GrCubicEffect, (color, kFillBW_GrProcessorEdge Type)); 248 return SkNEW_ARGS(GrCubicEffect, (color, viewMatrix,
249 kFillBW_GrProcessorEdgeType));
238 default: 250 default:
239 return NULL; 251 return NULL;
240 } 252 }
241 } 253 }
242 254
243 virtual ~GrCubicEffect(); 255 virtual ~GrCubicEffect();
244 256
245 virtual const char* name() const SK_OVERRIDE { return "Cubic"; } 257 virtual const char* name() const SK_OVERRIDE { return "Cubic"; }
246 258
247 inline const GrAttribute* inPosition() const { return fInPosition; } 259 inline const GrAttribute* inPosition() const { return fInPosition; }
248 inline const GrAttribute* inCubicCoeffs() const { return fInCubicCoeffs; } 260 inline const GrAttribute* inCubicCoeffs() const { return fInCubicCoeffs; }
249 inline bool isAntiAliased() const { return GrProcessorEdgeTypeIsAA(fEdgeType ); } 261 inline bool isAntiAliased() const { return GrProcessorEdgeTypeIsAA(fEdgeType ); }
250 inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); } 262 inline bool isFilled() const { return GrProcessorEdgeTypeIsFill(fEdgeType); }
251 inline GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; } 263 inline GrPrimitiveEdgeType getEdgeType() const { return fEdgeType; }
252 264
253 virtual void getGLProcessorKey(const GrBatchTracker& bt, 265 virtual void getGLProcessorKey(const GrBatchTracker& bt,
254 const GrGLCaps& caps, 266 const GrGLCaps& caps,
255 GrProcessorKeyBuilder* b) const SK_OVERRIDE; 267 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
256 268
257 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE; 269 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE;
258 270
259 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE; 271 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
260 bool onCanMakeEqual(const GrBatchTracker&, 272 bool onCanMakeEqual(const GrBatchTracker&,
261 const GrGeometryProcessor&, 273 const GrGeometryProcessor&,
262 const GrBatchTracker&) const SK_OVERRIDE; 274 const GrBatchTracker&) const SK_OVERRIDE;
263 275
264 private: 276 private:
265 GrCubicEffect(GrColor, GrPrimitiveEdgeType); 277 GrCubicEffect(GrColor, const SkMatrix& viewMatrix, GrPrimitiveEdgeType);
266 278
267 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE; 279 virtual bool onIsEqual(const GrGeometryProcessor& other) const SK_OVERRIDE;
268 280
269 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE { 281 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRIDE {
270 out->setUnknownSingleComponent(); 282 out->setUnknownSingleComponent();
271 } 283 }
272 284
273 GrPrimitiveEdgeType fEdgeType; 285 GrPrimitiveEdgeType fEdgeType;
274 const GrAttribute* fInPosition; 286 const GrAttribute* fInPosition;
275 const GrAttribute* fInCubicCoeffs; 287 const GrAttribute* fInCubicCoeffs;
276 288
277 GR_DECLARE_GEOMETRY_PROCESSOR_TEST; 289 GR_DECLARE_GEOMETRY_PROCESSOR_TEST;
278 290
279 typedef GrGeometryProcessor INHERITED; 291 typedef GrGeometryProcessor INHERITED;
280 }; 292 };
281 293
282 #endif 294 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrStencilAndCoverTextContext.cpp ('k') | src/gpu/effects/GrBezierEffect.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698