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 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
319 * SweepGradient | 319 * SweepGradient |
320 * The angle from the origin of texture coordinates in post-matrix space | 320 * The angle from the origin of texture coordinates in post-matrix space |
321 * determines the gradient value. | 321 * determines the gradient value. |
322 */ | 322 */ |
323 | 323 |
324 class GrTextureStripAtlas; | 324 class GrTextureStripAtlas; |
325 | 325 |
326 // Base class for Gr gradient effects | 326 // Base class for Gr gradient effects |
327 class GrGradientEffect : public GrFragmentProcessor { | 327 class GrGradientEffect : public GrFragmentProcessor { |
328 public: | 328 public: |
| 329 class GLSLProcessor; |
329 | 330 |
330 GrGradientEffect(GrContext* ctx, | 331 GrGradientEffect(GrContext* ctx, |
331 const SkGradientShaderBase& shader, | 332 const SkGradientShaderBase& shader, |
332 const SkMatrix& matrix, | 333 const SkMatrix& matrix, |
333 SkShader::TileMode tileMode); | 334 SkShader::TileMode tileMode); |
334 | 335 |
335 virtual ~GrGradientEffect(); | 336 virtual ~GrGradientEffect(); |
336 | 337 |
337 bool useAtlas() const { return SkToBool(-1 != fRow); } | 338 bool useAtlas() const { return SkToBool(-1 != fRow); } |
338 SkScalar getYCoord() const { return fYCoord; }; | 339 SkScalar getYCoord() const { return fYCoord; }; |
339 | 340 |
340 SkGradientShaderBase::GpuColorType getColorType() const { return fColorType;
} | 341 SkGradientShaderBase::GpuColorType getColorType() const { return fColorType;
} |
341 | 342 |
342 enum PremulType { | 343 enum PremulType { |
343 kBeforeInterp_PremulType, | 344 kBeforeInterp_PremulType, |
344 kAfterInterp_PremulType, | 345 kAfterInterp_PremulType, |
345 }; | 346 }; |
346 | 347 |
347 PremulType getPremulType() const { return fPremulType; } | 348 PremulType getPremulType() const { return fPremulType; } |
348 | 349 |
349 const SkColor* getColors(int pos) const { | 350 const SkColor* getColors(int pos) const { |
350 SkASSERT(fColorType != SkGradientShaderBase::kTexture_GpuColorType); | 351 SkASSERT(fColorType != SkGradientShaderBase::kTexture_GpuColorType); |
351 SkASSERT((pos-1) <= fColorType); | 352 SkASSERT((pos-1) <= fColorType); |
352 return &fColors[pos]; | 353 return &fColors[pos]; |
353 } | 354 } |
354 | 355 |
355 protected: | 356 protected: |
356 | |
357 /** Populates a pair of arrays with colors and stop info to construct a rand
om gradient. | 357 /** Populates a pair of arrays with colors and stop info to construct a rand
om gradient. |
358 The function decides whether stop values should be used or not. The retu
rn value indicates | 358 The function decides whether stop values should be used or not. The retu
rn value indicates |
359 the number of colors, which will be capped by kMaxRandomGradientColors.
colors should be | 359 the number of colors, which will be capped by kMaxRandomGradientColors.
colors should be |
360 sized to be at least kMaxRandomGradientColors. stops is a pointer to an
array of at least | 360 sized to be at least kMaxRandomGradientColors. stops is a pointer to an
array of at least |
361 size kMaxRandomGradientColors. It may be updated to nullptr, indicating
that nullptr should be | 361 size kMaxRandomGradientColors. It may be updated to nullptr, indicating
that nullptr should be |
362 passed to the gradient factory rather than the array. | 362 passed to the gradient factory rather than the array. |
363 */ | 363 */ |
364 static const int kMaxRandomGradientColors = 4; | 364 static const int kMaxRandomGradientColors = 4; |
365 static int RandomGradientParams(SkRandom* r, | 365 static int RandomGradientParams(SkRandom* r, |
366 SkColor colors[kMaxRandomGradientColors], | 366 SkColor colors[kMaxRandomGradientColors], |
(...skipping 18 matching lines...) Expand all Loading... |
385 SkGradientShaderBase::GpuColorType fColorType; | 385 SkGradientShaderBase::GpuColorType fColorType; |
386 SkColor fColors[3]; // More than 3 colors we use texture | 386 SkColor fColors[3]; // More than 3 colors we use texture |
387 PremulType fPremulType; // This only changes behavior for two and three colo
r special cases. | 387 PremulType fPremulType; // This only changes behavior for two and three colo
r special cases. |
388 // It is already baked into to the table for texture
gradients. | 388 // It is already baked into to the table for texture
gradients. |
389 typedef GrFragmentProcessor INHERITED; | 389 typedef GrFragmentProcessor INHERITED; |
390 | 390 |
391 }; | 391 }; |
392 | 392 |
393 /////////////////////////////////////////////////////////////////////////////// | 393 /////////////////////////////////////////////////////////////////////////////// |
394 | 394 |
395 // Base class for GL gradient effects | 395 // Base class for GLSL gradient effects |
396 class GrGLGradientEffect : public GrGLSLFragmentProcessor { | 396 class GrGradientEffect::GLSLProcessor : public GrGLSLFragmentProcessor { |
397 public: | 397 public: |
398 GrGLGradientEffect(); | 398 GLSLProcessor(); |
399 | 399 |
400 protected: | 400 protected: |
401 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 401 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
402 | 402 |
403 protected: | 403 protected: |
404 /** | 404 /** |
405 * Subclasses must call this. It will return a key for the part of the shade
r code controlled | 405 * Subclasses must call this. It will return a key for the part of the shade
r code controlled |
406 * by the base class. The subclasses must stick it in their key and then pas
s it to the below | 406 * by the base class. The subclasses must stick it in their key and then pas
s it to the below |
407 * emit* functions from their emitCode function. | 407 * emit* functions from their emitCode function. |
408 */ | 408 */ |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
440 GrGLSLProgramDataManager::UniformHandle fColorStartUni; | 440 GrGLSLProgramDataManager::UniformHandle fColorStartUni; |
441 GrGLSLProgramDataManager::UniformHandle fColorMidUni; | 441 GrGLSLProgramDataManager::UniformHandle fColorMidUni; |
442 GrGLSLProgramDataManager::UniformHandle fColorEndUni; | 442 GrGLSLProgramDataManager::UniformHandle fColorEndUni; |
443 | 443 |
444 typedef GrGLSLFragmentProcessor INHERITED; | 444 typedef GrGLSLFragmentProcessor INHERITED; |
445 }; | 445 }; |
446 | 446 |
447 #endif | 447 #endif |
448 | 448 |
449 #endif | 449 #endif |
OLD | NEW |