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

Side by Side Diff: src/gpu/GrGeometryProcessor.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/GrDrawTarget.cpp ('k') | src/gpu/GrGeometryProcessor.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 GrGeometryProcessor_DEFINED 8 #ifndef GrGeometryProcessor_DEFINED
9 #define GrGeometryProcessor_DEFINED 9 #define GrGeometryProcessor_DEFINED
10 10
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
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 // TODO let the PrimProc itself set this in its setData call, this should re ally live on the 93 // TODO let the PrimProc itself set this in its setData call, this should re ally live on the
94 // bundle of primitive data 94 // bundle of primitive data
95 const SkMatrix& viewMatrix() const { return fViewMatrix; }
95 const SkMatrix& localMatrix() const { return fLocalMatrix; } 96 const SkMatrix& localMatrix() const { return fLocalMatrix; }
96 97
97 /* 98 /*
98 * This struct allows the optstate to communicate requirements to the GrPrim itiveProcessor. 99 * This struct allows the optstate to communicate requirements to the GrPrim itiveProcessor.
99 */ 100 */
100 struct InitBT { 101 struct InitBT {
101 bool fColorIgnored; 102 bool fColorIgnored;
102 bool fCoverageIgnored; 103 bool fCoverageIgnored;
103 GrColor fOverrideColor; 104 GrColor fOverrideColor;
104 bool fUsesLocalCoords; 105 bool fUsesLocalCoords;
(...skipping 23 matching lines...) Expand all
128 const GrGLCaps& caps, 129 const GrGLCaps& caps,
129 GrProcessorKeyBuilder* b) const = 0; 130 GrProcessorKeyBuilder* b) const = 0;
130 131
131 132
132 /** Returns a new instance of the appropriate *GL* implementation class 133 /** Returns a new instance of the appropriate *GL* implementation class
133 for the given GrProcessor; caller is responsible for deleting 134 for the given GrProcessor; caller is responsible for deleting
134 the object. */ 135 the object. */
135 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst = 0; 136 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst = 0;
136 137
137 protected: 138 protected:
138 GrPrimitiveProcessor(const SkMatrix& localMatrix) : fLocalMatrix(localMatrix ) {} 139 GrPrimitiveProcessor(const SkMatrix& viewMatrix, const SkMatrix& localMatrix )
140 : fViewMatrix(viewMatrix)
141 , fLocalMatrix(localMatrix) {}
139 142
140 /* 143 /*
141 * CanCombineOutput will return true if two draws are 'batchable' from a col or perspective. 144 * CanCombineOutput will return true if two draws are 'batchable' from a col or perspective.
142 * TODO remove this when GPs can upgrade to attribute color 145 * TODO remove this when GPs can upgrade to attribute color
143 */ 146 */
144 static bool CanCombineOutput(GrGPInput left, GrColor lColor, GrGPInput right , GrColor rColor) { 147 static bool CanCombineOutput(GrGPInput left, GrColor lColor, GrGPInput right , GrColor rColor) {
145 if (left != right) { 148 if (left != right) {
146 return false; 149 return false;
147 } 150 }
148 151
(...skipping 12 matching lines...) Expand all
161 return false; 164 return false;
162 } 165 }
163 166
164 if (leftUsesLocalCoords && !left.localMatrix().cheapEqualTo(right.localM atrix())) { 167 if (leftUsesLocalCoords && !left.localMatrix().cheapEqualTo(right.localM atrix())) {
165 return false; 168 return false;
166 } 169 }
167 return true; 170 return true;
168 } 171 }
169 172
170 private: 173 private:
174 SkMatrix fViewMatrix;
171 SkMatrix fLocalMatrix; 175 SkMatrix fLocalMatrix;
172 176
173 typedef GrProcessor INHERITED; 177 typedef GrProcessor INHERITED;
174 }; 178 };
175 179
176 /** 180 /**
177 * A GrGeometryProcessor is a flexible method for rendering a primitive. The Gr GeometryProcessor 181 * A GrGeometryProcessor is a flexible method for rendering a primitive. The Gr GeometryProcessor
178 * has complete control over vertex attributes and uniforms(aside from the rende r target) but it 182 * has complete control over vertex attributes and uniforms(aside from the rende r target) but it
179 * must obey the same contract as any GrPrimitiveProcessor, specifically it must emit a color and 183 * must obey the same contract as any GrPrimitiveProcessor, specifically it must emit a color and
180 * coverage into the fragment shader. Where this color and coverage come from i s completely the 184 * coverage into the fragment shader. Where this color and coverage come from i s completely the
181 * responsibility of the GrGeometryProcessor. 185 * responsibility of the GrGeometryProcessor.
182 */ 186 */
183 class GrGeometryProcessor : public GrPrimitiveProcessor { 187 class GrGeometryProcessor : public GrPrimitiveProcessor {
184 public: 188 public:
185 // TODO the Hint can be handled in a much more clean way when we have deferr ed geometry or 189 // TODO the Hint can be handled in a much more clean way when we have deferr ed geometry or
186 // atleast bundles 190 // atleast bundles
187 GrGeometryProcessor(GrColor color, 191 GrGeometryProcessor(GrColor color,
188 bool opaqueVertexColors = false, 192 const SkMatrix& viewMatrix = SkMatrix::I(),
189 const SkMatrix& localMatrix = SkMatrix::I()) 193 const SkMatrix& localMatrix = SkMatrix::I(),
190 : INHERITED(localMatrix) 194 bool opaqueVertexColors = false)
195 : INHERITED(viewMatrix, localMatrix)
191 , fVertexStride(0) 196 , fVertexStride(0)
192 , fColor(color) 197 , fColor(color)
193 , fOpaqueVertexColors(opaqueVertexColors) 198 , fOpaqueVertexColors(opaqueVertexColors)
194 , fWillUseGeoShader(false) 199 , fWillUseGeoShader(false)
195 , fHasVertexColor(false) 200 , fHasVertexColor(false)
196 , fHasLocalCoords(false) {} 201 , fHasLocalCoords(false) {}
197 202
198 /* 203 /*
199 * This is a safeguard to prevent GPs from going beyond platform specific at tribute limits. 204 * This is a safeguard to prevent GPs from going beyond platform specific at tribute limits.
200 * This number can almost certainly be raised if required. 205 * This number can almost certainly be raised if required.
(...skipping 29 matching lines...) Expand all
230 * Any bundles associated with the discarded GrGeometryProcessor will be att ached to the 235 * Any bundles associated with the discarded GrGeometryProcessor will be att ached to the
231 * remaining GrGeometryProcessor. 236 * remaining GrGeometryProcessor.
232 */ 237 */
233 bool canMakeEqual(const GrBatchTracker& mine, 238 bool canMakeEqual(const GrBatchTracker& mine,
234 const GrPrimitiveProcessor& that, 239 const GrPrimitiveProcessor& that,
235 const GrBatchTracker& theirs) const SK_OVERRIDE { 240 const GrBatchTracker& theirs) const SK_OVERRIDE {
236 if (this->classID() != that.classID() || !this->hasSameTextureAccesses(t hat)) { 241 if (this->classID() != that.classID() || !this->hasSameTextureAccesses(t hat)) {
237 return false; 242 return false;
238 } 243 }
239 244
245 // TODO let the GPs decide this
246 if (!this->viewMatrix().cheapEqualTo(that.viewMatrix())) {
247 return false;
248 }
249
240 // TODO remove the hint 250 // TODO remove the hint
241 const GrGeometryProcessor& other = that.cast<GrGeometryProcessor>(); 251 const GrGeometryProcessor& other = that.cast<GrGeometryProcessor>();
242 if (fHasVertexColor && fOpaqueVertexColors != other.fOpaqueVertexColors) { 252 if (fHasVertexColor && fOpaqueVertexColors != other.fOpaqueVertexColors) {
243 return false; 253 return false;
244 } 254 }
245 255
246 // TODO this equality test should really be broken up, some of this can live on the batch 256 // TODO this equality test should really be broken up, some of this can live on the batch
247 // tracker test and some of this should be in bundles 257 // tracker test and some of this should be in bundles
248 if (!this->onIsEqual(other)) { 258 if (!this->onIsEqual(other)) {
249 return false; 259 return false;
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
335 345
336 typedef GrPrimitiveProcessor INHERITED; 346 typedef GrPrimitiveProcessor INHERITED;
337 }; 347 };
338 348
339 /* 349 /*
340 * The path equivalent of the GP. For now this just manages color. In the long term we plan on 350 * The path equivalent of the GP. For now this just manages color. In the long term we plan on
341 * extending this class to handle all nvpr uniform / varying / program work. 351 * extending this class to handle all nvpr uniform / varying / program work.
342 */ 352 */
343 class GrPathProcessor : public GrPrimitiveProcessor { 353 class GrPathProcessor : public GrPrimitiveProcessor {
344 public: 354 public:
345 static GrPathProcessor* Create(GrColor color, const SkMatrix& localMatrix = SkMatrix::I()) { 355 static GrPathProcessor* Create(GrColor color,
346 return SkNEW_ARGS(GrPathProcessor, (color, localMatrix)); 356 const SkMatrix& viewMatrix = SkMatrix::I(),
357 const SkMatrix& localMatrix = SkMatrix::I()) {
358 return SkNEW_ARGS(GrPathProcessor, (color, viewMatrix, localMatrix));
347 } 359 }
348 360
349 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE; 361 void initBatchTracker(GrBatchTracker*, const InitBT&) const SK_OVERRIDE;
350 362
351 bool canMakeEqual(const GrBatchTracker& mine, 363 bool canMakeEqual(const GrBatchTracker& mine,
352 const GrPrimitiveProcessor& that, 364 const GrPrimitiveProcessor& that,
353 const GrBatchTracker& theirs) const SK_OVERRIDE; 365 const GrBatchTracker& theirs) const SK_OVERRIDE;
354 366
355 const char* name() const SK_OVERRIDE { return "PathProcessor"; } 367 const char* name() const SK_OVERRIDE { return "PathProcessor"; }
356 368
357 GrColor color() const { return fColor; } 369 GrColor color() const { return fColor; }
358 370
359 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE; 371 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE;
360 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E; 372 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID E;
361 373
362 virtual void getGLProcessorKey(const GrBatchTracker& bt, 374 virtual void getGLProcessorKey(const GrBatchTracker& bt,
363 const GrGLCaps& caps, 375 const GrGLCaps& caps,
364 GrProcessorKeyBuilder* b) const SK_OVERRIDE; 376 GrProcessorKeyBuilder* b) const SK_OVERRIDE;
365 377
366 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE; 378 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co nst SK_OVERRIDE;
367 379
368 private: 380 private:
369 GrPathProcessor(GrColor color, const SkMatrix& localMatrix); 381 GrPathProcessor(GrColor color, const SkMatrix& viewMatrix, const SkMatrix& l ocalMatrix);
370 GrColor fColor; 382 GrColor fColor;
371 383
372 typedef GrPrimitiveProcessor INHERITED; 384 typedef GrPrimitiveProcessor INHERITED;
373 }; 385 };
374 #endif 386 #endif
OLDNEW
« no previous file with comments | « src/gpu/GrDrawTarget.cpp ('k') | src/gpu/GrGeometryProcessor.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698