diff options
author | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-07-16 13:36:18 +0000 |
---|---|---|
committer | bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81> | 2012-07-16 13:36:18 +0000 |
commit | 032b221dadb6eb8283ac2d1bc8913ee7bb5cfe7a (patch) | |
tree | 7b97452a7937949417cc40a4817cf4c4ede8e4ab /src/gpu/effects/GrMorphologyEffect.cpp | |
parent | 96cbd2c4d2ea7e138b65923a46fb77bc096a6782 (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.cpp | 64 |
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( |