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;
+}