Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(318)

Unified Diff: src/gpu/gl/GrGLEffectArray.cpp

Issue 25474006: Move VertexBuilder to a GrGLFullShaderBuilder subclass (Closed) Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: src/gpu/gl/GrGLEffectArray.cpp
diff --git a/src/gpu/gl/GrGLEffectArray.cpp b/src/gpu/gl/GrGLEffectArray.cpp
index 47ff1405443fc944b1075bc4aafbba7feead451f..b6c4ab467313fce8b935284a544f98b524197709 100644
--- a/src/gpu/gl/GrGLEffectArray.cpp
+++ b/src/gpu/gl/GrGLEffectArray.cpp
@@ -150,9 +150,9 @@ void GrGLEffectArray::initSamplers(const GrGLUniformManager& uniformManager, int
}
}
-void GrGLEffectArray::setData(GrGpuGL* gpu,
- const GrGLUniformManager& uniformManager,
- const GrEffectStage* effectStages[]) {
+void GrGLVertexEffectArray::setData(GrGpuGL* gpu,
+ const GrGLUniformManager& uniformManager,
+ const GrEffectStage* effectStages[]) {
int numEffects = fGLEffects.count();
SkASSERT(numEffects == fTransforms.count());
SkASSERT(numEffects == fSamplers.count());
@@ -164,9 +164,9 @@ void GrGLEffectArray::setData(GrGpuGL* gpu,
}
}
-void GrGLEffectArray::setTransformData(const GrGLUniformManager& uniformManager,
- const GrDrawEffect& drawEffect,
- int effectIdx) {
+void GrGLVertexEffectArray::setTransformData(const GrGLUniformManager& uniformManager,
+ const GrDrawEffect& drawEffect,
+ int effectIdx) {
SkTArray<Transform, true>& transforms = fTransforms[effectIdx];
int numTransforms = transforms.count();
SkASSERT(numTransforms == (*drawEffect.effect())->numTransforms());
@@ -236,21 +236,18 @@ void GrGLEffectArray::bindTextures(GrGpuGL* gpu, const GrEffectRef& effect, int
////////////////////////////////////////////////////////////////////////////////
-GrGLEffectArrayBuilder::GrGLEffectArrayBuilder(GrGLShaderBuilder* builder, int reserveCount)
- : fBuilder(builder) {
- GrGLShaderBuilder::VertexBuilder* vertexBuilder = fBuilder->getVertexBuilder();
- SkASSERT(NULL != vertexBuilder);
- fEffectArray.reset(SkNEW_ARGS(GrGLEffectArray,
- (reserveCount, vertexBuilder->hasExplicitLocalCoords())));
+GrGLVertexEffectArrayBuilder::GrGLVertexEffectArrayBuilder(GrGLFullShaderBuilder* builder,
+ int reserveCount)
+ : fBuilder(builder)
+ , fEffectArray(SkNEW_ARGS(GrGLVertexEffectArray,
+ (reserveCount, fBuilder->hasExplicitLocalCoords()))) {
}
-void GrGLEffectArrayBuilder::emitEffect(const GrEffectStage& stage,
- EffectKey key,
- const char* outColor,
- const char* inColor,
- int stageIndex) {
- GrGLShaderBuilder::VertexBuilder* vertexBuilder = fBuilder->getVertexBuilder();
- SkASSERT(NULL != vertexBuilder);
+void GrGLVertexEffectArrayBuilder::emitEffect(const GrEffectStage& stage,
+ EffectKey key,
+ const char* outColor,
+ const char* inColor,
+ int stageIndex) {
SkASSERT(NULL != fEffectArray.get());
GrDrawEffect drawEffect(stage, fEffectArray->fHasExplicitLocalCoords);
@@ -260,7 +257,7 @@ void GrGLEffectArrayBuilder::emitEffect(const GrEffectStage& stage,
this->emitAttributes(stage);
this->emitTransforms(effect, key, &coords);
- this->emitSamplers(effect, &samplers);
+ INHERITED::emitSamplers(fBuilder, fEffectArray.get(), effect, &samplers);
GrGLEffect* glEffect = effect->getFactory().createGLInstance(drawEffect);
*fEffectArray->fGLEffects.append() = glEffect;
@@ -268,38 +265,32 @@ void GrGLEffectArrayBuilder::emitEffect(const GrEffectStage& stage,
// Enclose custom code in a block to avoid namespace conflicts
SkString openBrace;
openBrace.printf("\t{ // Stage %d: %s\n", stageIndex, glEffect->name());
- vertexBuilder->vsCodeAppend(openBrace.c_str());
+ fBuilder->vsCodeAppend(openBrace.c_str());
fBuilder->fsCodeAppend(openBrace.c_str());
glEffect->emitCode(fBuilder, drawEffect, key, outColor, inColor, coords, samplers);
- vertexBuilder->vsCodeAppend("\t}\n");
+ fBuilder->vsCodeAppend("\t}\n");
fBuilder->fsCodeAppend("\t}\n");
}
-void GrGLEffectArrayBuilder::emitAttributes(const GrEffectStage& stage) {
- GrGLShaderBuilder::VertexBuilder* vertexBuilder = fBuilder->getVertexBuilder();
- SkASSERT(NULL != vertexBuilder);
-
+void GrGLVertexEffectArrayBuilder::emitAttributes(const GrEffectStage& stage) {
int numAttributes = stage.getVertexAttribIndexCount();
const int* attributeIndices = stage.getVertexAttribIndices();
for (int a = 0; a < numAttributes; ++a) {
// TODO: Make addAttribute mangle the name.
SkString attributeName("aAttr");
attributeName.appendS32(attributeIndices[a]);
- vertexBuilder->addEffectAttribute(attributeIndices[a],
- (*stage.getEffect())->vertexAttribType(a),
- attributeName);
+ fBuilder->addEffectAttribute(attributeIndices[a],
+ (*stage.getEffect())->vertexAttribType(a),
+ attributeName);
}
}
-void GrGLEffectArrayBuilder::emitTransforms(const GrEffectRef& effect,
- EffectKey effectKey,
- TransformedCoordsArray* outCoords) {
- GrGLShaderBuilder::VertexBuilder* vertexBuilder = fBuilder->getVertexBuilder();
- SkASSERT(NULL != vertexBuilder);
-
- typedef GrGLEffectArray::Transform Transform;
+void GrGLVertexEffectArrayBuilder::emitTransforms(const GrEffectRef& effect,
+ EffectKey effectKey,
+ TransformedCoordsArray* outCoords) {
+ typedef GrGLVertexEffectArray::Transform Transform;
SkTArray<Transform, true>& transforms = fEffectArray->fTransforms.push_back();
EffectKey totalKey = GrBackendEffectFactory::GetTransformKey(effectKey);
int numTransforms = effect->numTransforms();
@@ -354,30 +345,30 @@ void GrGLEffectArrayBuilder::emitTransforms(const GrEffectRef& effect,
}
const char* vsVaryingName;
const char* fsVaryingName;
- vertexBuilder->addVarying(varyingType, varyingName, &vsVaryingName, &fsVaryingName);
+ fBuilder->addVarying(varyingType, varyingName, &vsVaryingName, &fsVaryingName);
const GrGLShaderVar& coords = (kPositionCoords_Flag & key) ?
- vertexBuilder->positionAttribute() :
- vertexBuilder->localCoordsAttribute();
+ fBuilder->positionAttribute() :
+ fBuilder->localCoordsAttribute();
// varying = matrix * coords (logically)
switch (transforms[t].fType) {
case kVoid_GrSLType:
SkASSERT(kVec2f_GrSLType == varyingType);
- vertexBuilder->vsCodeAppendf("\t%s = %s;\n", vsVaryingName, coords.c_str());
+ fBuilder->vsCodeAppendf("\t%s = %s;\n", vsVaryingName, coords.c_str());
break;
case kVec2f_GrSLType:
SkASSERT(kVec2f_GrSLType == varyingType);
- vertexBuilder->vsCodeAppendf("\t%s = %s + %s;\n",
- vsVaryingName, uniName, coords.c_str());
+ fBuilder->vsCodeAppendf("\t%s = %s + %s;\n",
+ vsVaryingName, uniName, coords.c_str());
break;
case kMat33f_GrSLType: {
SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyingType);
if (kVec2f_GrSLType == varyingType) {
- vertexBuilder->vsCodeAppendf("\t%s = (%s * vec3(%s, 1)).xy;\n",
- vsVaryingName, uniName, coords.c_str());
+ fBuilder->vsCodeAppendf("\t%s = (%s * vec3(%s, 1)).xy;\n",
+ vsVaryingName, uniName, coords.c_str());
} else {
- vertexBuilder->vsCodeAppendf("\t%s = %s * vec3(%s, 1);\n",
- vsVaryingName, uniName, coords.c_str());
+ fBuilder->vsCodeAppendf("\t%s = %s * vec3(%s, 1);\n",
+ vsVaryingName, uniName, coords.c_str());
}
break;
}
@@ -389,18 +380,20 @@ void GrGLEffectArrayBuilder::emitTransforms(const GrEffectRef& effect,
}
}
-void GrGLEffectArrayBuilder::emitSamplers(const GrEffectRef& effect,
+void GrGLEffectArrayBuilder::emitSamplers(GrGLShaderBuilder* builder,
+ GrGLEffectArray* effectArray,
+ const GrEffectRef& effect,
TextureSamplerArray* outSamplers) {
typedef GrGLEffectArray::Sampler Sampler;
- SkTArray<Sampler, true>& samplers = fEffectArray->fSamplers.push_back();
+ SkTArray<Sampler, true>& samplers = effectArray->fSamplers.push_back();
int numTextures = effect->numTextures();
samplers.push_back_n(numTextures);
SkString name;
for (int t = 0; t < numTextures; ++t) {
name.printf("Sampler%d", t);
- samplers[t].fUniform = fBuilder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
- kSampler2D_GrSLType,
- name.c_str());
+ samplers[t].fUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility,
+ kSampler2D_GrSLType,
+ name.c_str());
SkNEW_APPEND_TO_TARRAY(outSamplers, TextureSampler,
(samplers[t].fUniform, effect->textureAccess(t)));
}

Powered by Google App Engine
This is Rietveld 408576698