| Index: src/effects/gradients/SkGradientShaderPriv.h
|
| diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
|
| index 96135378032d52ade5e27b2c573408206543eb37..61acf3c8fe8075d015ba164d7577f775fdfd5fa6 100644
|
| --- a/src/effects/gradients/SkGradientShaderPriv.h
|
| +++ b/src/effects/gradients/SkGradientShaderPriv.h
|
| @@ -379,6 +379,29 @@ public:
|
| virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVERRIDE;
|
|
|
| protected:
|
| + /**
|
| + * Subclasses must call this. It will return a key for the part of the shader code controlled
|
| + * by the base class. The subclasses must stick it in their key and then pass it to the below
|
| + * emit* functions from their emitCode function.
|
| + */
|
| + static uint32_t GenBaseGradientKey(const GrDrawEffect&);
|
| +
|
| + // Emits the uniform used as the y-coord to texture samples in derived classes. Subclasses
|
| + // should call this method from their emitCode().
|
| + void emitUniforms(GrGLShaderBuilder* builder, uint32_t baseKey);
|
| +
|
| +
|
| + // emit code that gets a fragment's color from an expression for t; Has branches for 3 separate
|
| + // control flows inside -- 2 color gradients, 3 color symmetric gradients (both using
|
| + // native GLSL mix), and 4+ color gradients that use the traditional texture lookup.
|
| + void emitColor(GrGLShaderBuilder* builder,
|
| + const char* gradientTValue,
|
| + uint32_t baseKey,
|
| + const char* outputColor,
|
| + const char* inputColor,
|
| + const TextureSamplerArray& samplers);
|
| +
|
| +private:
|
| enum {
|
| kPremulTypeKeyBitCnt = 1,
|
| kPremulTypeMask = 1,
|
| @@ -393,45 +416,24 @@ protected:
|
| // and combine with the result of GenBaseGradientKey.
|
| kBaseKeyBitCnt = (kPremulTypeKeyBitCnt + kColorKeyBitCnt)
|
| };
|
| + GR_STATIC_ASSERT(kBaseKeyBitCnt <= 32);
|
|
|
| - static SkGradientShaderBase::GpuColorType ColorTypeFromKey(EffectKey key){
|
| - if (kTwoColorKey == (key & kColorKeyMask)) {
|
| + static SkGradientShaderBase::GpuColorType ColorTypeFromKey(uint32_t baseKey){
|
| + if (kTwoColorKey == (baseKey & kColorKeyMask)) {
|
| return SkGradientShaderBase::kTwo_GpuColorType;
|
| - } else if (kThreeColorKey == (key & kColorKeyMask)) {
|
| + } else if (kThreeColorKey == (baseKey & kColorKeyMask)) {
|
| return SkGradientShaderBase::kThree_GpuColorType;
|
| } else {return SkGradientShaderBase::kTexture_GpuColorType;}
|
| }
|
|
|
| - static GrGradientEffect::PremulType PremulTypeFromKey(EffectKey key){
|
| - if (kPremulBeforeInterpKey == (key & kPremulTypeMask)) {
|
| + static GrGradientEffect::PremulType PremulTypeFromKey(uint32_t baseKey){
|
| + if (kPremulBeforeInterpKey == (baseKey & kPremulTypeMask)) {
|
| return GrGradientEffect::kBeforeInterp_PremulType;
|
| } else {
|
| return GrGradientEffect::kAfterInterp_PremulType;
|
| }
|
| }
|
|
|
| - /**
|
| - * Subclasses must call this. It will return a value restricted to the lower kBaseKeyBitCnt
|
| - * bits.
|
| - */
|
| - static EffectKey GenBaseGradientKey(const GrDrawEffect&);
|
| -
|
| - // Emits the uniform used as the y-coord to texture samples in derived classes. Subclasses
|
| - // should call this method from their emitCode().
|
| - void emitUniforms(GrGLShaderBuilder* builder, EffectKey key);
|
| -
|
| -
|
| - // emit code that gets a fragment's color from an expression for t; Has branches for 3 separate
|
| - // control flows inside -- 2 color gradients, 3 color symmetric gradients (both using
|
| - // native GLSL mix), and 4+ color gradients that use the traditional texture lookup.
|
| - void emitColor(GrGLShaderBuilder* builder,
|
| - const char* gradientTValue,
|
| - EffectKey key,
|
| - const char* outputColor,
|
| - const char* inputColor,
|
| - const TextureSamplerArray& samplers);
|
| -
|
| -private:
|
| SkScalar fCachedYCoord;
|
| GrGLUniformManager::UniformHandle fFSYUni;
|
| GrGLUniformManager::UniformHandle fColorStartUni;
|
|
|