Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(157)

Side by Side Diff: src/effects/SkMagnifierImageFilter.cpp

Issue 23018003: Rename GrGLUniformManager to GrGLUniform and ref GrGLUniforms directly Base URL: https://skia.googlecode.com/svn/trunk
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/effects/SkLightingImageFilter.cpp ('k') | src/effects/SkMatrixConvolutionImageFilter.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright 2012 The Android Open Source Project 2 * Copyright 2012 The Android Open Source Project
3 * 3 *
4 * Use of this source code is governed by a BSD-style license that can be 4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file. 5 * found in the LICENSE file.
6 */ 6 */
7 7
8 #include "SkBitmap.h" 8 #include "SkBitmap.h"
9 #include "SkMagnifierImageFilter.h" 9 #include "SkMagnifierImageFilter.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
80 float fXOffset; 80 float fXOffset;
81 float fYOffset; 81 float fYOffset;
82 float fXZoom; 82 float fXZoom;
83 float fYZoom; 83 float fYZoom;
84 float fXInset; 84 float fXInset;
85 float fYInset; 85 float fYInset;
86 86
87 typedef GrSingleTextureEffect INHERITED; 87 typedef GrSingleTextureEffect INHERITED;
88 }; 88 };
89 89
90 // For brevity
91 typedef GrGLUniformManager::UniformHandle UniformHandle;
92
93 class GrGLMagnifierEffect : public GrGLEffect { 90 class GrGLMagnifierEffect : public GrGLEffect {
94 public: 91 public:
95 GrGLMagnifierEffect(const GrBackendEffectFactory&, const GrDrawEffect&); 92 GrGLMagnifierEffect(const GrBackendEffectFactory&, const GrDrawEffect&);
96 93
97 virtual void emitCode(GrGLShaderBuilder*, 94 virtual void emitCode(GrGLShaderBuilder*,
98 const GrDrawEffect&, 95 const GrDrawEffect&,
99 EffectKey, 96 EffectKey,
100 const char* outputColor, 97 const char* outputColor,
101 const char* inputColor, 98 const char* inputColor,
102 const TextureSamplerArray&) SK_OVERRIDE; 99 const TextureSamplerArray&) SK_OVERRIDE;
103 100
104 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER RIDE; 101 virtual void setData(const GrGLContext&, const GrDrawEffect&) SK_OVERRIDE;
105 102
106 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); 103 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&);
107 104
108 private: 105 private:
109 UniformHandle fOffsetVar; 106 GrGLUniform* fOffsetVar;
110 UniformHandle fZoomVar; 107 GrGLUniform* fZoomVar;
111 UniformHandle fInsetVar; 108 GrGLUniform* fInsetVar;
112 109
113 GrGLEffectMatrix fEffectMatrix; 110 GrGLEffectMatrix fEffectMatrix;
114 111
115 typedef GrGLEffect INHERITED; 112 typedef GrGLEffect INHERITED;
116 }; 113 };
117 114
118 GrGLMagnifierEffect::GrGLMagnifierEffect(const GrBackendEffectFactory& factory, 115 GrGLMagnifierEffect::GrGLMagnifierEffect(const GrBackendEffectFactory& factory,
119 const GrDrawEffect& drawEffect) 116 const GrDrawEffect& drawEffect)
120 : INHERITED(factory) 117 : INHERITED(factory)
121 , fOffsetVar(GrGLUniformManager::kInvalidUniformHandle) 118 , fOffsetVar(NULL)
122 , fZoomVar(GrGLUniformManager::kInvalidUniformHandle) 119 , fZoomVar(NULL)
123 , fInsetVar(GrGLUniformManager::kInvalidUniformHandle) 120 , fInsetVar(NULL)
124 , fEffectMatrix(drawEffect.castEffect<GrMagnifierEffect>().coordsType()) { 121 , fEffectMatrix(drawEffect.castEffect<GrMagnifierEffect>().coordsType()) {
125 } 122 }
126 123
127 void GrGLMagnifierEffect::emitCode(GrGLShaderBuilder* builder, 124 void GrGLMagnifierEffect::emitCode(GrGLShaderBuilder* builder,
128 const GrDrawEffect&, 125 const GrDrawEffect&,
129 EffectKey key, 126 EffectKey key,
130 const char* outputColor, 127 const char* outputColor,
131 const char* inputColor, 128 const char* inputColor,
132 const TextureSamplerArray& samplers) { 129 const TextureSamplerArray& samplers) {
133 const char* coords; 130 const char* coords;
134 fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, &coords); 131 fEffectMatrix.emitCodeMakeFSCoords2D(builder, key, &coords);
135 fOffsetVar = builder->addUniform( 132 GrGLShaderBuilder::Uniform* offsetVar = builder->addUniform(
136 GrGLShaderBuilder::kFragment_ShaderType | 133 GrGLShaderBuilder::kFragment_ShaderType |
137 GrGLShaderBuilder::kVertex_ShaderType, 134 GrGLShaderBuilder::kVertex_ShaderType,
138 kVec2f_GrSLType, "uOffset"); 135 kVec2f_GrSLType, "uOffset");
139 fZoomVar = builder->addUniform( 136 fOffsetVar = offsetVar->glUniform();
137
138 GrGLShaderBuilder::Uniform* zoomVar = builder->addUniform(
140 GrGLShaderBuilder::kFragment_ShaderType | 139 GrGLShaderBuilder::kFragment_ShaderType |
141 GrGLShaderBuilder::kVertex_ShaderType, 140 GrGLShaderBuilder::kVertex_ShaderType,
142 kVec2f_GrSLType, "uZoom"); 141 kVec2f_GrSLType, "uZoom");
143 fInsetVar = builder->addUniform( 142 fZoomVar = zoomVar->glUniform();
143
144 GrGLShaderBuilder::Uniform* insetVar = builder->addUniform(
144 GrGLShaderBuilder::kFragment_ShaderType | 145 GrGLShaderBuilder::kFragment_ShaderType |
145 GrGLShaderBuilder::kVertex_ShaderType, 146 GrGLShaderBuilder::kVertex_ShaderType,
146 kVec2f_GrSLType, "uInset"); 147 kVec2f_GrSLType, "uInset");
147 148
149 fInsetVar = insetVar->glUniform();
150
148 builder->fsCodeAppendf("\t\tvec2 coord = %s;\n", coords); 151 builder->fsCodeAppendf("\t\tvec2 coord = %s;\n", coords);
149 builder->fsCodeAppendf("\t\tvec2 zoom_coord = %s + %s / %s;\n", 152 builder->fsCodeAppendf("\t\tvec2 zoom_coord = %s + %s / %s;\n",
150 builder->getUniformCStr(fOffsetVar), 153 offsetVar->c_str(),
151 coords, 154 coords,
152 builder->getUniformCStr(fZoomVar)); 155 zoomVar->c_str());
153 156
154 builder->fsCodeAppend("\t\tvec2 delta = min(coord, vec2(1.0, 1.0) - coord);\ n"); 157 builder->fsCodeAppend("\t\tvec2 delta = min(coord, vec2(1.0, 1.0) - coord);\ n");
155 158
156 builder->fsCodeAppendf("\t\tdelta = delta / %s;\n", builder->getUniformCStr( fInsetVar)); 159 builder->fsCodeAppendf("\t\tdelta = delta / %s;\n", insetVar->c_str());
157 160
158 builder->fsCodeAppend("\t\tfloat weight = 0.0;\n"); 161 builder->fsCodeAppend("\t\tfloat weight = 0.0;\n");
159 builder->fsCodeAppend("\t\tif (delta.s < 2.0 && delta.t < 2.0) {\n"); 162 builder->fsCodeAppend("\t\tif (delta.s < 2.0 && delta.t < 2.0) {\n");
160 builder->fsCodeAppend("\t\t\tdelta = vec2(2.0, 2.0) - delta;\n"); 163 builder->fsCodeAppend("\t\t\tdelta = vec2(2.0, 2.0) - delta;\n");
161 builder->fsCodeAppend("\t\t\tfloat dist = length(delta);\n"); 164 builder->fsCodeAppend("\t\t\tfloat dist = length(delta);\n");
162 builder->fsCodeAppend("\t\t\tdist = max(2.0 - dist, 0.0);\n"); 165 builder->fsCodeAppend("\t\t\tdist = max(2.0 - dist, 0.0);\n");
163 builder->fsCodeAppend("\t\t\tweight = min(dist * dist, 1.0);\n"); 166 builder->fsCodeAppend("\t\t\tweight = min(dist * dist, 1.0);\n");
164 builder->fsCodeAppend("\t\t} else {\n"); 167 builder->fsCodeAppend("\t\t} else {\n");
165 builder->fsCodeAppend("\t\t\tvec2 delta_squared = delta * delta;\n"); 168 builder->fsCodeAppend("\t\t\tvec2 delta_squared = delta * delta;\n");
166 builder->fsCodeAppend("\t\t\tweight = min(min(delta_squared.s, delta_squared .y), 1.0);\n"); 169 builder->fsCodeAppend("\t\t\tweight = min(min(delta_squared.s, delta_squared .y), 1.0);\n");
167 builder->fsCodeAppend("\t\t}\n"); 170 builder->fsCodeAppend("\t\t}\n");
168 171
169 builder->fsCodeAppend("\t\tvec2 mix_coord = mix(coord, zoom_coord, weight);\ n"); 172 builder->fsCodeAppend("\t\tvec2 mix_coord = mix(coord, zoom_coord, weight);\ n");
170 builder->fsCodeAppend("\t\tvec4 output_color = "); 173 builder->fsCodeAppend("\t\tvec4 output_color = ");
171 builder->appendTextureLookup(GrGLShaderBuilder::kFragment_ShaderType, sample rs[0], "mix_coord"); 174 builder->appendTextureLookup(GrGLShaderBuilder::kFragment_ShaderType, sample rs[0], "mix_coord");
172 builder->fsCodeAppend(";\n"); 175 builder->fsCodeAppend(";\n");
173 176
174 builder->fsCodeAppendf("\t\t%s = output_color;", outputColor); 177 builder->fsCodeAppendf("\t\t%s = output_color;", outputColor);
175 SkString modulate; 178 SkString modulate;
176 GrGLSLMulVarBy4f(&modulate, 2, outputColor, inputColor); 179 GrGLSLMulVarBy4f(&modulate, 2, outputColor, inputColor);
177 builder->fsCodeAppend(modulate.c_str()); 180 builder->fsCodeAppend(modulate.c_str());
178 } 181 }
179 182
180 void GrGLMagnifierEffect::setData(const GrGLUniformManager& uman, 183 void GrGLMagnifierEffect::setData(const GrGLContext& context,
181 const GrDrawEffect& drawEffect) { 184 const GrDrawEffect& drawEffect) {
182 const GrMagnifierEffect& zoom = drawEffect.castEffect<GrMagnifierEffect>(); 185 const GrMagnifierEffect& zoom = drawEffect.castEffect<GrMagnifierEffect>();
183 uman.set2f(fOffsetVar, zoom.x_offset(), zoom.y_offset()); 186 fOffsetVar->set2f(context, zoom.x_offset(), zoom.y_offset());
184 uman.set2f(fZoomVar, zoom.x_zoom(), zoom.y_zoom()); 187 fZoomVar->set2f(context, zoom.x_zoom(), zoom.y_zoom());
185 uman.set2f(fInsetVar, zoom.x_inset(), zoom.y_inset()); 188 fInsetVar->set2f(context, zoom.x_inset(), zoom.y_inset());
186 fEffectMatrix.setData(uman, zoom.getMatrix(), drawEffect, zoom.texture(0)); 189 fEffectMatrix.setData(context, zoom.getMatrix(), drawEffect, zoom.texture(0) );
187 } 190 }
188 191
189 GrGLEffect::EffectKey GrGLMagnifierEffect::GenKey(const GrDrawEffect& drawEffect , 192 GrGLEffect::EffectKey GrGLMagnifierEffect::GenKey(const GrDrawEffect& drawEffect ,
190 const GrGLCaps&) { 193 const GrGLCaps&) {
191 const GrMagnifierEffect& zoom = drawEffect.castEffect<GrMagnifierEffect>(); 194 const GrMagnifierEffect& zoom = drawEffect.castEffect<GrMagnifierEffect>();
192 return GrGLEffectMatrix::GenKey(zoom.getMatrix(), 195 return GrGLEffectMatrix::GenKey(zoom.getMatrix(),
193 drawEffect, 196 drawEffect,
194 zoom.coordsType(), 197 zoom.coordsType(),
195 zoom.texture(0)); 198 zoom.texture(0));
196 } 199 }
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
345 348
346 int x_val = SkMin32(SkScalarFloorToInt(x_interp), width - 1); 349 int x_val = SkMin32(SkScalarFloorToInt(x_interp), width - 1);
347 int y_val = SkMin32(SkScalarFloorToInt(y_interp), height - 1); 350 int y_val = SkMin32(SkScalarFloorToInt(y_interp), height - 1);
348 351
349 *dptr = sptr[y_val * width + x_val]; 352 *dptr = sptr[y_val * width + x_val];
350 dptr++; 353 dptr++;
351 } 354 }
352 } 355 }
353 return true; 356 return true;
354 } 357 }
OLDNEW
« no previous file with comments | « src/effects/SkLightingImageFilter.cpp ('k') | src/effects/SkMatrixConvolutionImageFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698