Encapsulate code required to create a uniform var into a single function on
GrGLShaderBuilder. This isolates internal dependencies from somebody
writing a CustomStage.

http://codereview.appspot.com/6248050/



git-svn-id: http://skia.googlecode.com/svn/trunk@4081 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp
index 2e1f48e..36ace11 100644
--- a/src/gpu/gl/GrGLShaderBuilder.cpp
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp
@@ -173,3 +173,35 @@
     fFSCode.appendf("%s%s;\n", fSwizzle.c_str(), fModulate.c_str());
 }
 
+const GrGLShaderVar& GrGLShaderBuilder::addUniform(VariableLifetime lifetime,
+                                             GrSLType type,
+                                             const char* name,
+                                             int stageNum,
+                                             int count) {
+    GrAssert(name && strlen(name));
+
+    GrGLShaderVar* var = NULL;
+    if (kVertex_VariableLifetime & lifetime) {
+        var = &fVSUnis.push_back();
+    } else {
+        GrAssert(kFragment_VariableLifetime & lifetime);
+        var = &fFSUnis.push_back();
+    }
+    var->setType(type);
+    var->setTypeModifier(GrGLShaderVar::kUniform_TypeModifier);
+    var->setName(name);
+    if (stageNum >= 0) {
+        var->accessName()->appendS32(stageNum);
+    }
+    var->setArrayCount(count);
+
+    if ((kVertex_VariableLifetime |
+        kFragment_VariableLifetime) == lifetime) {
+        fFSUnis.push_back(*var);
+        // If it's shared between VS and FS, VS must override
+        // default highp and specify mediump.
+        var->setEmitPrecision(true);
+    }
+
+    return *var;
+}