Introduce GrGLShaderBuilder::TextureSampler
Review URL: https://codereview.appspot.com/6495099/
git-svn-id: http://skia.googlecode.com/svn/trunk@5422 2bbb7eff-a529-9590-31e7-b0007b416f81
diff --git a/src/effects/SkBlendImageFilter.cpp b/src/effects/SkBlendImageFilter.cpp
index 8257677..94896a8 100644
--- a/src/effects/SkBlendImageFilter.cpp
+++ b/src/effects/SkBlendImageFilter.cpp
@@ -133,7 +133,7 @@
virtual void emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
virtual void emitVS(GrGLShaderBuilder* builder,
const char* vertexCoords) SK_OVERRIDE {}
@@ -258,12 +258,12 @@
void GrGLBlendEffect::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString* code = &builder->fFSCode;
const char* bgColor = inputColor;
const char* fgColor = "fgColor";
code->appendf("\t\tvec4 %s = ", fgColor);
- builder->appendTextureLookup(code, samplerName);
+ builder->appendTextureLookup(code, samplers[0]);
code->append(";\n");
code->appendf("\t\t%s.a = 1.0 - (1.0 - %s.a) * (1.0 - %s.b);\n", outputColor, bgColor, fgColor);
switch (fMode) {
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index 8eb28bb..36bb60b 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -950,7 +950,7 @@
virtual void emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
virtual void emitLightFunc(GrGLShaderBuilder*, SkString* funcName) = 0;
@@ -1092,7 +1092,7 @@
void GrGLLightingEffect::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString* code = &builder->fFSCode;
fLight->emitFuncs(builder);
SkString lightFunc;
@@ -1160,7 +1160,7 @@
SkString texCoords;
texCoords.appendf("coord + vec2(%d, %d) * %s", dx, dy, imgInc);
code->appendf("\t\tm[%d] = ", index++);
- builder->appendTextureLookup(code, samplerName, texCoords.c_str());
+ builder->appendTextureLookup(code, samplers[0], texCoords.c_str());
code->appendf(".a;\n");
}
}
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index 6b8324a..4eed177 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -83,7 +83,7 @@
virtual void emitFS(GrGLShaderBuilder* state,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
virtual void setData(const GrGLUniformManager& uman,
const GrCustomStage& data,
@@ -131,7 +131,7 @@
void GrGLMagnifierEffect::emitFS(GrGLShaderBuilder* state,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString* code = &state->fFSCode;
code->appendf("\t\tvec2 coord = %s;\n", state->defaultTexCoordsName());
@@ -159,7 +159,7 @@
code->appendf("\t\tvec2 mix_coord = mix(coord, zoom_coord, weight);\n");
code->appendf("\t\tvec4 output_color = ");
- state->appendTextureLookup(code, samplerName, "mix_coord");
+ state->appendTextureLookup(code, samplers[0], "mix_coord");
code->append(";\n");
code->appendf("\t\t%s = output_color;", outputColor);
diff --git a/src/effects/SkMorphologyImageFilter.cpp b/src/effects/SkMorphologyImageFilter.cpp
index 04dc227..4123ca8 100644
--- a/src/effects/SkMorphologyImageFilter.cpp
+++ b/src/effects/SkMorphologyImageFilter.cpp
@@ -277,7 +277,7 @@
virtual void emitFS(GrGLShaderBuilder* state,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
static inline StageKey GenKey(const GrCustomStage& s, const GrGLCaps& caps);
@@ -313,7 +313,7 @@
void GrGLMorphologyEffect::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString* code = &builder->fFSCode;
const char* func;
@@ -337,7 +337,7 @@
builder->defaultTexCoordsName(), fRadius, imgInc);
code->appendf("\t\tfor (int i = 0; i < %d; i++) {\n", this->width());
code->appendf("\t\t\t%s = %s(%s, ", outputColor, func, outputColor);
- builder->appendTextureLookup(&builder->fFSCode, samplerName, "coord");
+ builder->appendTextureLookup(&builder->fFSCode, samplers[0], "coord");
code->appendf(");\n");
code->appendf("\t\t\tcoord += %s;\n", imgInc);
code->appendf("\t\t}\n");
diff --git a/src/effects/gradients/SkGradientShader.cpp b/src/effects/gradients/SkGradientShader.cpp
index 3d989b7..d7b4f13 100644
--- a/src/effects/gradients/SkGradientShader.cpp
+++ b/src/effects/gradients/SkGradientShader.cpp
@@ -702,7 +702,7 @@
const char* gradientTValue,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const GrGLShaderBuilder::TextureSampler& sampler) {
SkString* code = &builder->fFSCode;
code->appendf("\tvec2 coord = vec2(%s, %s);\n",
@@ -710,7 +710,7 @@
builder->getUniformVariable(fFSYUni).c_str());
GrGLSLMulVarBy4f(code, 1, outputColor, inputColor);
code->appendf("\t%s = ", outputColor);
- builder->appendTextureLookupAndModulate(code, inputColor, samplerName, "coord");
+ builder->appendTextureLookupAndModulate(code, inputColor, sampler, "coord");
code->append(";\n");
}
diff --git a/src/effects/gradients/SkGradientShaderPriv.h b/src/effects/gradients/SkGradientShaderPriv.h
index 2b584f3..8c86326 100644
--- a/src/effects/gradients/SkGradientShaderPriv.h
+++ b/src/effects/gradients/SkGradientShaderPriv.h
@@ -291,7 +291,7 @@
const char* gradientTValue,
const char* outputColor,
const char* inputColor,
- const char* samplerName);
+ const GrGLShaderBuilder::TextureSampler&);
private:
diff --git a/src/effects/gradients/SkLinearGradient.cpp b/src/effects/gradients/SkLinearGradient.cpp
index 6415927..bcebc26 100644
--- a/src/effects/gradients/SkLinearGradient.cpp
+++ b/src/effects/gradients/SkLinearGradient.cpp
@@ -490,7 +490,7 @@
virtual void emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
static StageKey GenKey(const GrCustomStage& s, const GrGLCaps& caps) { return 0; }
private:
@@ -550,10 +550,10 @@
void GrGLLinearGradient::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString t;
t.printf("%s.x", builder->defaultTexCoordsName());
- this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplerName);
+ this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplers[0]);
}
/////////////////////////////////////////////////////////////////////
diff --git a/src/effects/gradients/SkRadialGradient.cpp b/src/effects/gradients/SkRadialGradient.cpp
index 98433e2..799e548 100644
--- a/src/effects/gradients/SkRadialGradient.cpp
+++ b/src/effects/gradients/SkRadialGradient.cpp
@@ -485,7 +485,7 @@
virtual void emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
static StageKey GenKey(const GrCustomStage& s, const GrGLCaps& caps) { return 0; }
@@ -550,10 +550,10 @@
void GrGLRadialGradient::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString t;
t.printf("length(%s.xy)", builder->defaultTexCoordsName());
- this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplerName);
+ this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplers[0]);
}
/////////////////////////////////////////////////////////////////////
diff --git a/src/effects/gradients/SkSweepGradient.cpp b/src/effects/gradients/SkSweepGradient.cpp
index 22b2118..843d1aa 100644
--- a/src/effects/gradients/SkSweepGradient.cpp
+++ b/src/effects/gradients/SkSweepGradient.cpp
@@ -394,7 +394,7 @@
virtual void emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
static StageKey GenKey(const GrCustomStage& s, const GrGLCaps& caps) { return 0; }
@@ -455,11 +455,11 @@
void GrGLSweepGradient::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString t;
t.printf("atan(- %s.y, - %s.x) * 0.1591549430918 + 0.5",
builder->defaultTexCoordsName(), builder->defaultTexCoordsName());
- this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplerName);
+ this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplers[0]);
}
/////////////////////////////////////////////////////////////////////
diff --git a/src/effects/gradients/SkTwoPointConicalGradient.cpp b/src/effects/gradients/SkTwoPointConicalGradient.cpp
index 38733f3..3466d2c 100644
--- a/src/effects/gradients/SkTwoPointConicalGradient.cpp
+++ b/src/effects/gradients/SkTwoPointConicalGradient.cpp
@@ -332,7 +332,7 @@
virtual void emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
virtual void setData(const GrGLUniformManager&,
const GrCustomStage&,
const GrRenderTarget*,
@@ -506,7 +506,7 @@
void GrGLConical2Gradient::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString* code = &builder->fFSCode;
SkString cName("c");
@@ -591,7 +591,7 @@
p5.c_str(), p3.c_str());
code->appendf("\t\t");
- this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplerName);
+ this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
// otherwise, if r(t) for the larger root was <= 0, try the other root
code->appendf("\t\t} else {\n");
@@ -603,7 +603,7 @@
tName.c_str(), p5.c_str(), p3.c_str());
code->appendf("\t\t\t");
- this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplerName);
+ this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
// end if (r(t) > 0) for smaller root
code->appendf("\t\t\t}\n");
@@ -621,7 +621,7 @@
code->appendf("\tif (%s * %s + %s > 0.0) {\n", tName.c_str(),
p5.c_str(), p3.c_str());
code->appendf("\t");
- this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplerName);
+ this->emitColorLookup(builder, tName.c_str(), outputColor, inputColor, samplers[0]);
code->appendf("\t}\n");
}
}
diff --git a/src/effects/gradients/SkTwoPointRadialGradient.cpp b/src/effects/gradients/SkTwoPointRadialGradient.cpp
index 2192707..9362ded 100644
--- a/src/effects/gradients/SkTwoPointRadialGradient.cpp
+++ b/src/effects/gradients/SkTwoPointRadialGradient.cpp
@@ -367,7 +367,7 @@
virtual void emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) SK_OVERRIDE;
+ const TextureSamplerArray&) SK_OVERRIDE;
virtual void setData(const GrGLUniformManager&,
const GrCustomStage&,
const GrRenderTarget*,
@@ -539,7 +539,7 @@
void GrGLRadial2Gradient::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
- const char* samplerName) {
+ const TextureSamplerArray& samplers) {
SkString* code = &builder->fFSCode;
SkString cName("c");
SkString ac4Name("ac4");
@@ -601,7 +601,7 @@
t.printf("-%s / %s", cName.c_str(), bVar.c_str());
}
- this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplerName);
+ this->emitColorLookup(builder, t.c_str(), outputColor, inputColor, samplers[0]);
}
void GrGLRadial2Gradient::setData(const GrGLUniformManager& uman,