aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/effects/SkMagnifierImageFilter.cpp
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-29 12:47:51 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2012-10-29 12:47:51 +0000
commit47d7a8885b02478fa41069f14bba7ffbe5475d87 (patch)
treebc0a5b21c328ca3add0a9e3b941872168522c398 /src/effects/SkMagnifierImageFilter.cpp
parentf78df33efc72167f94da1b0476c9a86ba18a5f2c (diff)
Make GrGLConvolutionEffect, GrGLMorphologyEffect, and GrGLMagnifierEffect derive directly from GrGLEffect.
R=robertphillips@google.com Review URL: https://codereview.appspot.com/6786052 git-svn-id: http://skia.googlecode.com/svn/branches/gpu_dev@6164 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'src/effects/SkMagnifierImageFilter.cpp')
-rw-r--r--src/effects/SkMagnifierImageFilter.cpp59
1 files changed, 27 insertions, 32 deletions
diff --git a/src/effects/SkMagnifierImageFilter.cpp b/src/effects/SkMagnifierImageFilter.cpp
index 61a31aef8a..524a4bb662 100644
--- a/src/effects/SkMagnifierImageFilter.cpp
+++ b/src/effects/SkMagnifierImageFilter.cpp
@@ -72,18 +72,18 @@ private:
// For brevity
typedef GrGLUniformManager::UniformHandle UniformHandle;
-class GrGLMagnifierEffect : public GrGLLegacyEffect {
+class GrGLMagnifierEffect : public GrGLEffect {
public:
GrGLMagnifierEffect(const GrBackendEffectFactory& factory,
const GrEffect& effect);
- virtual void setupVariables(GrGLShaderBuilder* state) SK_OVERRIDE;
- virtual void emitVS(GrGLShaderBuilder* state,
- const char* vertexCoords) SK_OVERRIDE;
- virtual void emitFS(GrGLShaderBuilder* state,
- const char* outputColor,
- const char* inputColor,
- const TextureSamplerArray&) SK_OVERRIDE;
+ virtual void emitCode(GrGLShaderBuilder*,
+ const GrEffect&,
+ EffectKey,
+ const char* vertexCoords,
+ const char* outputColor,
+ const char* inputColor,
+ const TextureSamplerArray&) SK_OVERRIDE;
virtual void setData(const GrGLUniformManager& uman, const GrEffectStage& stage) SK_OVERRIDE;
@@ -95,7 +95,7 @@ private:
UniformHandle fZoomVar;
UniformHandle fInsetVar;
- typedef GrGLLegacyEffect INHERITED;
+ typedef GrGLEffect INHERITED;
};
GrGLMagnifierEffect::GrGLMagnifierEffect(const GrBackendEffectFactory& factory,
@@ -106,41 +106,37 @@ GrGLMagnifierEffect::GrGLMagnifierEffect(const GrBackendEffectFactory& factory,
, fInsetVar(GrGLUniformManager::kInvalidUniformHandle) {
}
-void GrGLMagnifierEffect::setupVariables(GrGLShaderBuilder* state) {
- fOffsetVar = state->addUniform(
+void GrGLMagnifierEffect::emitCode(GrGLShaderBuilder* builder,
+ const GrEffect&,
+ EffectKey,
+ const char* vertexCoords,
+ const char* outputColor,
+ const char* inputColor,
+ const TextureSamplerArray& samplers) {
+ fOffsetVar = builder->addUniform(
GrGLShaderBuilder::kFragment_ShaderType |
GrGLShaderBuilder::kVertex_ShaderType,
kVec2f_GrSLType, "uOffset");
- fZoomVar = state->addUniform(
+ fZoomVar = builder->addUniform(
GrGLShaderBuilder::kFragment_ShaderType |
GrGLShaderBuilder::kVertex_ShaderType,
kVec2f_GrSLType, "uZoom");
- fInsetVar = state->addUniform(
+ fInsetVar = builder->addUniform(
GrGLShaderBuilder::kFragment_ShaderType |
GrGLShaderBuilder::kVertex_ShaderType,
kVec2f_GrSLType, "uInset");
-}
-
-void GrGLMagnifierEffect::emitVS(GrGLShaderBuilder* state,
- const char* vertexCoords) {
-}
-void GrGLMagnifierEffect::emitFS(GrGLShaderBuilder* state,
- const char* outputColor,
- const char* inputColor,
- const TextureSamplerArray& samplers) {
- SkString* code = &state->fFSCode;
+ SkString* code = &builder->fFSCode;
- code->appendf("\t\tvec2 coord = %s;\n", state->defaultTexCoordsName());
+ code->appendf("\t\tvec2 coord = %s;\n", builder->defaultTexCoordsName());
code->appendf("\t\tvec2 zoom_coord = %s + %s / %s;\n",
- state->getUniformCStr(fOffsetVar),
- state->defaultTexCoordsName(),
- state->getUniformCStr(fZoomVar));
+ builder->getUniformCStr(fOffsetVar),
+ builder->defaultTexCoordsName(),
+ builder->getUniformCStr(fZoomVar));
code->appendf("\t\tvec2 delta = min(coord, vec2(1.0, 1.0) - coord);\n");
- code->appendf(
- "\t\tdelta = delta / %s;\n", state->getUniformCStr(fInsetVar));
+ code->appendf("\t\tdelta = delta / %s;\n", builder->getUniformCStr(fInsetVar));
code->appendf("\t\tfloat weight = 0.0;\n");
code->appendf("\t\tif (delta.s < 2.0 && delta.t < 2.0) {\n");
@@ -150,13 +146,12 @@ void GrGLMagnifierEffect::emitFS(GrGLShaderBuilder* state,
code->appendf("\t\t\tweight = min(dist * dist, 1.0);\n");
code->appendf("\t\t} else {\n");
code->appendf("\t\t\tvec2 delta_squared = delta * delta;\n");
- code->appendf(
- "\t\t\tweight = min(min(delta_squared.s, delta_squared.y), 1.0);\n");
+ code->appendf("\t\t\tweight = min(min(delta_squared.s, delta_squared.y), 1.0);\n");
code->appendf("\t\t}\n");
code->appendf("\t\tvec2 mix_coord = mix(coord, zoom_coord, weight);\n");
code->appendf("\t\tvec4 output_color = ");
- state->appendTextureLookup(code, samplers[0], "mix_coord");
+ builder->appendTextureLookup(code, samplers[0], "mix_coord");
code->append(";\n");
code->appendf("\t\t%s = output_color;", outputColor);