| Index: src/effects/gradients/SkGradientShader.cpp
|
| diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
|
| index fb8a7e5c8f04d1414d7443fd367547267ac846d6..5014c35ee0e647ce65b989513c59f480d554c9d9 100644
|
| --- a/src/effects/gradients/SkGradientShader.cpp
|
| +++ b/src/effects/gradients/SkGradientShader.cpp
|
| @@ -862,15 +862,15 @@ GrGLGradientEffect::GrGLGradientEffect(const GrBackendEffectFactory& factory)
|
|
|
| GrGLGradientEffect::~GrGLGradientEffect() { }
|
|
|
| -void GrGLGradientEffect::emitUniforms(GrGLShaderBuilder* builder, EffectKey key) {
|
| +void GrGLGradientEffect::emitUniforms(GrGLShaderBuilder* builder, uint32_t baseKey) {
|
|
|
| - if (SkGradientShaderBase::kTwo_GpuColorType == ColorTypeFromKey(key)) { // 2 Color case
|
| + if (SkGradientShaderBase::kTwo_GpuColorType == ColorTypeFromKey(baseKey)) { // 2 Color case
|
| fColorStartUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| kVec4f_GrSLType, "GradientStartColor");
|
| fColorEndUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| kVec4f_GrSLType, "GradientEndColor");
|
|
|
| - } else if (SkGradientShaderBase::kThree_GpuColorType == ColorTypeFromKey(key)){ // 3 Color Case
|
| + } else if (SkGradientShaderBase::kThree_GpuColorType == ColorTypeFromKey(baseKey)){ // 3 Color Case
|
| fColorStartUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| kVec4f_GrSLType, "GradientStartColor");
|
| fColorMidUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
|
| @@ -944,10 +944,10 @@ void GrGLGradientEffect::setData(const GrGLUniformManager& uman,
|
| }
|
|
|
|
|
| -GrGLEffect::EffectKey GrGLGradientEffect::GenBaseGradientKey(const GrDrawEffect& drawEffect) {
|
| +uint32_t GrGLGradientEffect::GenBaseGradientKey(const GrDrawEffect& drawEffect) {
|
| const GrGradientEffect& e = drawEffect.castEffect<GrGradientEffect>();
|
|
|
| - EffectKey key = 0;
|
| + uint32_t key = 0;
|
|
|
| if (SkGradientShaderBase::kTwo_GpuColorType == e.getColorType()) {
|
| key |= kTwoColorKey;
|
| @@ -964,11 +964,11 @@ GrGLEffect::EffectKey GrGLGradientEffect::GenBaseGradientKey(const GrDrawEffect&
|
|
|
| void GrGLGradientEffect::emitColor(GrGLShaderBuilder* builder,
|
| const char* gradientTValue,
|
| - EffectKey key,
|
| + uint32_t baseKey,
|
| const char* outputColor,
|
| const char* inputColor,
|
| const TextureSamplerArray& samplers) {
|
| - if (SkGradientShaderBase::kTwo_GpuColorType == ColorTypeFromKey(key)){
|
| + if (SkGradientShaderBase::kTwo_GpuColorType == ColorTypeFromKey(baseKey)){
|
| builder->fsCodeAppendf("\tvec4 colorTemp = mix(%s, %s, clamp(%s, 0.0, 1.0));\n",
|
| builder->getUniformVariable(fColorStartUni).c_str(),
|
| builder->getUniformVariable(fColorEndUni).c_str(),
|
| @@ -978,13 +978,13 @@ void GrGLGradientEffect::emitColor(GrGLShaderBuilder* builder,
|
| // The gradient SkShader reporting opaque is more restrictive than necessary in the two pt
|
| // case. Make sure the key reflects this optimization (and note that it can use the same
|
| // shader as thekBeforeIterp case). This same optimization applies to the 3 color case below.
|
| - if (GrGradientEffect::kAfterInterp_PremulType == PremulTypeFromKey(key)) {
|
| + if (GrGradientEffect::kAfterInterp_PremulType == PremulTypeFromKey(baseKey)) {
|
| builder->fsCodeAppend("\tcolorTemp.rgb *= colorTemp.a;\n");
|
| }
|
|
|
| builder->fsCodeAppendf("\t%s = %s;\n", outputColor,
|
| (GrGLSLExpr4(inputColor) * GrGLSLExpr4("colorTemp")).c_str());
|
| - } else if (SkGradientShaderBase::kThree_GpuColorType == ColorTypeFromKey(key)){
|
| + } else if (SkGradientShaderBase::kThree_GpuColorType == ColorTypeFromKey(baseKey)){
|
| builder->fsCodeAppendf("\tfloat oneMinus2t = 1.0 - (2.0 * (%s));\n",
|
| gradientTValue);
|
| builder->fsCodeAppendf("\tvec4 colorTemp = clamp(oneMinus2t, 0.0, 1.0) * %s;\n",
|
| @@ -1002,7 +1002,7 @@ void GrGLGradientEffect::emitColor(GrGLShaderBuilder* builder,
|
| }
|
| builder->fsCodeAppendf("\tcolorTemp += clamp(-oneMinus2t, 0.0, 1.0) * %s;\n",
|
| builder->getUniformVariable(fColorEndUni).c_str());
|
| - if (GrGradientEffect::kAfterInterp_PremulType == PremulTypeFromKey(key)) {
|
| + if (GrGradientEffect::kAfterInterp_PremulType == PremulTypeFromKey(baseKey)) {
|
| builder->fsCodeAppend("\tcolorTemp.rgb *= colorTemp.a;\n");
|
| }
|
|
|
|
|