Index: src/gpu/gl/GrGLShaderBuilder.cpp |
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp |
index 40ca0f2567fadddc842ec34376005104e83c66bc..40a0888362cc900c42ef15840e6447755a8ca749 100644 |
--- a/src/gpu/gl/GrGLShaderBuilder.cpp |
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp |
@@ -289,13 +289,13 @@ void GrGLShaderBuilder::fsAppendTextureLookup(const GrGLShaderBuilder::TextureSa |
} |
void GrGLShaderBuilder::fsAppendTextureLookupAndModulate( |
- const char* modulation, |
+ const GrGLSLExpr4& modulation, |
const GrGLShaderBuilder::TextureSampler& sampler, |
const char* coordName, |
GrSLType varyingType) { |
SkString lookup; |
this->appendTextureLookup(&lookup, sampler, coordName, varyingType); |
- fFSCode.append((GrGLSLExpr4(modulation) * GrGLSLExpr4(lookup)).c_str()); |
+ fFSCode.append((modulation * GrGLSLExpr4(lookup)).c_str()); |
} |
GrGLShaderBuilder::DstReadKey GrGLShaderBuilder::KeyForDstRead(const GrTexture* dstCopy, |
@@ -516,45 +516,24 @@ void GrGLShaderBuilder::createAndEmitEffects(GrGLProgramEffectsBuilder* programE |
const EffectKey effectKeys[], |
int effectCnt, |
GrGLSLExpr4* fsInOutColor) { |
- bool effectEmitted = false; |
- |
- GrGLSLExpr4 inColor = *fsInOutColor; |
- GrGLSLExpr4 outColor; |
- |
for (int e = 0; e < effectCnt; ++e) { |
SkASSERT(NULL != effectStages[e] && NULL != effectStages[e]->getEffect()); |
const GrEffectStage& stage = *effectStages[e]; |
CodeStage::AutoStageRestore csar(&fCodeStage, &stage); |
- if (inColor.isZeros()) { |
- SkString inColorName; |
- |
- // Effects have no way to communicate zeros, they treat an empty string as ones. |
- this->nameVariable(&inColorName, '\0', "input"); |
- this->fsCodeAppendf("\tvec4 %s = %s;\n", inColorName.c_str(), inColor.c_str()); |
- inColor = inColorName; |
- } |
- |
// create var to hold stage result |
SkString outColorName; |
this->nameVariable(&outColorName, '\0', "output"); |
this->fsCodeAppendf("\tvec4 %s;\n", outColorName.c_str()); |
- outColor = outColorName; |
- |
programEffectsBuilder->emitEffect(stage, |
effectKeys[e], |
- outColor.c_str(), |
- inColor.isOnes() ? NULL : inColor.c_str(), |
+ outColorName.c_str(), |
+ *fsInOutColor, |
fCodeStage.stageIndex()); |
- inColor = outColor; |
- effectEmitted = true; |
- } |
- |
- if (effectEmitted) { |
- *fsInOutColor = outColor; |
+ *fsInOutColor = GrGLSLExpr4(outColorName); |
} |
} |
@@ -747,7 +726,7 @@ GrGLFullShaderBuilder::GrGLFullShaderBuilder(GrGpuGL* gpu, |
const char *vsName, *fsName; |
this->addVarying(kVec4f_GrSLType, "Color", &vsName, &fsName); |
this->vsCodeAppendf("\t%s = %s;\n", vsName, color_attribute_name()); |
- this->setInputColor(fsName); |
+ this->setInputColor(GrGLSLExpr4(fsName)); |
} |
if (GrGLProgramDesc::kAttribute_ColorInput == header.fCoverageInput) { |
@@ -755,7 +734,7 @@ GrGLFullShaderBuilder::GrGLFullShaderBuilder(GrGpuGL* gpu, |
const char *vsName, *fsName; |
this->addVarying(kVec4f_GrSLType, "Coverage", &vsName, &fsName); |
this->vsCodeAppendf("\t%s = %s;\n", vsName, coverage_attribute_name()); |
- this->setInputCoverage(fsName); |
+ this->setInputCoverage(GrGLSLExpr4(fsName)); |
} |
} |