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

Side by Side Diff: src/gpu/GrGeometryProcessor.h

Issue 820523002: initial changes to add local matrix to primitive processor (Closed) Base URL: https://skia.googlesource.com/skia.git@cleanup-ccm-above-context
Patch Set: clean up of comment around get_transform_matrix Created 6 years 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
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 GrGeometryProcessor_DEFINED 8 #ifndef GrGeometryProcessor_DEFINED
9 #define GrGeometryProcessor_DEFINED 9 #define GrGeometryProcessor_DEFINED
10 10
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 kIgnored_GrGPInput, 83 kIgnored_GrGPInput,
84 }; 84 };
85 85
86 /* 86 /*
87 * GrPrimitiveProcessor defines an interface which all subclasses must implement . All 87 * GrPrimitiveProcessor defines an interface which all subclasses must implement . All
88 * GrPrimitiveProcessors must proivide seed color and coverage for the Ganesh co lor / coverage 88 * GrPrimitiveProcessors must proivide seed color and coverage for the Ganesh co lor / coverage
89 * pipelines, and they must provide some notion of equality 89 * pipelines, and they must provide some notion of equality
90 */ 90 */
91 class GrPrimitiveProcessor : public GrProcessor { 91 class GrPrimitiveProcessor : public GrProcessor {
92 public: 92 public:
93 virtual const SkMatrix& localMatrix() const = 0;
bsalomon 2014/12/19 14:15:53 Why not just have the base class own a protected m
94
93 /* 95 /*
94 * This struct allows the optstate to communicate requirements to the GrPrim itiveProcessor. 96 * This struct allows the optstate to communicate requirements to the GrPrim itiveProcessor.
95 */ 97 */
96 struct InitBT { 98 struct InitBT {
97 bool fColorIgnored; 99 bool fColorIgnored;
98 bool fCoverageIgnored; 100 bool fCoverageIgnored;
99 GrColor fOverrideColor; 101 GrColor fOverrideColor;
100 }; 102 };
101 103
102 virtual void initBatchTracker(GrBatchTracker*, const InitBT&) const = 0; 104 virtual void initBatchTracker(GrBatchTracker*, const InitBT&) const = 0;
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after
154 * A GrGeometryProcessor is a flexible method for rendering a primitive. The Gr GeometryProcessor 156 * A GrGeometryProcessor is a flexible method for rendering a primitive. The Gr GeometryProcessor
155 * has complete control over vertex attributes and uniforms(aside from the rende r target) but it 157 * has complete control over vertex attributes and uniforms(aside from the rende r target) but it
156 * must obey the same contract as any GrPrimitiveProcessor, specifically it must emit a color and 158 * must obey the same contract as any GrPrimitiveProcessor, specifically it must emit a color and
157 * coverage into the fragment shader. Where this color and coverage come from i s completely the 159 * coverage into the fragment shader. Where this color and coverage come from i s completely the
158 * responsibility of the GrGeometryProcessor. 160 * responsibility of the GrGeometryProcessor.
159 */ 161 */
160 class GrGeometryProcessor : public GrPrimitiveProcessor { 162 class GrGeometryProcessor : public GrPrimitiveProcessor {
161 public: 163 public:
162 // TODO the Hint can be handled in a much more clean way when we have deferr ed geometry or 164 // TODO the Hint can be handled in a much more clean way when we have deferr ed geometry or
163 // atleast bundles 165 // atleast bundles
164 GrGeometryProcessor(GrColor color, bool opaqueVertexColors = false) 166 GrGeometryProcessor(GrColor color,
167 bool opaqueVertexColors = false,
168 const SkMatrix& localMatrix = SkMatrix::I())
165 : fVertexStride(0) 169 : fVertexStride(0)
166 , fColor(color) 170 , fColor(color)
167 , fOpaqueVertexColors(opaqueVertexColors) 171 , fOpaqueVertexColors(opaqueVertexColors)
168 , fWillUseGeoShader(false) 172 , fWillUseGeoShader(false)
169 , fHasVertexColor(false) 173 , fHasVertexColor(false)
170 , fHasLocalCoords(false) {} 174 , fHasLocalCoords(false)
175 , fLocalMatrix(localMatrix) {}
171 176
172 /* 177 /*
173 * This is a safeguard to prevent GPs from going beyond platform specific at tribute limits. 178 * This is a safeguard to prevent GPs from going beyond platform specific at tribute limits.
174 * This number can almost certainly be raised if required. 179 * This number can almost certainly be raised if required.
175 */ 180 */
176 static const int kMaxVertexAttribs = 6; 181 static const int kMaxVertexAttribs = 6;
177 182
178 struct GrAttribute { 183 struct GrAttribute {
179 GrAttribute(const char* name, GrVertexAttribType type) 184 GrAttribute(const char* name, GrVertexAttribType type)
180 : fName(name) 185 : fName(name)
(...skipping 29 matching lines...) Expand all
210 if (this->classID() != that.classID() || !this->hasSameTextureAccesses(t hat)) { 215 if (this->classID() != that.classID() || !this->hasSameTextureAccesses(t hat)) {
211 return false; 216 return false;
212 } 217 }
213 218
214 // TODO remove the hint 219 // TODO remove the hint
215 const GrGeometryProcessor& other = that.cast<GrGeometryProcessor>(); 220 const GrGeometryProcessor& other = that.cast<GrGeometryProcessor>();
216 if (fHasVertexColor && fOpaqueVertexColors != other.fOpaqueVertexColors) { 221 if (fHasVertexColor && fOpaqueVertexColors != other.fOpaqueVertexColors) {
217 return false; 222 return false;
218 } 223 }
219 224
225 // TODO let the GP itself make this call
226 if (!fLocalMatrix.cheapEqualTo(other.localMatrix())) {
227 return false;
228 }
229
220 // TODO this equality test should really be broken up, some of this can live on the batch 230 // TODO this equality test should really be broken up, some of this can live on the batch
221 // tracker test and some of this should be in bundles 231 // tracker test and some of this should be in bundles
222 if (!this->onIsEqual(other)) { 232 if (!this->onIsEqual(other)) {
223 return false; 233 return false;
224 } 234 }
225 235
226 return this->onCanMakeEqual(mine, theirs); 236 return this->onCanMakeEqual(mine, theirs);
227 } 237 }
228 238
229 239
230 // TODO we can remove color from the GrGeometryProcessor base class once we have bundles of 240 // TODO we can remove color from the GrGeometryProcessor base class once we have bundles of
231 // primitive data 241 // primitive data
232 GrColor color() const { return fColor; } 242 GrColor color() const { return fColor; }
243 const SkMatrix& localMatrix() const SK_OVERRIDE { return fLocalMatrix; }
233 244
234 // TODO this is a total hack until the gp can do deferred geometry 245 // TODO this is a total hack until the gp can do deferred geometry
235 bool hasVertexColor() const { return fHasVertexColor; } 246 bool hasVertexColor() const { return fHasVertexColor; }
236 247
237 // TODO this is a total hack until gp can setup and manage local coords 248 // TODO this is a total hack until gp can setup and manage local coords
238 bool hasLocalCoords() const { return fHasLocalCoords; } 249 bool hasLocalCoords() const { return fHasLocalCoords; }
239 250
240 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE; 251 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE;
241 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E; 252 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E;
242 253
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
297 // TODO delete this when we have more advanced equality testing via bundles and the BT 308 // TODO delete this when we have more advanced equality testing via bundles and the BT
298 virtual bool onIsEqual(const GrGeometryProcessor&) const = 0; 309 virtual bool onIsEqual(const GrGeometryProcessor&) const = 0;
299 310
300 SkSTArray<kMaxVertexAttribs, GrAttribute, true> fAttribs; 311 SkSTArray<kMaxVertexAttribs, GrAttribute, true> fAttribs;
301 size_t fVertexStride; 312 size_t fVertexStride;
302 GrColor fColor; 313 GrColor fColor;
303 bool fOpaqueVertexColors; 314 bool fOpaqueVertexColors;
304 bool fWillUseGeoShader; 315 bool fWillUseGeoShader;
305 bool fHasVertexColor; 316 bool fHasVertexColor;
306 bool fHasLocalCoords; 317 bool fHasLocalCoords;
318 SkMatrix fLocalMatrix;
bsalomon 2014/12/19 14:15:53 move to primproc?
307 319
308 typedef GrProcessor INHERITED; 320 typedef GrProcessor INHERITED;
309 }; 321 };
310 322
311 /* 323 /*
312 * The path equivalent of the GP. For now this just manages color. In the long term we plan on 324 * The path equivalent of the GP. For now this just manages color. In the long term we plan on
313 * extending this class to handle all nvpr uniform / varying / program work. 325 * extending this class to handle all nvpr uniform / varying / program work.
314 */ 326 */
315 class GrPathProcessor : public GrPrimitiveProcessor { 327 class GrPathProcessor : public GrPrimitiveProcessor {
316 public: 328 public:
317 static GrPathProcessor* Create(GrColor color) { 329 static GrPathProcessor* Create(GrColor color, const SkMatrix& localMatrix = SkMatrix::I()) {
318 return SkNEW_ARGS(GrPathProcessor, (color)); 330 return SkNEW_ARGS(GrPathProcessor, (color, localMatrix));
319 } 331 }
320 332
321 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE; 333 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
322 334
323 bool canMakeEqual(const GrBatchTracker& mine, 335 bool canMakeEqual(const GrBatchTracker& mine,
324 const GrPrimitiveProcessor& that, 336 const GrPrimitiveProcessor& that,
325 const GrBatchTracker& theirs) const SK_OVERRIDE; 337 const GrBatchTracker& theirs) const SK_OVERRIDE;
326 338
327 const char* name() const SK_OVERRIDE { return "PathProcessor"; } 339 const char* name() const SK_OVERRIDE { return "PathProcessor"; }
328 340
329 GrColor color() const { return fColor; } 341 GrColor color() const { return fColor; }
342 const SkMatrix& localMatrix() const SK_OVERRIDE { return fLocalMatrix; }
330 343
331 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE; 344 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE;
332 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E; 345 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E;
333 346
334 virtual void getGLProcessorKey(const GrBatchTracker& bt, 347 virtual void getGLProcessorKey(const GrBatchTracker& bt,
335 const GrGLCaps& caps, 348 const GrGLCaps& caps,
336 GrProcessorKeyBuilder* b) const SK_OVERRIDE; 349 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
337 350
338 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE; 351 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE;
339 352
340 private: 353 private:
341 GrPathProcessor(GrColor color); 354 GrPathProcessor(GrColor color, const SkMatrix& localMatrix);
342 GrColor fColor; 355 GrColor fColor;
356 SkMatrix fLocalMatrix;
343 357
344 typedef GrProcessor INHERITED; 358 typedef GrProcessor INHERITED;
345 }; 359 };
346 #endif 360 #endif
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698