| 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 |
| 11 #include "GrColor.h" | 11 #include "GrColor.h" |
| 12 #include "GrGeometryData.h" | |
| 13 #include "GrProcessor.h" | 12 #include "GrProcessor.h" |
| 14 #include "GrShaderVar.h" | 13 #include "GrShaderVar.h" |
| 15 | 14 |
| 16 /* | 15 /* |
| 17 * The GrPrimitiveProcessor represents some kind of geometric primitive. This i
ncludes the shape | 16 * The GrPrimitiveProcessor represents some kind of geometric primitive. This i
ncludes the shape |
| 18 * of the primitive and the inherent color of the primitive. The GrPrimitivePro
cessor is | 17 * of the primitive and the inherent color of the primitive. The GrPrimitivePro
cessor is |
| 19 * responsible for providing a color and coverage input into the Ganesh renderin
g pipeline. Through | 18 * responsible for providing a color and coverage input into the Ganesh renderin
g pipeline. Through |
| 20 * optimization, Ganesh may decide a different color, no color, and / or no cove
rage are required | 19 * optimization, Ganesh may decide a different color, no color, and / or no cove
rage are required |
| 21 * from the GrPrimitiveProcessor, so the GrPrimitiveProcessor must be able to su
pport this | 20 * from the GrPrimitiveProcessor, so the GrPrimitiveProcessor must be able to su
pport this |
| 22 * functionality. We also use the GrPrimitiveProcessor to make batching decisio
ns. | 21 * functionality. We also use the GrPrimitiveProcessor to make batching decisio
ns. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 39 * it draws. Each primitive draw will bundle all required data to perform the d
raw, and these | 38 * it draws. Each primitive draw will bundle all required data to perform the d
raw, and these |
| 40 * bundles of data will be owned by an instance of the associated GrPrimitivePro
cessor. Bundles | 39 * bundles of data will be owned by an instance of the associated GrPrimitivePro
cessor. Bundles |
| 41 * can be updated alongside the GrBatchTracker struct itself, ultimately allowin
g the | 40 * can be updated alongside the GrBatchTracker struct itself, ultimately allowin
g the |
| 42 * GrPrimitiveProcessor complete control of how it gets data into the fragment s
hader as long as | 41 * GrPrimitiveProcessor complete control of how it gets data into the fragment s
hader as long as |
| 43 * it emits the appropriate color, or none at all, as directed. | 42 * it emits the appropriate color, or none at all, as directed. |
| 44 */ | 43 */ |
| 45 | 44 |
| 46 /* | 45 /* |
| 47 * A struct for tracking batching decisions. While this lives on GrOptState, it
is managed | 46 * A struct for tracking batching decisions. While this lives on GrOptState, it
is managed |
| 48 * entirely by the derived classes of the GP. | 47 * entirely by the derived classes of the GP. |
| 48 * // TODO this was an early attempt at handling out of order batching. It shou
ld be |
| 49 * used carefully as it is being replaced by GrBatch |
| 49 */ | 50 */ |
| 50 class GrBatchTracker { | 51 class GrBatchTracker { |
| 51 public: | 52 public: |
| 52 template <typename T> const T& cast() const { | 53 template <typename T> const T& cast() const { |
| 53 SkASSERT(sizeof(T) <= kMaxSize); | 54 SkASSERT(sizeof(T) <= kMaxSize); |
| 54 return *reinterpret_cast<const T*>(fData.get()); | 55 return *reinterpret_cast<const T*>(fData.get()); |
| 55 } | 56 } |
| 56 | 57 |
| 57 template <typename T> T* cast() { | 58 template <typename T> T* cast() { |
| 58 SkASSERT(sizeof(T) <= kMaxSize); | 59 SkASSERT(sizeof(T) <= kMaxSize); |
| 59 return reinterpret_cast<T*>(fData.get()); | 60 return reinterpret_cast<T*>(fData.get()); |
| 60 } | 61 } |
| 61 | 62 |
| 62 static const size_t kMaxSize = 32; | 63 static const size_t kMaxSize = 32; |
| 63 | 64 |
| 64 private: | 65 private: |
| 65 SkAlignedSStorage<kMaxSize> fData; | 66 SkAlignedSStorage<kMaxSize> fData; |
| 66 }; | 67 }; |
| 67 | 68 |
| 69 class GrIndexBufferAllocPool; |
| 68 class GrGLCaps; | 70 class GrGLCaps; |
| 69 class GrGLPrimitiveProcessor; | 71 class GrGLPrimitiveProcessor; |
| 70 class GrOptDrawState; | 72 class GrOptDrawState; |
| 73 class GrVertexBufferAllocPool; |
| 71 | 74 |
| 72 struct GrInitInvariantOutput; | 75 struct GrInitInvariantOutput; |
| 73 | 76 |
| 74 | |
| 75 /* | 77 /* |
| 76 * This enum is shared by GrPrimitiveProcessors and GrGLPrimitiveProcessors to c
oordinate shaders | 78 * This enum is shared by GrPrimitiveProcessors and GrGLPrimitiveProcessors to c
oordinate shaders |
| 77 * with vertex attributes / uniforms. | 79 * with vertex attributes / uniforms. |
| 78 */ | 80 */ |
| 79 enum GrGPInput { | 81 enum GrGPInput { |
| 80 kAllOnes_GrGPInput, | 82 kAllOnes_GrGPInput, |
| 81 kAttribute_GrGPInput, | 83 kAttribute_GrGPInput, |
| 82 kUniform_GrGPInput, | 84 kUniform_GrGPInput, |
| 83 kIgnored_GrGPInput, | 85 kIgnored_GrGPInput, |
| 84 }; | 86 }; |
| (...skipping 322 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 407 | 409 |
| 408 private: | 410 private: |
| 409 bool hasExplicitLocalCoords() const SK_OVERRIDE { return false; } | 411 bool hasExplicitLocalCoords() const SK_OVERRIDE { return false; } |
| 410 | 412 |
| 411 GrColor fColor; | 413 GrColor fColor; |
| 412 | 414 |
| 413 typedef GrPrimitiveProcessor INHERITED; | 415 typedef GrPrimitiveProcessor INHERITED; |
| 414 }; | 416 }; |
| 415 | 417 |
| 416 #endif | 418 #endif |
| OLD | NEW |