OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2012 Google Inc. | 2 * Copyright 2012 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 SkGradientShaderPriv_DEFINED | 8 #ifndef SkGradientShaderPriv_DEFINED |
9 #define SkGradientShaderPriv_DEFINED | 9 #define SkGradientShaderPriv_DEFINED |
10 | 10 |
(...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
267 }; | 267 }; |
268 | 268 |
269 /////////////////////////////////////////////////////////////////////////////// | 269 /////////////////////////////////////////////////////////////////////////////// |
270 | 270 |
271 // Base class for GL gradient effects | 271 // Base class for GL gradient effects |
272 class GrGLGradientEffect : public GrGLEffect { | 272 class GrGLGradientEffect : public GrGLEffect { |
273 public: | 273 public: |
274 GrGLGradientEffect(const GrBackendEffectFactory& factory); | 274 GrGLGradientEffect(const GrBackendEffectFactory& factory); |
275 virtual ~GrGLGradientEffect(); | 275 virtual ~GrGLGradientEffect(); |
276 | 276 |
277 virtual void setData(const GrGLUniformManager&, const GrEffectStage&) SK_OVE
RRIDE; | 277 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; |
278 | 278 |
279 protected: | 279 protected: |
280 /** | 280 /** |
281 * Subclasses must reserve the lower kMatrixKeyBitCnt of their key for use b
y | 281 * Subclasses must reserve the lower kMatrixKeyBitCnt of their key for use b
y |
282 * GrGLGradientEffect. | 282 * GrGLGradientEffect. |
283 */ | 283 */ |
284 enum { | 284 enum { |
285 kMatrixKeyBitCnt = GrGLEffectMatrix::kKeyBits, | 285 kMatrixKeyBitCnt = GrGLEffectMatrix::kKeyBits, |
286 kMatrixKeyMask = (1 << kMatrixKeyBitCnt) - 1, | 286 kMatrixKeyMask = (1 << kMatrixKeyBitCnt) - 1, |
287 }; | 287 }; |
288 | 288 |
289 /** | 289 /** |
290 * Subclasses must call this. It will return a value restricted to the lower
kMatrixKeyBitCnt | 290 * Subclasses must call this. It will return a value restricted to the lower
kMatrixKeyBitCnt |
291 * bits. | 291 * bits. |
292 */ | 292 */ |
293 static EffectKey GenMatrixKey(const GrEffectStage& s); | 293 static EffectKey GenMatrixKey(const GrDrawEffect&); |
294 | 294 |
295 /** | 295 /** |
296 * Inserts code to implement the GrGradientEffect's matrix. This should be c
alled before a | 296 * Inserts code to implement the GrGradientEffect's matrix. This should be c
alled before a |
297 * subclass emits its own code. The name of the 2D coords is output via fsCo
ordName and already | 297 * subclass emits its own code. The name of the 2D coords is output via fsCo
ordName and already |
298 * incorporates any perspective division. The caller can also optionally ret
rieve the name of | 298 * incorporates any perspective division. The caller can also optionally ret
rieve the name of |
299 * the varying inserted in the VS and its type, which may be either vec2f or
vec3f depending | 299 * the varying inserted in the VS and its type, which may be either vec2f or
vec3f depending |
300 * upon whether the matrix has perspective or not. It is not necessary to ma
sk the key before | 300 * upon whether the matrix has perspective or not. It is not necessary to ma
sk the key before |
301 * calling. | 301 * calling. |
302 */ | 302 */ |
303 void setupMatrix(GrGLShaderBuilder* builder, | 303 void setupMatrix(GrGLShaderBuilder* builder, |
304 EffectKey key, | 304 EffectKey key, |
305 const char* vertexCoords, | |
306 const char** fsCoordName, | 305 const char** fsCoordName, |
307 const char** vsVaryingName = NULL, | 306 const char** vsVaryingName = NULL, |
308 GrSLType* vsVaryingType = NULL); | 307 GrSLType* vsVaryingType = NULL); |
309 | 308 |
310 // Emits the uniform used as the y-coord to texture samples in derived class
es. Subclasses | 309 // Emits the uniform used as the y-coord to texture samples in derived class
es. Subclasses |
311 // should call this method from their emitCode(). | 310 // should call this method from their emitCode(). |
312 void emitYCoordUniform(GrGLShaderBuilder* builder); | 311 void emitYCoordUniform(GrGLShaderBuilder* builder); |
313 | 312 |
314 // emit code that gets a fragment's color from an expression for t; for now
this always uses the | 313 // emit code that gets a fragment's color from an expression for t; for now
this always uses the |
315 // texture, but for simpler cases we'll be able to lerp. Subclasses should c
all this method from | 314 // texture, but for simpler cases we'll be able to lerp. Subclasses should c
all this method from |
316 // their emitCode(). | 315 // their emitCode(). |
317 void emitColorLookup(GrGLShaderBuilder* builder, | 316 void emitColorLookup(GrGLShaderBuilder* builder, |
318 const char* gradientTValue, | 317 const char* gradientTValue, |
319 const char* outputColor, | 318 const char* outputColor, |
320 const char* inputColor, | 319 const char* inputColor, |
321 const GrGLShaderBuilder::TextureSampler&); | 320 const GrGLShaderBuilder::TextureSampler&); |
322 | 321 |
323 private: | 322 private: |
| 323 static const GrEffect::CoordsType kCoordsType = GrEffect::kLocal_CoordsType; |
| 324 |
324 SkScalar fCachedYCoord; | 325 SkScalar fCachedYCoord; |
325 GrGLUniformManager::UniformHandle fFSYUni; | 326 GrGLUniformManager::UniformHandle fFSYUni; |
326 GrGLEffectMatrix fEffectMatrix; | 327 GrGLEffectMatrix fEffectMatrix; |
327 | 328 |
328 typedef GrGLEffect INHERITED; | 329 typedef GrGLEffect INHERITED; |
329 }; | 330 }; |
330 | 331 |
331 #endif | 332 #endif |
332 | 333 |
333 #endif | 334 #endif |
OLD | NEW |