Add GL uniform manager
Review URL: http://codereview.appspot.com/6423066/



git-svn-id: http://skia.googlecode.com/svn/trunk@4758 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/effects/GrGradientEffects.cpp b/src/gpu/effects/GrGradientEffects.cpp
index 34bff09..3769e21 100644
--- a/src/gpu/effects/GrGradientEffects.cpp
+++ b/src/gpu/effects/GrGradientEffects.cpp
@@ -202,9 +202,9 @@
 
 /////////////////////////////////////////////////////////////////////
 
-// For brevity, and these definitions are likely to move to a different class soon.
-typedef GrGLShaderBuilder::UniformHandle UniformHandle;
-static const UniformHandle kInvalidUniformHandle = GrGLShaderBuilder::kInvalidUniformHandle;
+// For brevity
+typedef GrGLUniformManager::UniformHandle UniformHandle;
+static const UniformHandle kInvalidUniformHandle = GrGLUniformManager::kInvalidUniformHandle;
 
 class GrGLRadial2Gradient : public GrGLGradientStage {
 
@@ -222,10 +222,7 @@
                         const char* outputColor,
                         const char* inputColor,
                         const char* samplerName) SK_OVERRIDE;
-    virtual void initUniforms(const GrGLShaderBuilder* builder,
-                              const GrGLInterface*,
-                              int programID) SK_OVERRIDE;
-    virtual void setData(const GrGLInterface*,
+    virtual void setData(const GrGLUniformManager&,
                          const GrCustomStage&,
                          const GrRenderTarget*,
                          int stageNum) SK_OVERRIDE;
@@ -237,9 +234,7 @@
 protected:
 
     UniformHandle   fVSParamUni;
-    GrGLint         fVSParamLocation;
     UniformHandle   fFSParamUni;
-    GrGLint         fFSParamLocation;
 
     const char* fVSVaryingName;
     const char* fFSVaryingName;
@@ -287,9 +282,6 @@
     fFSParamUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType,
                                        kFloat_GrSLType, "uRadial2FSParams", stage, 6);
 
-    fVSParamLocation = GrGLProgramStage::kUseUniform;
-    fFSParamLocation = GrGLProgramStage::kUseUniform;
-
     // For radial gradients without perspective we can pass the linear
     // part of the quadratic as a varying.
     if (builder->fVaryingDims == builder->fCoordDims) {
@@ -385,16 +377,7 @@
     this->emitColorLookup(builder, t.c_str(), outputColor, samplerName);
 }
 
-void GrGLRadial2Gradient::initUniforms(const GrGLShaderBuilder* builder,
-                                       const GrGLInterface* gl,
-                                       int programID) {
-    const char* vsParam = builder->getUniformCStr(fVSParamUni);
-    const char* fsParam = builder->getUniformCStr(fFSParamUni);
-    GR_GL_CALL_RET(gl, fVSParamLocation, GetUniformLocation(programID, vsParam));
-    GR_GL_CALL_RET(gl, fFSParamLocation, GetUniformLocation(programID, fsParam));
-}
-
-void GrGLRadial2Gradient::setData(const GrGLInterface* gl,
+void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman,
                                   const GrCustomStage& baseData,
                                   const GrRenderTarget*,
                                   int stageNum) {
@@ -423,8 +406,8 @@
             data.isPosRoot() ? 1.f : -1.f
         };
 
-        GR_GL_CALL(gl, Uniform1fv(fVSParamLocation, 6, values));
-        GR_GL_CALL(gl, Uniform1fv(fFSParamLocation, 6, values));
+        uman.set1fv(fVSParamUni, 0, 6, values);
+        uman.set1fv(fFSParamUni, 0, 6, values);
         fCachedCenter = centerX1;
         fCachedRadius = radius0;
         fCachedPosRoot = data.isPosRoot();
@@ -492,10 +475,7 @@
                         const char* outputColor,
                         const char* inputColor,
                         const char* samplerName) SK_OVERRIDE;
-    virtual void initUniforms(const GrGLShaderBuilder* builder,
-                              const GrGLInterface*,
-                              int programID) SK_OVERRIDE;
-    virtual void setData(const GrGLInterface*,
+    virtual void setData(const GrGLUniformManager&,
                          const GrCustomStage&,
                          const GrRenderTarget*,
                          int stageNum) SK_OVERRIDE;
@@ -713,16 +693,7 @@
     }
 }
 
-void GrGLConical2Gradient::initUniforms(const GrGLShaderBuilder* builder,
-                                        const GrGLInterface* gl,
-                                        int programID) {
-    const char* vsParam = builder->getUniformCStr(fVSParamUni);
-    const char* fsParam = builder->getUniformCStr(fFSParamUni);
-    GR_GL_CALL_RET(gl, fVSParamLocation, GetUniformLocation(programID, vsParam));
-    GR_GL_CALL_RET(gl, fFSParamLocation, GetUniformLocation(programID, fsParam));
-}
-
-void GrGLConical2Gradient::setData(const GrGLInterface* gl,
+void GrGLConical2Gradient::setData(const GrGLUniformManager& uman,
                                    const GrCustomStage& baseData,
                                    const GrRenderTarget*,
                                    int stageNum) {
@@ -753,8 +724,8 @@
             GrScalarToFloat(diffRadius)
         };
 
-        GR_GL_CALL(gl, Uniform1fv(fVSParamLocation, 6, values));
-        GR_GL_CALL(gl, Uniform1fv(fFSParamLocation, 6, values));
+        uman.set1fv(fVSParamUni, 0, 6, values);
+        uman.set1fv(fFSParamUni, 0, 6, values);
         fCachedCenter = centerX1;
         fCachedRadius = radius0;
         fCachedDiffRadius = diffRadius;