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

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

Issue 1251173002: Added GrGLFragmentProcessor::EmitArgs struct for use with emitCode() (Closed) Base URL: https://skia.googlesource.com/skia@composeshader_gpu
Patch Set: Created 5 years, 5 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
« no previous file with comments | « src/effects/SkPerlinNoiseShader.cpp ('k') | src/effects/gradients/SkLinearGradient.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 2015 Google Inc. 2 * Copyright 2015 Google Inc.
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 "SkTableColorFilter.h" 9 #include "SkTableColorFilter.h"
10 #include "SkColorPriv.h" 10 #include "SkColorPriv.h"
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 GrTextureStripAtlas* fAtlas; 372 GrTextureStripAtlas* fAtlas;
373 int fRow; 373 int fRow;
374 374
375 typedef GrFragmentProcessor INHERITED; 375 typedef GrFragmentProcessor INHERITED;
376 }; 376 };
377 377
378 class GLColorTableEffect : public GrGLFragmentProcessor { 378 class GLColorTableEffect : public GrGLFragmentProcessor {
379 public: 379 public:
380 GLColorTableEffect(const GrProcessor&); 380 GLColorTableEffect(const GrProcessor&);
381 381
382 virtual void emitCode(GrGLFPBuilder*, 382 virtual void emitCode(EmitArgs&) override;
383 const GrFragmentProcessor&,
384 const char* outputColor,
385 const char* inputColor,
386 const TransformedCoordsArray&,
387 const TextureSamplerArray&) override;
388 383
389 void setData(const GrGLProgramDataManager&, const GrProcessor&) override; 384 void setData(const GrGLProgramDataManager&, const GrProcessor&) override;
390 385
391 static void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuil der* b) {} 386 static void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessorKeyBuil der* b) {}
392 387
393 private: 388 private:
394 UniformHandle fRGBAYValuesUni; 389 UniformHandle fRGBAYValuesUni;
395 typedef GrGLFragmentProcessor INHERITED; 390 typedef GrGLFragmentProcessor INHERITED;
396 }; 391 };
397 392
(...skipping 12 matching lines...) Expand all
410 rgbaYValues[2] = rgbaYValues[1] + yDelta; 405 rgbaYValues[2] = rgbaYValues[1] + yDelta;
411 } else { 406 } else {
412 rgbaYValues[3] = 0.125; 407 rgbaYValues[3] = 0.125;
413 rgbaYValues[0] = 0.375; 408 rgbaYValues[0] = 0.375;
414 rgbaYValues[1] = 0.625; 409 rgbaYValues[1] = 0.625;
415 rgbaYValues[2] = 0.875; 410 rgbaYValues[2] = 0.875;
416 } 411 }
417 pdm.set4fv(fRGBAYValuesUni, 1, rgbaYValues); 412 pdm.set4fv(fRGBAYValuesUni, 1, rgbaYValues);
418 } 413 }
419 414
420 void GLColorTableEffect::emitCode(GrGLFPBuilder* builder, 415 void GLColorTableEffect::emitCode(EmitArgs& args) {
421 const GrFragmentProcessor&,
422 const char* outputColor,
423 const char* inputColor,
424 const TransformedCoordsArray&,
425 const TextureSamplerArray& samplers) {
426 const char* yoffsets; 416 const char* yoffsets;
427 fRGBAYValuesUni = builder->addUniform(GrGLFPBuilder::kFragment_Visibility, 417 fRGBAYValuesUni = args.fBuilder->addUniform(GrGLFPBuilder::kFragment_Visibil ity,
428 kVec4f_GrSLType, kDefault_GrSLPrecisio n, 418 kVec4f_GrSLType, kDefault_GrSLPrecisio n,
429 "yoffsets", &yoffsets); 419 "yoffsets", &yoffsets);
430 static const float kColorScaleFactor = 255.0f / 256.0f; 420 static const float kColorScaleFactor = 255.0f / 256.0f;
431 static const float kColorOffsetFactor = 1.0f / 512.0f; 421 static const float kColorOffsetFactor = 1.0f / 512.0f;
432 GrGLFragmentBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 422 GrGLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder();
433 if (NULL == inputColor) { 423 if (NULL == args.fInputColor) {
434 // the input color is solid white (all ones). 424 // the input color is solid white (all ones).
435 static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor; 425 static const float kMaxValue = kColorScaleFactor + kColorOffsetFactor;
436 fsBuilder->codeAppendf("\t\tvec4 coord = vec4(%f, %f, %f, %f);\n", 426 fsBuilder->codeAppendf("\t\tvec4 coord = vec4(%f, %f, %f, %f);\n",
437 kMaxValue, kMaxValue, kMaxValue, kMaxValue); 427 kMaxValue, kMaxValue, kMaxValue, kMaxValue);
438 428
439 } else { 429 } else {
440 fsBuilder->codeAppendf("\t\tfloat nonZeroAlpha = max(%s.a, .0001);\n", i nputColor); 430 fsBuilder->codeAppendf("\t\tfloat nonZeroAlpha = max(%s.a, .0001);\n", a rgs.fInputColor);
441 fsBuilder->codeAppendf("\t\tvec4 coord = vec4(%s.rgb / nonZeroAlpha, non ZeroAlpha);\n", inputColor); 431 fsBuilder->codeAppendf("\t\tvec4 coord = vec4(%s.rgb / nonZeroAlpha, non ZeroAlpha);\n",
432 args.fInputColor);
442 fsBuilder->codeAppendf("\t\tcoord = coord * %f + vec4(%f, %f, %f, %f);\n ", 433 fsBuilder->codeAppendf("\t\tcoord = coord * %f + vec4(%f, %f, %f, %f);\n ",
443 kColorScaleFactor, 434 kColorScaleFactor,
444 kColorOffsetFactor, kColorOffsetFactor, 435 kColorOffsetFactor, kColorOffsetFactor,
445 kColorOffsetFactor, kColorOffsetFactor); 436 kColorOffsetFactor, kColorOffsetFactor);
446 } 437 }
447 438
448 SkString coord; 439 SkString coord;
449 440
450 fsBuilder->codeAppendf("\t\t%s.a = ", outputColor); 441 fsBuilder->codeAppendf("\t\t%s.a = ", args.fOutputColor);
451 coord.printf("vec2(coord.a, %s.a)", yoffsets); 442 coord.printf("vec2(coord.a, %s.a)", yoffsets);
452 fsBuilder->appendTextureLookup(samplers[0], coord.c_str()); 443 fsBuilder->appendTextureLookup(args.fSamplers[0], coord.c_str());
453 fsBuilder->codeAppend(";\n"); 444 fsBuilder->codeAppend(";\n");
454 445
455 fsBuilder->codeAppendf("\t\t%s.r = ", outputColor); 446 fsBuilder->codeAppendf("\t\t%s.r = ", args.fOutputColor);
456 coord.printf("vec2(coord.r, %s.r)", yoffsets); 447 coord.printf("vec2(coord.r, %s.r)", yoffsets);
457 fsBuilder->appendTextureLookup(samplers[0], coord.c_str()); 448 fsBuilder->appendTextureLookup(args.fSamplers[0], coord.c_str());
458 fsBuilder->codeAppend(";\n"); 449 fsBuilder->codeAppend(";\n");
459 450
460 fsBuilder->codeAppendf("\t\t%s.g = ", outputColor); 451 fsBuilder->codeAppendf("\t\t%s.g = ", args.fOutputColor);
461 coord.printf("vec2(coord.g, %s.g)", yoffsets); 452 coord.printf("vec2(coord.g, %s.g)", yoffsets);
462 fsBuilder->appendTextureLookup(samplers[0], coord.c_str()); 453 fsBuilder->appendTextureLookup(args.fSamplers[0], coord.c_str());
463 fsBuilder->codeAppend(";\n"); 454 fsBuilder->codeAppend(";\n");
464 455
465 fsBuilder->codeAppendf("\t\t%s.b = ", outputColor); 456 fsBuilder->codeAppendf("\t\t%s.b = ", args.fOutputColor);
466 coord.printf("vec2(coord.b, %s.b)", yoffsets); 457 coord.printf("vec2(coord.b, %s.b)", yoffsets);
467 fsBuilder->appendTextureLookup(samplers[0], coord.c_str()); 458 fsBuilder->appendTextureLookup(args.fSamplers[0], coord.c_str());
468 fsBuilder->codeAppend(";\n"); 459 fsBuilder->codeAppend(";\n");
469 460
470 fsBuilder->codeAppendf("\t\t%s.rgb *= %s.a;\n", outputColor, outputColor); 461 fsBuilder->codeAppendf("\t\t%s.rgb *= %s.a;\n", args.fOutputColor, args.fOut putColor);
471 } 462 }
472 463
473 /////////////////////////////////////////////////////////////////////////////// 464 ///////////////////////////////////////////////////////////////////////////////
474 GrFragmentProcessor* ColorTableEffect::Create(GrContext* context, SkBitmap bitma p, unsigned flags) { 465 GrFragmentProcessor* ColorTableEffect::Create(GrContext* context, SkBitmap bitma p, unsigned flags) {
475 466
476 GrTextureStripAtlas::Desc desc; 467 GrTextureStripAtlas::Desc desc;
477 desc.fWidth = bitmap.width(); 468 desc.fWidth = bitmap.width();
478 desc.fHeight = 128; 469 desc.fHeight = 128;
479 desc.fRowHeight = bitmap.height(); 470 desc.fRowHeight = bitmap.height();
480 desc.fContext = context; 471 desc.fContext = context;
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after
621 SkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256], 612 SkColorFilter* SkTableColorFilter::CreateARGB(const uint8_t tableA[256],
622 const uint8_t tableR[256], 613 const uint8_t tableR[256],
623 const uint8_t tableG[256], 614 const uint8_t tableG[256],
624 const uint8_t tableB[256]) { 615 const uint8_t tableB[256]) {
625 return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB)); 616 return SkNEW_ARGS(SkTable_ColorFilter, (tableA, tableR, tableG, tableB));
626 } 617 }
627 618
628 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter) 619 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_START(SkTableColorFilter)
629 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter) 620 SK_DEFINE_FLATTENABLE_REGISTRAR_ENTRY(SkTable_ColorFilter)
630 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END 621 SK_DEFINE_FLATTENABLE_REGISTRAR_GROUP_END
OLDNEW
« no previous file with comments | « src/effects/SkPerlinNoiseShader.cpp ('k') | src/effects/gradients/SkLinearGradient.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698