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,