Clean up duplicate code in Ganesh, moving more function onto GrGLShaderBuilder.
http://codereview.appspot.com/6245082/
git-svn-id: http://skia.googlecode.com/svn/trunk@4116 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp
index e0e8622..0f9331c 100644
--- a/src/gpu/gl/GrGLShaderBuilder.cpp
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp
@@ -34,7 +34,6 @@
, fFSOutputs(sMaxFSOutputs)
, fUsesGS(false)
, fVaryingDims(0)
- , fSamplerMode(kDefault_SamplerMode)
, fComplexCoord(false) {
}
@@ -72,18 +71,23 @@
}
}
-void GrGLShaderBuilder::emitTextureSetup() {
+void GrGLShaderBuilder::setupTextureAccess(SamplerMode samplerMode,
+ int stageNum) {
GrStringBuilder retval;
- switch (fSamplerMode) {
+ fTexFunc = "texture2D";
+ switch (samplerMode) {
case kDefault_SamplerMode:
- // Fall through
- case kProj_SamplerMode:
+ GrAssert(fVaryingDims == fCoordDims);
// Do nothing
break;
+ case kProj_SamplerMode:
+ fTexFunc.append("Proj");
+ break;
case kExplicitDivide_SamplerMode:
retval = "inCoord";
- fFSCode.appendf("\t %s %s = %s%s / %s%s\n",
+ retval.appendS32(stageNum);
+ fFSCode.appendf("\t%s %s = %s%s / %s%s;\n",
GrGLShaderVar::TypeString
(GrSLFloatVectorType(fCoordDims)),
retval.c_str(),
@@ -94,6 +98,7 @@
fSampleCoords = retval;
break;
}
+ fComplexCoord = false;
}
void GrGLShaderBuilder::emitTextureLookup(const char* samplerName,
@@ -101,20 +106,7 @@
if (NULL == coordName) {
coordName = fSampleCoords.c_str();
}
- switch (fSamplerMode) {
- default:
- SkDEBUGFAIL("Unknown sampler mode");
- // Fall through
- case kDefault_SamplerMode:
- // Fall through
- case kExplicitDivide_SamplerMode:
- fFSCode.appendf("texture2D(%s, %s)", samplerName, coordName);
- break;
- case kProj_SamplerMode:
- fFSCode.appendf("texture2DProj(%s, %s)", samplerName, coordName);
- break;
- }
-
+ fFSCode.appendf("%s(%s, %s)", fTexFunc.c_str(), samplerName, coordName);
}
void GrGLShaderBuilder::emitDefaultFetch(const char* outColor,