Make 0-texture GrCustomStages work.
Review URL: http://codereview.appspot.com/6448080/
git-svn-id: http://skia.googlecode.com/svn/trunk@4858 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLProgram.cpp b/src/gpu/gl/GrGLProgram.cpp
index ec68eae..3590428 100644
--- a/src/gpu/gl/GrGLProgram.cpp
+++ b/src/gpu/gl/GrGLProgram.cpp
@@ -977,10 +977,17 @@
void GrGLProgram::initSamplerUniforms() {
GL_CALL(UseProgram(fProgramID));
- // init sampler unis and set bogus values for state tracking
for (int s = 0; s < GrDrawState::kNumStages; ++s) {
- if (GrGLUniformManager::kInvalidUniformHandle != fUniforms.fStages[s].fSamplerUni) {
- fUniformManager.setSampler(fUniforms.fStages[s].fSamplerUni, s);
+ int count = fUniforms.fStages[s].fSamplerUniforms.count();
+ // FIXME: We're still always reserving one texture per stage. After GrTextureParams are
+ // expressed by the custom stage rather than the GrSamplerState we can move texture binding
+ // into GrGLProgram and it should be easier to fix this.
+ GrAssert(count <= 1);
+ for (int t = 0; t < count; ++t) {
+ UniformHandle uh = fUniforms.fStages[s].fSamplerUniforms[t];
+ if (GrGLUniformManager::kInvalidUniformHandle != uh) {
+ fUniformManager.setSampler(uh, s);
+ }
}
}
}
@@ -1029,8 +1036,10 @@
}
const char* samplerName;
- uniforms.fSamplerUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
- kSampler2D_GrSLType, "Sampler", &samplerName);
+ uniforms.fSamplerUniforms.push_back(builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
+ kSampler2D_GrSLType,
+ "Sampler",
+ &samplerName));
const char *varyingVSName, *varyingFSName;
builder->addVarying(GrSLFloatVectorType(builder->fVaryingDims),