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