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

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

Issue 1457543003: Add ShaderBuilders to EmitArgs and remove gettings from ProgBuilder. (Closed) Base URL: https://skia.googlesource.com/skia.git@master
Patch Set: Created 5 years, 1 month 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
« no previous file with comments | « src/effects/SkMagnifierImageFilter.cpp ('k') | src/effects/SkPerlinNoiseShader.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 "SkMorphologyImageFilter.h" 8 #include "SkMorphologyImageFilter.h"
9 #include "SkBitmap.h" 9 #include "SkBitmap.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after
290 void GrGLMorphologyEffect::emitCode(EmitArgs& args) { 290 void GrGLMorphologyEffect::emitCode(EmitArgs& args) {
291 fPixelSizeUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Vi sibility, 291 fPixelSizeUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Vi sibility,
292 kFloat_GrSLType, kDefault_GrSLPrecis ion, 292 kFloat_GrSLType, kDefault_GrSLPrecis ion,
293 "PixelSize"); 293 "PixelSize");
294 const char* pixelSizeInc = args.fBuilder->getUniformCStr(fPixelSizeUni); 294 const char* pixelSizeInc = args.fBuilder->getUniformCStr(fPixelSizeUni);
295 fRangeUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibi lity, 295 fRangeUni = args.fBuilder->addUniform(GrGLSLProgramBuilder::kFragment_Visibi lity,
296 kVec2f_GrSLType, kDefault_GrSLPrecis ion, 296 kVec2f_GrSLType, kDefault_GrSLPrecis ion,
297 "Range"); 297 "Range");
298 const char* range = args.fBuilder->getUniformCStr(fRangeUni); 298 const char* range = args.fBuilder->getUniformCStr(fRangeUni);
299 299
300 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder() ; 300 GrGLSLFragmentBuilder* fragBuilder = args.fFragBuilder;
301 SkString coords2D = fsBuilder->ensureFSCoords2D(args.fCoords, 0); 301 SkString coords2D = fragBuilder->ensureFSCoords2D(args.fCoords, 0);
302 const char* func; 302 const char* func;
303 switch (fType) { 303 switch (fType) {
304 case GrMorphologyEffect::kErode_MorphologyType: 304 case GrMorphologyEffect::kErode_MorphologyType:
305 fsBuilder->codeAppendf("\t\t%s = vec4(1, 1, 1, 1);\n", args.fOutputC olor); 305 fragBuilder->codeAppendf("\t\t%s = vec4(1, 1, 1, 1);\n", args.fOutpu tColor);
306 func = "min"; 306 func = "min";
307 break; 307 break;
308 case GrMorphologyEffect::kDilate_MorphologyType: 308 case GrMorphologyEffect::kDilate_MorphologyType:
309 fsBuilder->codeAppendf("\t\t%s = vec4(0, 0, 0, 0);\n", args.fOutputC olor); 309 fragBuilder->codeAppendf("\t\t%s = vec4(0, 0, 0, 0);\n", args.fOutpu tColor);
310 func = "max"; 310 func = "max";
311 break; 311 break;
312 default: 312 default:
313 SkFAIL("Unexpected type"); 313 SkFAIL("Unexpected type");
314 func = ""; // suppress warning 314 func = ""; // suppress warning
315 break; 315 break;
316 } 316 }
317 317
318 const char* dir; 318 const char* dir;
319 switch (fDirection) { 319 switch (fDirection) {
320 case Gr1DKernelEffect::kX_Direction: 320 case Gr1DKernelEffect::kX_Direction:
321 dir = "x"; 321 dir = "x";
322 break; 322 break;
323 case Gr1DKernelEffect::kY_Direction: 323 case Gr1DKernelEffect::kY_Direction:
324 dir = "y"; 324 dir = "y";
325 break; 325 break;
326 default: 326 default:
327 SkFAIL("Unknown filter direction."); 327 SkFAIL("Unknown filter direction.");
328 dir = ""; // suppress warning 328 dir = ""; // suppress warning
329 } 329 }
330 330
331 // vec2 coord = coord2D; 331 // vec2 coord = coord2D;
332 fsBuilder->codeAppendf("\t\tvec2 coord = %s;\n", coords2D.c_str()); 332 fragBuilder->codeAppendf("\t\tvec2 coord = %s;\n", coords2D.c_str());
333 // coord.x -= radius * pixelSize; 333 // coord.x -= radius * pixelSize;
334 fsBuilder->codeAppendf("\t\tcoord.%s -= %d.0 * %s; \n", dir, fRadius, pixelS izeInc); 334 fragBuilder->codeAppendf("\t\tcoord.%s -= %d.0 * %s; \n", dir, fRadius, pixe lSizeInc);
335 if (fUseRange) { 335 if (fUseRange) {
336 // highBound = min(highBound, coord.x + (width-1) * pixelSize); 336 // highBound = min(highBound, coord.x + (width-1) * pixelSize);
337 fsBuilder->codeAppendf("\t\tfloat highBound = min(%s.y, coord.%s + %f * %s);", 337 fragBuilder->codeAppendf("\t\tfloat highBound = min(%s.y, coord.%s + %f * %s);",
338 range, dir, float(width() - 1), pixelSizeInc); 338 range, dir, float(width() - 1), pixelSizeInc);
339 // coord.x = max(lowBound, coord.x); 339 // coord.x = max(lowBound, coord.x);
340 fsBuilder->codeAppendf("\t\tcoord.%s = max(%s.x, coord.%s);", dir, range , dir); 340 fragBuilder->codeAppendf("\t\tcoord.%s = max(%s.x, coord.%s);", dir, ran ge, dir);
341 } 341 }
342 fsBuilder->codeAppendf("\t\tfor (int i = 0; i < %d; i++) {\n", width()); 342 fragBuilder->codeAppendf("\t\tfor (int i = 0; i < %d; i++) {\n", width());
343 fsBuilder->codeAppendf("\t\t\t%s = %s(%s, ", args.fOutputColor, func, args.f OutputColor); 343 fragBuilder->codeAppendf("\t\t\t%s = %s(%s, ", args.fOutputColor, func, args .fOutputColor);
344 fsBuilder->appendTextureLookup(args.fSamplers[0], "coord"); 344 fragBuilder->appendTextureLookup(args.fSamplers[0], "coord");
345 fsBuilder->codeAppend(");\n"); 345 fragBuilder->codeAppend(");\n");
346 // coord.x += pixelSize; 346 // coord.x += pixelSize;
347 fsBuilder->codeAppendf("\t\t\tcoord.%s += %s;\n", dir, pixelSizeInc); 347 fragBuilder->codeAppendf("\t\t\tcoord.%s += %s;\n", dir, pixelSizeInc);
348 if (fUseRange) { 348 if (fUseRange) {
349 // coord.x = min(highBound, coord.x); 349 // coord.x = min(highBound, coord.x);
350 fsBuilder->codeAppendf("\t\t\tcoord.%s = min(highBound, coord.%s);", dir , dir); 350 fragBuilder->codeAppendf("\t\t\tcoord.%s = min(highBound, coord.%s);", d ir, dir);
351 } 351 }
352 fsBuilder->codeAppend("\t\t}\n"); 352 fragBuilder->codeAppend("\t\t}\n");
353 SkString modulate; 353 SkString modulate;
354 GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor); 354 GrGLSLMulVarBy4f(&modulate, args.fOutputColor, args.fInputColor);
355 fsBuilder->codeAppend(modulate.c_str()); 355 fragBuilder->codeAppend(modulate.c_str());
356 } 356 }
357 357
358 void GrGLMorphologyEffect::GenKey(const GrProcessor& proc, 358 void GrGLMorphologyEffect::GenKey(const GrProcessor& proc,
359 const GrGLSLCaps&, GrProcessorKeyBuilder* b) { 359 const GrGLSLCaps&, GrProcessorKeyBuilder* b) {
360 const GrMorphologyEffect& m = proc.cast<GrMorphologyEffect>(); 360 const GrMorphologyEffect& m = proc.cast<GrMorphologyEffect>();
361 uint32_t key = static_cast<uint32_t>(m.radius()); 361 uint32_t key = static_cast<uint32_t>(m.radius());
362 key |= (m.type() << 8); 362 key |= (m.type() << 8);
363 key |= (m.direction() << 9); 363 key |= (m.direction() << 9);
364 if (m.useRange()) key |= 1 << 10; 364 if (m.useRange()) key |= 1 << 10;
365 b->add32(key); 365 b->add32(key);
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
671 SkBitmap* result, SkIPoint* offset) con st { 671 SkBitmap* result, SkIPoint* offset) con st {
672 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset); 672 return this->filterImageGPUGeneric(true, proxy, src, ctx, result, offset);
673 } 673 }
674 674
675 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx, 675 bool SkErodeImageFilter::filterImageGPU(Proxy* proxy, const SkBitmap& src, const Context& ctx,
676 SkBitmap* result, SkIPoint* offset) cons t { 676 SkBitmap* result, SkIPoint* offset) cons t {
677 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset); 677 return this->filterImageGPUGeneric(false, proxy, src, ctx, result, offset);
678 } 678 }
679 679
680 #endif 680 #endif
OLDNEW
« no previous file with comments | « src/effects/SkMagnifierImageFilter.cpp ('k') | src/effects/SkPerlinNoiseShader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698