Index: src/gpu/gl/GrGLProgramEffects.cpp |
diff --git a/src/gpu/gl/GrGLProgramEffects.cpp b/src/gpu/gl/GrGLProgramEffects.cpp |
index 8ea77d05eb6480ac51fe9c38e85df50ded2524a7..efb64fe64029c2fde2bf750e52c1f314d1c676ec 100644 |
--- a/src/gpu/gl/GrGLProgramEffects.cpp |
+++ b/src/gpu/gl/GrGLProgramEffects.cpp |
@@ -5,10 +5,10 @@ |
* found in the LICENSE file. |
*/ |
+#include "gl/builders/GrGLProgramBuilder.h" |
#include "GrGLProgramEffects.h" |
#include "GrDrawEffect.h" |
#include "gl/GrGLEffect.h" |
-#include "gl/GrGLShaderBuilder.h" |
#include "gl/GrGLVertexEffect.h" |
#include "gl/GrGpuGL.h" |
@@ -204,7 +204,7 @@ GrGLProgramEffects::~GrGLProgramEffects() { |
} |
} |
-void GrGLProgramEffects::emitSamplers(GrGLShaderBuilder* builder, |
+void GrGLProgramEffects::emitSamplers(GrGLProgramBuilder* builder, |
const GrEffect* effect, |
TextureSamplerArray* outSamplers) { |
SkTArray<Sampler, true>& samplers = fSamplers.push_back(); |
@@ -213,7 +213,7 @@ void GrGLProgramEffects::emitSamplers(GrGLShaderBuilder* builder, |
SkString name; |
for (int t = 0; t < numTextures; ++t) { |
name.printf("Sampler%d", t); |
- samplers[t].fUniform = builder->addUniform(GrGLShaderBuilder::kFragment_Visibility, |
+ samplers[t].fUniform = builder->addUniform(GrGLProgramBuilder::kFragment_Visibility, |
kSampler2D_GrSLType, |
name.c_str()); |
SkNEW_APPEND_TO_TARRAY(outSamplers, TextureSampler, |
@@ -250,7 +250,7 @@ void GrGLProgramEffects::bindTextures(GrGpuGL* gpu, const GrEffect* effect, int |
//////////////////////////////////////////////////////////////////////////////// |
-void GrGLVertexProgramEffects::emitEffect(GrGLFullShaderBuilder* builder, |
+void GrGLVertexProgramEffects::emitEffect(GrGLFullProgramBuilder* builder, |
const GrEffectStage& stage, |
const GrEffectKey& key, |
const char* outColor, |
@@ -261,7 +261,9 @@ void GrGLVertexProgramEffects::emitEffect(GrGLFullShaderBuilder* builder, |
SkSTArray<2, TransformedCoords> coords(effect->numTransforms()); |
SkSTArray<4, TextureSampler> samplers(effect->numTextures()); |
- this->emitAttributes(builder, stage); |
+ GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder(); |
+ GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
+ vsBuilder->emitAttributes(stage); |
this->emitTransforms(builder, drawEffect, &coords); |
this->emitSamplers(builder, effect, &samplers); |
@@ -271,8 +273,8 @@ void GrGLVertexProgramEffects::emitEffect(GrGLFullShaderBuilder* builder, |
// Enclose custom code in a block to avoid namespace conflicts |
SkString openBrace; |
openBrace.printf("\t{ // Stage %d: %s\n", stageIndex, glEffect->name()); |
- builder->vsCodeAppend(openBrace.c_str()); |
- builder->fsCodeAppend(openBrace.c_str()); |
+ fsBuilder->codeAppend(openBrace.c_str()); |
+ vsBuilder->codeAppend(openBrace.c_str()); |
if (glEffect->isVertexEffect()) { |
GrGLVertexEffect* vertexEffect = static_cast<GrGLVertexEffect*>(glEffect); |
@@ -281,25 +283,11 @@ void GrGLVertexProgramEffects::emitEffect(GrGLFullShaderBuilder* builder, |
glEffect->emitCode(builder, drawEffect, key, outColor, inColor, coords, samplers); |
} |
- builder->vsCodeAppend("\t}\n"); |
- builder->fsCodeAppend("\t}\n"); |
+ vsBuilder->codeAppend("\t}\n"); |
+ fsBuilder->codeAppend("\t}\n"); |
} |
-void GrGLVertexProgramEffects::emitAttributes(GrGLFullShaderBuilder* builder, |
- 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]); |
- builder->addEffectAttribute(attributeIndices[a], |
- stage.getEffect()->vertexAttribType(a), |
- attributeName); |
- } |
-} |
- |
-void GrGLVertexProgramEffects::emitTransforms(GrGLFullShaderBuilder* builder, |
+void GrGLVertexProgramEffects::emitTransforms(GrGLFullProgramBuilder* builder, |
const GrDrawEffect& drawEffect, |
TransformedCoordsArray* outCoords) { |
SkTArray<Transform, true>& transforms = fTransforms.push_back(); |
@@ -327,7 +315,7 @@ void GrGLVertexProgramEffects::emitTransforms(GrGLFullShaderBuilder* builder, |
suffixedUniName.appendf("_%i", t); |
uniName = suffixedUniName.c_str(); |
} |
- transforms[t].fHandle = builder->addUniform(GrGLShaderBuilder::kVertex_Visibility, |
+ transforms[t].fHandle = builder->addUniform(GrGLProgramBuilder::kVertex_Visibility, |
kMat33f_GrSLType, |
uniName, |
&uniName); |
@@ -341,18 +329,19 @@ void GrGLVertexProgramEffects::emitTransforms(GrGLFullShaderBuilder* builder, |
} |
const char* vsVaryingName; |
const char* fsVaryingName; |
+ GrGLVertexShaderBuilder* vsBuilder = builder->getVertexShaderBuilder(); |
builder->addVarying(varyingType, varyingName, &vsVaryingName, &fsVaryingName); |
const GrGLShaderVar& coords = kPosition_GrCoordSet == get_source_coords(totalKey, t) ? |
- builder->positionAttribute() : |
- builder->localCoordsAttribute(); |
+ vsBuilder->positionAttribute() : |
+ vsBuilder->localCoordsAttribute(); |
// varying = matrix * coords (logically) |
SkASSERT(kVec2f_GrSLType == varyingType || kVec3f_GrSLType == varyingType); |
if (kVec2f_GrSLType == varyingType) { |
- builder->vsCodeAppendf("\t%s = (%s * vec3(%s, 1)).xy;\n", |
+ vsBuilder->codeAppendf("\t%s = (%s * vec3(%s, 1)).xy;\n", |
vsVaryingName, uniName, coords.c_str()); |
} else { |
- builder->vsCodeAppendf("\t%s = %s * vec3(%s, 1);\n", |
+ vsBuilder->codeAppendf("\t%s = %s * vec3(%s, 1);\n", |
vsVaryingName, uniName, coords.c_str()); |
} |
SkNEW_APPEND_TO_TARRAY(outCoords, TransformedCoords, |
@@ -390,13 +379,13 @@ void GrGLVertexProgramEffects::setTransformData(const GrGLProgramDataManager& pr |
} |
} |
-GrGLVertexProgramEffectsBuilder::GrGLVertexProgramEffectsBuilder(GrGLFullShaderBuilder* builder, |
+GrGLVertexProgramEffectsBuilder::GrGLVertexProgramEffectsBuilder(GrGLFullProgramBuilder* builder, |
int reserveCount) |
: fBuilder(builder) |
, fProgramEffects(SkNEW_ARGS(GrGLVertexProgramEffects, |
- (reserveCount, fBuilder->hasExplicitLocalCoords()))) { |
+ (reserveCount, |
+ fBuilder->getVertexShaderBuilder()->hasExplicitLocalCoords()))) { |
} |
- |
void GrGLVertexProgramEffectsBuilder::emitEffect(const GrEffectStage& stage, |
const GrEffectKey& key, |
const char* outColor, |
@@ -408,7 +397,7 @@ void GrGLVertexProgramEffectsBuilder::emitEffect(const GrEffectStage& stage, |
//////////////////////////////////////////////////////////////////////////////// |
-void GrGLPathTexGenProgramEffects::emitEffect(GrGLFragmentOnlyShaderBuilder* builder, |
+void GrGLPathTexGenProgramEffects::emitEffect(GrGLFragmentOnlyProgramBuilder* builder, |
const GrEffectStage& stage, |
const GrEffectKey& key, |
const char* outColor, |
@@ -426,18 +415,19 @@ void GrGLPathTexGenProgramEffects::emitEffect(GrGLFragmentOnlyShaderBuilder* bui |
GrGLEffect* glEffect = effect->getFactory().createGLInstance(drawEffect); |
fGLEffects.push_back(glEffect); |
+ GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); |
// Enclose custom code in a block to avoid namespace conflicts |
SkString openBrace; |
openBrace.printf("\t{ // Stage %d: %s\n", stageIndex, glEffect->name()); |
- builder->fsCodeAppend(openBrace.c_str()); |
+ fsBuilder->codeAppend(openBrace.c_str()); |
SkASSERT(!glEffect->isVertexEffect()); |
glEffect->emitCode(builder, drawEffect, key, outColor, inColor, coords, samplers); |
- builder->fsCodeAppend("\t}\n"); |
+ fsBuilder->codeAppend("\t}\n"); |
} |
-void GrGLPathTexGenProgramEffects::setupPathTexGen(GrGLFragmentOnlyShaderBuilder* builder, |
+void GrGLPathTexGenProgramEffects::setupPathTexGen(GrGLFragmentOnlyProgramBuilder* builder, |
const GrDrawEffect& drawEffect, |
TransformedCoordsArray* outCoords) { |
int numTransforms = drawEffect.effect()->numTransforms(); |
@@ -499,12 +489,11 @@ void GrGLPathTexGenProgramEffects::setPathTexGenState(GrGpuGL* gpu, |
} |
GrGLPathTexGenProgramEffectsBuilder::GrGLPathTexGenProgramEffectsBuilder( |
- GrGLFragmentOnlyShaderBuilder* builder, |
+ GrGLFragmentOnlyProgramBuilder* builder, |
int reserveCount) |
: fBuilder(builder) |
, fProgramEffects(SkNEW_ARGS(GrGLPathTexGenProgramEffects, (reserveCount))) { |
} |
- |
void GrGLPathTexGenProgramEffectsBuilder::emitEffect(const GrEffectStage& stage, |
const GrEffectKey& key, |
const char* outColor, |
@@ -513,3 +502,4 @@ void GrGLPathTexGenProgramEffectsBuilder::emitEffect(const GrEffectStage& stage, |
SkASSERT(NULL != fProgramEffects.get()); |
fProgramEffects->emitEffect(fBuilder, stage, key, outColor, inColor, stageIndex); |
} |
+ |