Make GrGLEffects use an interface to append their code.
A small step towards encapsulating GrGLShaderBuilder.
Review URL: https://codereview.chromium.org/12547012
git-svn-id: http://skia.googlecode.com/svn/trunk@8018 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/gpu/gl/GrGLShaderBuilder.cpp b/src/gpu/gl/GrGLShaderBuilder.cpp
index 021f56d..08ef28e 100644
--- a/src/gpu/gl/GrGLShaderBuilder.cpp
+++ b/src/gpu/gl/GrGLShaderBuilder.cpp
@@ -101,6 +101,42 @@
fPositionVar->set(kVec2f_GrSLType, GrGLShaderVar::kAttribute_TypeModifier, "aPosition");
}
+void GrGLShaderBuilder::codeAppendf(ShaderType type, const char format[], va_list args) {
+ SkString* string;
+ switch (type) {
+ case kVertex_ShaderType:
+ string = &fVSCode;
+ break;
+ case kGeometry_ShaderType:
+ string = &fGSCode;
+ break;
+ case kFragment_ShaderType:
+ string = &fFSCode;
+ break;
+ default:
+ GrCrash("Invalid shader type");
+ }
+ string->appendf(format, args);
+}
+
+void GrGLShaderBuilder::codeAppend(ShaderType type, const char* str) {
+ SkString* string;
+ switch (type) {
+ case kVertex_ShaderType:
+ string = &fVSCode;
+ break;
+ case kGeometry_ShaderType:
+ string = &fGSCode;
+ break;
+ case kFragment_ShaderType:
+ string = &fFSCode;
+ break;
+ default:
+ GrCrash("Invalid shader type");
+ }
+ string->append(str);
+}
+
void GrGLShaderBuilder::appendTextureLookup(SkString* out,
const GrGLShaderBuilder::TextureSampler& sampler,
const char* coordName,
@@ -115,16 +151,24 @@
append_swizzle(out, *sampler.textureAccess(), fCtxInfo.caps());
}
+void GrGLShaderBuilder::appendTextureLookup(ShaderType type,
+ const GrGLShaderBuilder::TextureSampler& sampler,
+ const char* coordName,
+ GrSLType varyingType) {
+ GrAssert(kFragment_ShaderType == type);
+ this->appendTextureLookup(&fFSCode, sampler, coordName, varyingType);
+}
+
void GrGLShaderBuilder::appendTextureLookupAndModulate(
- SkString* out,
+ ShaderType type,
const char* modulation,
const GrGLShaderBuilder::TextureSampler& sampler,
const char* coordName,
- GrSLType varyingType) const {
- GrAssert(NULL != out);
+ GrSLType varyingType) {
+ GrAssert(kFragment_ShaderType == type);
SkString lookup;
this->appendTextureLookup(&lookup, sampler, coordName, varyingType);
- GrGLSLModulate4f(out, modulation, lookup.c_str());
+ GrGLSLModulate4f(&fFSCode, modulation, lookup.c_str());
}
GrBackendEffectFactory::EffectKey GrGLShaderBuilder::KeyForTextureAccess(