First stage of reworking custom shader infrastructure to allow
radial mappings.

http://codereview.appspot.com/6239043/



git-svn-id: http://skia.googlecode.com/svn/trunk@4040 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/effects/GrConvolutionEffect.cpp b/src/gpu/effects/GrConvolutionEffect.cpp
index 29d1573..8ccf585 100644
--- a/src/gpu/effects/GrConvolutionEffect.cpp
+++ b/src/gpu/effects/GrConvolutionEffect.cpp
@@ -21,23 +21,24 @@
                           const GrCustomStage* stage);
     virtual void setupVSUnis(VarArray* vsUnis, int stage) SK_OVERRIDE;
     virtual void setupFSUnis(VarArray* fsUnis, int stage) SK_OVERRIDE;
-    virtual void emitVS(GrStringBuilder* code,
+    virtual void emitVS(GrGLShaderBuilder* state,
                         const char* vertexCoords) SK_OVERRIDE;
-    virtual void emitFS(GrStringBuilder* code,
+    virtual void emitFS(GrGLShaderBuilder* state,
                         const char* outputColor,
                         const char* inputColor,
-                        const char* samplerName,
-                        const char* sampleCoords) SK_OVERRIDE;
+                        const char* samplerName) SK_OVERRIDE;
     virtual void initUniforms(const GrGLInterface*, int programID) SK_OVERRIDE;
 
-    virtual void setData(const GrGLInterface*, const GrCustomStage*,
-                         const GrGLTexture*) SK_OVERRIDE;
+    virtual void setData(const GrGLInterface*, 
+                         const GrGLTexture&,
+                         GrCustomStage*,
+                         int stageNum) SK_OVERRIDE;
 
     static inline StageKey GenKey(const GrCustomStage* s);
     
 protected:
 
-    int            fKernelWidth;
+    unsigned int   fKernelWidth;
     GrGLShaderVar* fKernelVar;
     GrGLShaderVar* fImageIncrementVar;
  
@@ -89,8 +90,9 @@
     fsUnis->push_back(*fImageIncrementVar).setEmitPrecision(false);
 }
 
-void GrGLConvolutionEffect::emitVS(GrStringBuilder* code,
+void GrGLConvolutionEffect::emitVS(GrGLShaderBuilder* state,
                         const char* vertexCoords) {
+    GrStringBuilder* code = &state->fVSCode;
     float scale = (fKernelWidth - 1) * 0.5f;
     code->appendf("\t\t%s -= vec2(%g, %g) * %s;\n",
                   vertexCoords, scale, scale,
@@ -98,11 +100,11 @@
 
 }
 
-void GrGLConvolutionEffect::emitFS(GrStringBuilder* code,
+void GrGLConvolutionEffect::emitFS(GrGLShaderBuilder* state,
                         const char* outputColor,
                         const char* inputColor,
-                        const char* samplerName,
-                        const char* sampleCoords) {
+                        const char* samplerName) {
+    GrStringBuilder* code = &state->fFSCode;
     const char* texFunc = "texture2D";
     bool complexCoord = false;
 
@@ -117,7 +119,7 @@
     fKernelVar->appendArrayAccess("i", &kernelIndex);
 
     code->appendf("\t\tvec4 sum = vec4(0, 0, 0, 0);\n");
-    code->appendf("\t\tvec2 coord = %s;\n", sampleCoords);
+    code->appendf("\t\tvec2 coord = %s;\n", state->fSampleCoords.c_str());
     code->appendf("\t\tfor (int i = 0; i < %d; i++) {\n",
                   fKernelWidth);
 
@@ -141,8 +143,9 @@
 }
 
 void GrGLConvolutionEffect::setData(const GrGLInterface* gl,
-                                    const GrCustomStage* data,
-                                    const GrGLTexture* texture) {
+                                    const GrGLTexture& texture,
+                                    GrCustomStage* data,
+                                    int stageNum) {
     const GrConvolutionEffect* conv =
         static_cast<const GrConvolutionEffect*>(data);
     // the code we generated was for a specific kernel width
@@ -153,10 +156,10 @@
     float imageIncrement[2] = { 0 };
     switch (conv->direction()) {
         case GrSamplerState::kX_FilterDirection:
-            imageIncrement[0] = 1.0f / texture->width();
+            imageIncrement[0] = 1.0f / texture.width();
             break;
         case GrSamplerState::kY_FilterDirection:
-            imageIncrement[1] = 1.0f / texture->width();
+            imageIncrement[1] = 1.0f / texture.width();
             break;
         default:
             GrCrash("Unknown filter direction.");