| OLD | NEW |
| 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 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 59 return reinterpret_cast<T*>(fData.get()); | 59 return reinterpret_cast<T*>(fData.get()); |
| 60 } | 60 } |
| 61 | 61 |
| 62 static const size_t kMaxSize = 32; | 62 static const size_t kMaxSize = 32; |
| 63 | 63 |
| 64 private: | 64 private: |
| 65 SkAlignedSStorage<kMaxSize> fData; | 65 SkAlignedSStorage<kMaxSize> fData; |
| 66 }; | 66 }; |
| 67 | 67 |
| 68 class GrGLCaps; | 68 class GrGLCaps; |
| 69 class GrGLGeometryProcessor; | 69 class GrGLPrimitiveProcessor; |
| 70 class GrOptDrawState; | 70 class GrOptDrawState; |
| 71 | 71 |
| 72 struct GrInitInvariantOutput; | 72 struct GrInitInvariantOutput; |
| 73 | 73 |
| 74 | 74 |
| 75 /* | 75 /* |
| 76 * This enum is shared by GrPrimitiveProcessors and GrGLPrimitiveProcessors to c
oordinate shaders | 76 * This enum is shared by GrPrimitiveProcessors and GrGLPrimitiveProcessors to c
oordinate shaders |
| 77 * with vertex attributes / uniforms. | 77 * with vertex attributes / uniforms. |
| 78 */ | 78 */ |
| 79 enum GrGPInput { | 79 enum GrGPInput { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 * We always call canMakeEqual before makeEqual so there is no need to do an
y kind of equality | 115 * We always call canMakeEqual before makeEqual so there is no need to do an
y kind of equality |
| 116 * testing here | 116 * testing here |
| 117 * TODO make this pure virtual when primProcs can actually use it | 117 * TODO make this pure virtual when primProcs can actually use it |
| 118 */ | 118 */ |
| 119 virtual void makeEqual(GrBatchTracker*, const GrBatchTracker&) const {} | 119 virtual void makeEqual(GrBatchTracker*, const GrBatchTracker&) const {} |
| 120 | 120 |
| 121 virtual void getInvariantOutputColor(GrInitInvariantOutput* out) const = 0; | 121 virtual void getInvariantOutputColor(GrInitInvariantOutput* out) const = 0; |
| 122 virtual void getInvariantOutputCoverage(GrInitInvariantOutput* out) const =
0; | 122 virtual void getInvariantOutputCoverage(GrInitInvariantOutput* out) const =
0; |
| 123 | 123 |
| 124 /** | 124 /** |
| 125 * Gets a transformKey from an array of coord transforms |
| 126 */ |
| 127 uint32_t getTransformKey(const SkTArray<const GrCoordTransform*, true>&) con
st; |
| 128 |
| 129 /** |
| 125 * Sets a unique key on the GrProcessorKeyBuilder that is directly associate
d with this geometry | 130 * Sets a unique key on the GrProcessorKeyBuilder that is directly associate
d with this geometry |
| 126 * processor's GL backend implementation. | 131 * processor's GL backend implementation. |
| 127 */ | 132 */ |
| 128 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 133 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
| 129 const GrGLCaps& caps, | 134 const GrGLCaps& caps, |
| 130 GrProcessorKeyBuilder* b) const = 0; | 135 GrProcessorKeyBuilder* b) const = 0; |
| 131 | 136 |
| 132 | 137 |
| 133 /** Returns a new instance of the appropriate *GL* implementation class | 138 /** Returns a new instance of the appropriate *GL* implementation class |
| 134 for the given GrProcessor; caller is responsible for deleting | 139 for the given GrProcessor; caller is responsible for deleting |
| 135 the object. */ | 140 the object. */ |
| 136 virtual GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) co
nst = 0; | 141 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
| 142 const GrGLCaps& caps) const
= 0; |
| 137 | 143 |
| 138 protected: | 144 protected: |
| 139 GrPrimitiveProcessor(const SkMatrix& viewMatrix, const SkMatrix& localMatrix
) | 145 GrPrimitiveProcessor(const SkMatrix& viewMatrix, const SkMatrix& localMatrix
) |
| 140 : fViewMatrix(viewMatrix) | 146 : fViewMatrix(viewMatrix) |
| 141 , fLocalMatrix(localMatrix) {} | 147 , fLocalMatrix(localMatrix) {} |
| 142 | 148 |
| 143 /* | 149 /* |
| 144 * CanCombineOutput will return true if two draws are 'batchable' from a col
or perspective. | 150 * CanCombineOutput will return true if two draws are 'batchable' from a col
or perspective. |
| 145 * TODO remove this when GPs can upgrade to attribute color | 151 * TODO remove this when GPs can upgrade to attribute color |
| 146 */ | 152 */ |
| (...skipping 17 matching lines...) Expand all Loading... |
| 164 return false; | 170 return false; |
| 165 } | 171 } |
| 166 | 172 |
| 167 if (leftUsesLocalCoords && !left.localMatrix().cheapEqualTo(right.localM
atrix())) { | 173 if (leftUsesLocalCoords && !left.localMatrix().cheapEqualTo(right.localM
atrix())) { |
| 168 return false; | 174 return false; |
| 169 } | 175 } |
| 170 return true; | 176 return true; |
| 171 } | 177 } |
| 172 | 178 |
| 173 private: | 179 private: |
| 180 virtual bool hasExplicitLocalCoords() const = 0; |
| 181 |
| 174 SkMatrix fViewMatrix; | 182 SkMatrix fViewMatrix; |
| 175 SkMatrix fLocalMatrix; | 183 SkMatrix fLocalMatrix; |
| 176 | 184 |
| 177 typedef GrProcessor INHERITED; | 185 typedef GrProcessor INHERITED; |
| 178 }; | 186 }; |
| 179 | 187 |
| 180 /** | 188 /** |
| 181 * A GrGeometryProcessor is a flexible method for rendering a primitive. The Gr
GeometryProcessor | 189 * A GrGeometryProcessor is a flexible method for rendering a primitive. The Gr
GeometryProcessor |
| 182 * has complete control over vertex attributes and uniforms(aside from the rende
r target) but it | 190 * has complete control over vertex attributes and uniforms(aside from the rende
r target) but it |
| 183 * must obey the same contract as any GrPrimitiveProcessor, specifically it must
emit a color and | 191 * must obey the same contract as any GrPrimitiveProcessor, specifically it must
emit a color and |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 } | 262 } |
| 255 | 263 |
| 256 // TODO this equality test should really be broken up, some of this can
live on the batch | 264 // TODO this equality test should really be broken up, some of this can
live on the batch |
| 257 // tracker test and some of this should be in bundles | 265 // tracker test and some of this should be in bundles |
| 258 if (!this->onIsEqual(other)) { | 266 if (!this->onIsEqual(other)) { |
| 259 return false; | 267 return false; |
| 260 } | 268 } |
| 261 | 269 |
| 262 return this->onCanMakeEqual(mine, other, theirs); | 270 return this->onCanMakeEqual(mine, other, theirs); |
| 263 } | 271 } |
| 264 | |
| 265 | 272 |
| 266 // TODO we can remove color from the GrGeometryProcessor base class once we
have bundles of | 273 // TODO we can remove color from the GrGeometryProcessor base class once we
have bundles of |
| 267 // primitive data | 274 // primitive data |
| 268 GrColor color() const { return fColor; } | 275 GrColor color() const { return fColor; } |
| 269 | 276 |
| 270 // TODO this is a total hack until the gp can do deferred geometry | 277 // TODO this is a total hack until the gp can do deferred geometry |
| 271 bool hasVertexColor() const { return fHasVertexColor; } | 278 bool hasVertexColor() const { return fHasVertexColor; } |
| 272 | 279 |
| 273 // TODO this is a total hack until gp can setup and manage local coords | |
| 274 bool hasLocalCoords() const { return fHasLocalCoords; } | |
| 275 | |
| 276 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE; | 280 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE; |
| 277 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E; | 281 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E; |
| 278 | 282 |
| 279 protected: | 283 protected: |
| 280 /* | 284 /* |
| 281 * An optional simple helper function to determine by what means the GrGeome
tryProcessor should | 285 * An optional simple helper function to determine by what means the GrGeome
tryProcessor should |
| 282 * use to provide color. If we are given an override color(ie the given ove
rridecolor is NOT | 286 * use to provide color. If we are given an override color(ie the given ove
rridecolor is NOT |
| 283 * GrColor_ILLEGAL) then we must always emit that color(currently overrides
are only supported | 287 * GrColor_ILLEGAL) then we must always emit that color(currently overrides
are only supported |
| 284 * via uniform, but with deferred Geometry we could use attributes). Otherw
ise, if our color is | 288 * via uniform, but with deferred Geometry we could use attributes). Otherw
ise, if our color is |
| 285 * ignored then we should not emit a color. Lastly, if we don't have vertex
colors then we must | 289 * ignored then we should not emit a color. Lastly, if we don't have vertex
colors then we must |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 325 void setHasVertexColor() { fHasVertexColor = true; } | 329 void setHasVertexColor() { fHasVertexColor = true; } |
| 326 void setHasLocalCoords() { fHasLocalCoords = true; } | 330 void setHasLocalCoords() { fHasLocalCoords = true; } |
| 327 | 331 |
| 328 virtual void onGetInvariantOutputColor(GrInitInvariantOutput*) const {} | 332 virtual void onGetInvariantOutputColor(GrInitInvariantOutput*) const {} |
| 329 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const = 0; | 333 virtual void onGetInvariantOutputCoverage(GrInitInvariantOutput*) const = 0; |
| 330 | 334 |
| 331 private: | 335 private: |
| 332 virtual bool onCanMakeEqual(const GrBatchTracker& mine, | 336 virtual bool onCanMakeEqual(const GrBatchTracker& mine, |
| 333 const GrGeometryProcessor& that, | 337 const GrGeometryProcessor& that, |
| 334 const GrBatchTracker& theirs) const = 0; | 338 const GrBatchTracker& theirs) const = 0; |
| 339 |
| 335 // TODO delete this when we have more advanced equality testing via bundles
and the BT | 340 // TODO delete this when we have more advanced equality testing via bundles
and the BT |
| 336 virtual bool onIsEqual(const GrGeometryProcessor&) const = 0; | 341 virtual bool onIsEqual(const GrGeometryProcessor&) const = 0; |
| 337 | 342 |
| 343 bool hasExplicitLocalCoords() const SK_OVERRIDE { return fHasLocalCoords; } |
| 344 |
| 338 SkSTArray<kMaxVertexAttribs, GrAttribute, true> fAttribs; | 345 SkSTArray<kMaxVertexAttribs, GrAttribute, true> fAttribs; |
| 339 size_t fVertexStride; | 346 size_t fVertexStride; |
| 340 GrColor fColor; | 347 GrColor fColor; |
| 341 bool fOpaqueVertexColors; | 348 bool fOpaqueVertexColors; |
| 342 bool fWillUseGeoShader; | 349 bool fWillUseGeoShader; |
| 343 bool fHasVertexColor; | 350 bool fHasVertexColor; |
| 344 bool fHasLocalCoords; | 351 bool fHasLocalCoords; |
| 345 | 352 |
| 346 typedef GrPrimitiveProcessor INHERITED; | 353 typedef GrPrimitiveProcessor INHERITED; |
| 347 }; | 354 }; |
| (...skipping 20 matching lines...) Expand all Loading... |
| 368 | 375 |
| 369 GrColor color() const { return fColor; } | 376 GrColor color() const { return fColor; } |
| 370 | 377 |
| 371 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE; | 378 void getInvariantOutputColor(GrInitInvariantOutput* out) const SK_OVERRIDE; |
| 372 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E; | 379 void getInvariantOutputCoverage(GrInitInvariantOutput* out) const SK_OVERRID
E; |
| 373 | 380 |
| 374 virtual void getGLProcessorKey(const GrBatchTracker& bt, | 381 virtual void getGLProcessorKey(const GrBatchTracker& bt, |
| 375 const GrGLCaps& caps, | 382 const GrGLCaps& caps, |
| 376 GrProcessorKeyBuilder* b) const SK_OVERRIDE; | 383 GrProcessorKeyBuilder* b) const SK_OVERRIDE; |
| 377 | 384 |
| 378 GrGLGeometryProcessor* createGLInstance(const GrBatchTracker& bt) const SK_O
VERRIDE; | 385 virtual GrGLPrimitiveProcessor* createGLInstance(const GrBatchTracker& bt, |
| 386 const GrGLCaps& caps) const
SK_OVERRIDE; |
| 387 |
| 388 protected: |
| 389 GrPathProcessor(GrColor color, const SkMatrix& viewMatrix, const SkMatrix& l
ocalMatrix); |
| 379 | 390 |
| 380 private: | 391 private: |
| 381 GrPathProcessor(GrColor color, const SkMatrix& viewMatrix, const SkMatrix& l
ocalMatrix); | 392 bool hasExplicitLocalCoords() const SK_OVERRIDE { return false; } |
| 393 |
| 382 GrColor fColor; | 394 GrColor fColor; |
| 383 | 395 |
| 384 typedef GrPrimitiveProcessor INHERITED; | 396 typedef GrPrimitiveProcessor INHERITED; |
| 385 }; | 397 }; |
| 398 |
| 386 #endif | 399 #endif |
| OLD | NEW |