aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/effects/GrMorphologyEffect.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-16 13:36:18 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-07-16 13:36:18 +0000
commit032b221dadb6eb8283ac2d1bc8913ee7bb5cfe7a (patch)
tree7b97452a7937949417cc40a4817cf4c4ede8e4ab /src/gpu/effects/GrMorphologyEffect.cpp
parent96cbd2c4d2ea7e138b65923a46fb77bc096a6782 (diff)
Remove uniform var pointers from custom effects
Review URL: http://codereview.appspot.com/6374067/ git-svn-id: http://skia.googlecode.com/svn/trunk@4616 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/gpu/effects/GrMorphologyEffect.cpp')
-rw-r--r--src/gpu/effects/GrMorphologyEffect.cpp64
1 files changed, 30 insertions, 34 deletions
diff --git a/src/gpu/effects/GrMorphologyEffect.cpp b/src/gpu/effects/GrMorphologyEffect.cpp
index 180b5eb3a6..6699989f04 100644
--- a/src/gpu/effects/GrMorphologyEffect.cpp
+++ b/src/gpu/effects/GrMorphologyEffect.cpp
@@ -18,7 +18,7 @@ public:
GrGLMorphologyEffect (const GrProgramStageFactory& factory,
const GrCustomStage& stage);
- virtual void setupVariables(GrGLShaderBuilder* state,
+ virtual void setupVariables(GrGLShaderBuilder* builder,
int stage) SK_OVERRIDE;
virtual void emitVS(GrGLShaderBuilder* state,
const char* vertexCoords) SK_OVERRIDE;
@@ -29,8 +29,10 @@ public:
static inline StageKey GenKey(const GrCustomStage& s);
- virtual void initUniforms(const GrGLInterface*, int programID) SK_OVERRIDE;
- virtual void setData(const GrGLInterface*,
+ virtual void initUniforms(const GrGLShaderBuilder*,
+ const GrGLInterface*,
+ int programID) SK_OVERRIDE;
+ virtual void setData(const GrGLInterface*,
const GrCustomStage&,
const GrRenderTarget*,
int stageNum) SK_OVERRIDE;
@@ -40,7 +42,7 @@ private:
int fRadius;
GrMorphologyEffect::MorphologyType fType;
- const GrGLShaderVar* fImageIncrementVar;
+ GrGLShaderBuilder::UniformHandle fImageIncrementUni;
GrGLint fImageIncrementLocation;
typedef GrGLProgramStage INHERITED;
@@ -49,50 +51,47 @@ private:
GrGLMorphologyEffect ::GrGLMorphologyEffect(const GrProgramStageFactory& factory,
const GrCustomStage& stage)
: GrGLProgramStage(factory)
- , fImageIncrementVar(NULL)
+ , fImageIncrementUni(GrGLShaderBuilder::kInvalidUniformHandle)
, fImageIncrementLocation(0) {
const GrMorphologyEffect& m = static_cast<const GrMorphologyEffect&>(stage);
fRadius = m.radius();
fType = m.type();
}
-void GrGLMorphologyEffect::setupVariables(GrGLShaderBuilder* state, int stage) {
- fImageIncrementVar = &state->addUniform(GrGLShaderBuilder::kFragment_ShaderType |
- GrGLShaderBuilder::kVertex_ShaderType,
- kVec2f_GrSLType, "uImageIncrement", stage);
+void GrGLMorphologyEffect::setupVariables(GrGLShaderBuilder* builder, int stage) {
+ fImageIncrementUni = builder->addUniform(GrGLShaderBuilder::kFragment_ShaderType |
+ GrGLShaderBuilder::kVertex_ShaderType,
+ kVec2f_GrSLType, "uImageIncrement", stage);
}
-void GrGLMorphologyEffect::emitVS(GrGLShaderBuilder* state,
+void GrGLMorphologyEffect::emitVS(GrGLShaderBuilder* builder,
const char* vertexCoords) {
- SkString* code = &state->fVSCode;
- code->appendf("\t\t%s -= vec2(%d, %d) * %s;\n",
- vertexCoords, fRadius, fRadius,
- fImageIncrementVar->getName().c_str());
+ SkString* code = &builder->fVSCode;
+ const char* imgInc = builder->getUniformCStr(fImageIncrementUni);
+ code->appendf("\t\t%s -= vec2(%d, %d) * %s;\n", vertexCoords, fRadius, fRadius, imgInc);
}
-void GrGLMorphologyEffect::initUniforms(const GrGLInterface* gl,
+void GrGLMorphologyEffect::initUniforms(const GrGLShaderBuilder* builder,
+ const GrGLInterface* gl,
int programID) {
- GR_GL_CALL_RET(gl, fImageIncrementLocation,
- GetUniformLocation(programID,
- fImageIncrementVar->getName().c_str()));
+ const char* imgInc = builder->getUniformCStr(fImageIncrementUni);
+ GR_GL_CALL_RET(gl, fImageIncrementLocation, GetUniformLocation(programID, imgInc));
}
-void GrGLMorphologyEffect ::emitFS(GrGLShaderBuilder* state,
+void GrGLMorphologyEffect ::emitFS(GrGLShaderBuilder* builder,
const char* outputColor,
const char* inputColor,
const char* samplerName) {
- SkString* code = &state->fFSCode;
- // const char* texFunc = "texture2D";
- // bool complexCoord = false;
+ SkString* code = &builder->fFSCode;
const char* func;
switch (fType) {
case GrContext::kErode_MorphologyType:
- state->fFSCode.appendf("\t\tvec4 value = vec4(1, 1, 1, 1);\n");
+ code->appendf("\t\tvec4 value = vec4(1, 1, 1, 1);\n");
func = "min";
break;
case GrContext::kDilate_MorphologyType:
- state->fFSCode.appendf("\t\tvec4 value = vec4(0, 0, 0, 0);\n");
+ code->appendf("\t\tvec4 value = vec4(0, 0, 0, 0);\n");
func = "max";
break;
default:
@@ -100,19 +99,16 @@ void GrGLMorphologyEffect ::emitFS(GrGLShaderBuilder* state,
func = ""; // suppress warning
break;
}
+ const char* imgInc = builder->getUniformCStr(fImageIncrementUni);
- code->appendf("\t\tvec2 coord = %s;\n", state->fSampleCoords.c_str());
+ code->appendf("\t\tvec2 coord = %s;\n", builder->fSampleCoords.c_str());
code->appendf("\t\tfor (int i = 0; i < %d; i++) {\n", this->width());
- state->fFSCode.appendf("\t\t\tvalue = %s(value, ", func);
- state->emitTextureLookup(samplerName, "coord");
- state->fFSCode.appendf(");\n");
- code->appendf("\t\t\tcoord += %s;\n",
- fImageIncrementVar->getName().c_str());
+ code->appendf("\t\t\tvalue = %s(value, ", func);
+ builder->emitTextureLookup(samplerName, "coord");
+ code->appendf(");\n");
+ code->appendf("\t\t\tcoord += %s;\n", imgInc);
code->appendf("\t\t}\n");
-
- state->fFSCode.appendf("\t\t%s = value%s;\n",
- outputColor,
- state->fModulate.c_str());
+ code->appendf("\t\t%s = value%s;\n", outputColor, builder->fModulate.c_str());
}
GrGLProgramStage::StageKey GrGLMorphologyEffect::GenKey(