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