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 GrPrimitiveProcessor_DEFINED | 8 #ifndef GrPrimitiveProcessor_DEFINED |
9 #define GrPrimitiveProcessor_DEFINED | 9 #define GrPrimitiveProcessor_DEFINED |
10 | 10 |
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
144 * GrPrimitiveProcessor defines an interface which all subclasses must implement
. All | 144 * GrPrimitiveProcessor defines an interface which all subclasses must implement
. All |
145 * GrPrimitiveProcessors must proivide seed color and coverage for the Ganesh co
lor / coverage | 145 * GrPrimitiveProcessors must proivide seed color and coverage for the Ganesh co
lor / coverage |
146 * pipelines, and they must provide some notion of equality | 146 * pipelines, and they must provide some notion of equality |
147 */ | 147 */ |
148 class GrPrimitiveProcessor : public GrProcessor { | 148 class GrPrimitiveProcessor : public GrProcessor { |
149 public: | 149 public: |
150 // Only the GrGeometryProcessor subclass actually has a geo shader or vertex
attributes, but | 150 // Only the GrGeometryProcessor subclass actually has a geo shader or vertex
attributes, but |
151 // we put these calls on the base class to prevent having to cast | 151 // we put these calls on the base class to prevent having to cast |
152 virtual bool willUseGeoShader() const = 0; | 152 virtual bool willUseGeoShader() const = 0; |
153 | 153 |
154 /* | |
155 * This is a safeguard to prevent GrPrimitiveProcessor's from going beyond p
latform specific | |
156 * attribute limits. This number can almost certainly be raised if required. | |
157 */ | |
158 static const int kMaxVertexAttribs = 8; | |
159 | |
160 struct Attribute { | 154 struct Attribute { |
161 Attribute() | 155 Attribute() |
162 : fName(nullptr) | 156 : fName(nullptr) |
163 , fType(kFloat_GrVertexAttribType) | 157 , fType(kFloat_GrVertexAttribType) |
164 , fOffset(0) {} | 158 , fOffset(0) {} |
165 Attribute(const char* name, GrVertexAttribType type, | 159 Attribute(const char* name, GrVertexAttribType type, |
166 GrSLPrecision precision = kDefault_GrSLPrecision) | 160 GrSLPrecision precision = kDefault_GrSLPrecision) |
167 : fName(name) | 161 : fName(name) |
168 , fType(type) | 162 , fType(type) |
169 , fOffset(SkAlign4(GrVertexAttribTypeSize(type))) | 163 , fOffset(SkAlign4(GrVertexAttribTypeSize(type))) |
170 , fPrecision(precision) {} | 164 , fPrecision(precision) {} |
171 const char* fName; | 165 const char* fName; |
172 GrVertexAttribType fType; | 166 GrVertexAttribType fType; |
173 size_t fOffset; | 167 size_t fOffset; |
174 GrSLPrecision fPrecision; | 168 GrSLPrecision fPrecision; |
175 }; | 169 }; |
176 | 170 |
177 int numAttribs() const { return fNumAttribs; } | 171 int numAttribs() const { return fAttribs.count(); } |
178 const Attribute& getAttrib(int index) const { | 172 const Attribute& getAttrib(int index) const { return fAttribs[index]; } |
179 SkASSERT(index < fNumAttribs); | |
180 return fAttribs[index]; | |
181 } | |
182 | 173 |
183 // Returns the vertex stride of the GP. A common use case is to request geo
metry from a | 174 // Returns the vertex stride of the GP. A common use case is to request geo
metry from a |
184 // drawtarget based off of the stride, and to populate this memory using an
implicit array of | 175 // drawtarget based off of the stride, and to populate this memory using an
implicit array of |
185 // structs. In this case, it is best to assert the vertexstride == sizeof(V
ertexStruct). | 176 // structs. In this case, it is best to assert the vertexstride == sizeof(V
ertexStruct). |
186 size_t getVertexStride() const { return fVertexStride; } | 177 size_t getVertexStride() const { return fVertexStride; } |
187 | 178 |
188 /** | 179 /** |
189 * Computes a transformKey from an array of coord transforms. Will only look
at the first | 180 * Computes a transformKey from an array of coord transforms. Will only look
at the first |
190 * <numCoords> transforms in the array. | 181 * <numCoords> transforms in the array. |
191 * | 182 * |
(...skipping 28 matching lines...) Expand all Loading... |
220 virtual GrPixelLocalStorageState getPixelLocalStorageState() const { | 211 virtual GrPixelLocalStorageState getPixelLocalStorageState() const { |
221 return kDisabled_GrPixelLocalStorageState; | 212 return kDisabled_GrPixelLocalStorageState; |
222 } | 213 } |
223 | 214 |
224 /** | 215 /** |
225 * If non-null, overrides the dest color returned by GrGLSLFragmentShaderBui
lder::dstColor(). | 216 * If non-null, overrides the dest color returned by GrGLSLFragmentShaderBui
lder::dstColor(). |
226 */ | 217 */ |
227 virtual const char* getDestColorOverride() const { return nullptr; } | 218 virtual const char* getDestColorOverride() const { return nullptr; } |
228 | 219 |
229 protected: | 220 protected: |
230 GrPrimitiveProcessor() | 221 GrPrimitiveProcessor() : fVertexStride(0) {} |
231 : fNumAttribs(0) | |
232 , fVertexStride(0) {} | |
233 | 222 |
234 Attribute fAttribs[kMaxVertexAttribs]; | 223 enum { kPreallocAttribCnt = 8 }; |
235 int fNumAttribs; | 224 SkSTArray<kPreallocAttribCnt, Attribute> fAttribs; |
236 size_t fVertexStride; | 225 size_t fVertexStride; |
237 | 226 |
238 private: | 227 private: |
239 void notifyRefCntIsZero() const final {}; | 228 void notifyRefCntIsZero() const final {}; |
240 virtual bool hasExplicitLocalCoords() const = 0; | 229 virtual bool hasExplicitLocalCoords() const = 0; |
241 | 230 |
242 typedef GrProcessor INHERITED; | 231 typedef GrProcessor INHERITED; |
243 }; | 232 }; |
244 | 233 |
245 #endif | 234 #endif |
OLD | NEW |