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

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

Issue 571163002: removing GrDrawEffect (Closed) Base URL: https://skia.googlesource.com/skia.git@gp3
Patch Set: rebase after revert Created 6 years, 3 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/SkMorphologyImageFilter.cpp ('k') | src/effects/SkTableColorFilter.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 2013 Google Inc. 2 * Copyright 2013 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 "SkDither.h" 8 #include "SkDither.h"
9 #include "SkPerlinNoiseShader.h" 9 #include "SkPerlinNoiseShader.h"
10 #include "SkColorFilter.h" 10 #include "SkColorFilter.h"
(...skipping 494 matching lines...) Expand 10 before | Expand all | Expand 10 after
505 505
506 ///////////////////////////////////////////////////////////////////// 506 /////////////////////////////////////////////////////////////////////
507 507
508 #if SK_SUPPORT_GPU 508 #if SK_SUPPORT_GPU
509 509
510 #include "GrTBackendEffectFactory.h" 510 #include "GrTBackendEffectFactory.h"
511 511
512 class GrGLPerlinNoise : public GrGLEffect { 512 class GrGLPerlinNoise : public GrGLEffect {
513 public: 513 public:
514 GrGLPerlinNoise(const GrBackendEffectFactory& factory, 514 GrGLPerlinNoise(const GrBackendEffectFactory& factory,
515 const GrDrawEffect& drawEffect); 515 const GrEffect& effect);
516 virtual ~GrGLPerlinNoise() {} 516 virtual ~GrGLPerlinNoise() {}
517 517
518 virtual void emitCode(GrGLProgramBuilder*, 518 virtual void emitCode(GrGLProgramBuilder*,
519 const GrDrawEffect&, 519 const GrEffect&,
520 const GrEffectKey&, 520 const GrEffectKey&,
521 const char* outputColor, 521 const char* outputColor,
522 const char* inputColor, 522 const char* inputColor,
523 const TransformedCoordsArray&, 523 const TransformedCoordsArray&,
524 const TextureSamplerArray&) SK_OVERRIDE; 524 const TextureSamplerArray&) SK_OVERRIDE;
525 525
526 virtual void setData(const GrGLProgramDataManager&, const GrDrawEffect&) SK_ OVERRIDE; 526 virtual void setData(const GrGLProgramDataManager&, const GrEffect&) SK_OVER RIDE;
527 527
528 static inline void GenKey(const GrDrawEffect&, const GrGLCaps&, GrEffectKeyB uilder* b); 528 static inline void GenKey(const GrEffect&, const GrGLCaps&, GrEffectKeyBuild er* b);
529 529
530 private: 530 private:
531 531
532 GrGLProgramDataManager::UniformHandle fStitchDataUni; 532 GrGLProgramDataManager::UniformHandle fStitchDataUni;
533 SkPerlinNoiseShader::Type fType; 533 SkPerlinNoiseShader::Type fType;
534 bool fStitchTiles; 534 bool fStitchTiles;
535 int fNumOctaves; 535 int fNumOctaves;
536 GrGLProgramDataManager::UniformHandle fBaseFrequencyUni; 536 GrGLProgramDataManager::UniformHandle fBaseFrequencyUni;
537 GrGLProgramDataManager::UniformHandle fAlphaUni; 537 GrGLProgramDataManager::UniformHandle fAlphaUni;
538 538
(...skipping 28 matching lines...) Expand all
567 bool stitchTiles() const { return fStitchTiles; } 567 bool stitchTiles() const { return fStitchTiles; }
568 const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency ; } 568 const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency ; }
569 int numOctaves() const { return fNumOctaves; } 569 int numOctaves() const { return fNumOctaves; }
570 const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); } 570 const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); }
571 uint8_t alpha() const { return fAlpha; } 571 uint8_t alpha() const { return fAlpha; }
572 572
573 typedef GrGLPerlinNoise GLEffect; 573 typedef GrGLPerlinNoise GLEffect;
574 574
575 private: 575 private:
576 virtual bool onIsEqual(const GrEffect& sBase) const SK_OVERRIDE { 576 virtual bool onIsEqual(const GrEffect& sBase) const SK_OVERRIDE {
577 const GrPerlinNoiseEffect& s = CastEffect<GrPerlinNoiseEffect>(sBase); 577 const GrPerlinNoiseEffect& s = sBase.cast<GrPerlinNoiseEffect>();
578 return fType == s.fType && 578 return fType == s.fType &&
579 fPaintingData->fBaseFrequency == s.fPaintingData->fBaseFrequency && 579 fPaintingData->fBaseFrequency == s.fPaintingData->fBaseFrequency &&
580 fNumOctaves == s.fNumOctaves && 580 fNumOctaves == s.fNumOctaves &&
581 fStitchTiles == s.fStitchTiles && 581 fStitchTiles == s.fStitchTiles &&
582 fCoordTransform.getMatrix() == s.fCoordTransform.getMatrix() && 582 fCoordTransform.getMatrix() == s.fCoordTransform.getMatrix() &&
583 fAlpha == s.fAlpha && 583 fAlpha == s.fAlpha &&
584 fPermutationsAccess.getTexture() == s.fPermutationsAccess.getText ure() && 584 fPermutationsAccess.getTexture() == s.fPermutationsAccess.getText ure() &&
585 fNoiseAccess.getTexture() == s.fNoiseAccess.getTexture() && 585 fNoiseAccess.getTexture() == s.fNoiseAccess.getTexture() &&
586 fPaintingData->fStitchDataInit == s.fPaintingData->fStitchDataIni t; 586 fPaintingData->fStitchDataInit == s.fPaintingData->fStitchDataIni t;
587 } 587 }
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
649 SkPaint paint; 649 SkPaint paint;
650 GrColor paintColor; 650 GrColor paintColor;
651 GrEffect* effect; 651 GrEffect* effect;
652 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec t)); 652 SkAssertResult(shader->asNewEffect(context, paint, NULL, &paintColor, &effec t));
653 653
654 SkDELETE(shader); 654 SkDELETE(shader);
655 655
656 return effect; 656 return effect;
657 } 657 }
658 658
659 GrGLPerlinNoise::GrGLPerlinNoise(const GrBackendEffectFactory& factory, const Gr DrawEffect& drawEffect) 659 GrGLPerlinNoise::GrGLPerlinNoise(const GrBackendEffectFactory& factory, const Gr Effect& effect)
660 : INHERITED (factory) 660 : INHERITED (factory)
661 , fType(drawEffect.castEffect<GrPerlinNoiseEffect>().type()) 661 , fType(effect.cast<GrPerlinNoiseEffect>().type())
662 , fStitchTiles(drawEffect.castEffect<GrPerlinNoiseEffect>().stitchTiles()) 662 , fStitchTiles(effect.cast<GrPerlinNoiseEffect>().stitchTiles())
663 , fNumOctaves(drawEffect.castEffect<GrPerlinNoiseEffect>().numOctaves()) { 663 , fNumOctaves(effect.cast<GrPerlinNoiseEffect>().numOctaves()) {
664 } 664 }
665 665
666 void GrGLPerlinNoise::emitCode(GrGLProgramBuilder* builder, 666 void GrGLPerlinNoise::emitCode(GrGLProgramBuilder* builder,
667 const GrDrawEffect&, 667 const GrEffect&,
668 const GrEffectKey& key, 668 const GrEffectKey& key,
669 const char* outputColor, 669 const char* outputColor,
670 const char* inputColor, 670 const char* inputColor,
671 const TransformedCoordsArray& coords, 671 const TransformedCoordsArray& coords,
672 const TextureSamplerArray& samplers) { 672 const TextureSamplerArray& samplers) {
673 sk_ignore_unused_variable(inputColor); 673 sk_ignore_unused_variable(inputColor);
674 674
675 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder(); 675 GrGLFragmentShaderBuilder* fsBuilder = builder->getFragmentShaderBuilder();
676 SkString vCoords = fsBuilder->ensureFSCoords2D(coords, 0); 676 SkString vCoords = fsBuilder->ensureFSCoords2D(coords, 0);
677 677
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
912 fsBuilder->codeAppendf("\n\t\t%s.a *= %s;", outputColor, alphaUni); 912 fsBuilder->codeAppendf("\n\t\t%s.a *= %s;", outputColor, alphaUni);
913 913
914 // Clamp values 914 // Clamp values
915 fsBuilder->codeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", outputColor, outpu tColor); 915 fsBuilder->codeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", outputColor, outpu tColor);
916 916
917 // Pre-multiply the result 917 // Pre-multiply the result
918 fsBuilder->codeAppendf("\n\t\t%s = vec4(%s.rgb * %s.aaa, %s.a);\n", 918 fsBuilder->codeAppendf("\n\t\t%s = vec4(%s.rgb * %s.aaa, %s.a);\n",
919 outputColor, outputColor, outputColor, outputColor); 919 outputColor, outputColor, outputColor, outputColor);
920 } 920 }
921 921
922 void GrGLPerlinNoise::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, Gr EffectKeyBuilder* b) { 922 void GrGLPerlinNoise::GenKey(const GrEffect& effect, const GrGLCaps&, GrEffectKe yBuilder* b) {
923 const GrPerlinNoiseEffect& turbulence = drawEffect.castEffect<GrPerlinNoiseE ffect>(); 923 const GrPerlinNoiseEffect& turbulence = effect.cast<GrPerlinNoiseEffect>();
924 924
925 uint32_t key = turbulence.numOctaves(); 925 uint32_t key = turbulence.numOctaves();
926 926
927 key = key << 3; // Make room for next 3 bits 927 key = key << 3; // Make room for next 3 bits
928 928
929 switch (turbulence.type()) { 929 switch (turbulence.type()) {
930 case SkPerlinNoiseShader::kFractalNoise_Type: 930 case SkPerlinNoiseShader::kFractalNoise_Type:
931 key |= 0x1; 931 key |= 0x1;
932 break; 932 break;
933 case SkPerlinNoiseShader::kTurbulence_Type: 933 case SkPerlinNoiseShader::kTurbulence_Type:
934 key |= 0x2; 934 key |= 0x2;
935 break; 935 break;
936 default: 936 default:
937 // leave key at 0 937 // leave key at 0
938 break; 938 break;
939 } 939 }
940 940
941 if (turbulence.stitchTiles()) { 941 if (turbulence.stitchTiles()) {
942 key |= 0x4; // Flip the 3rd bit if tile stitching is on 942 key |= 0x4; // Flip the 3rd bit if tile stitching is on
943 } 943 }
944 944
945 b->add32(key); 945 b->add32(key);
946 } 946 }
947 947
948 void GrGLPerlinNoise::setData(const GrGLProgramDataManager& pdman, const GrDrawE ffect& drawEffect) { 948 void GrGLPerlinNoise::setData(const GrGLProgramDataManager& pdman, const GrEffec t& effect) {
949 INHERITED::setData(pdman, drawEffect); 949 INHERITED::setData(pdman, effect);
950 950
951 const GrPerlinNoiseEffect& turbulence = drawEffect.castEffect<GrPerlinNoiseE ffect>(); 951 const GrPerlinNoiseEffect& turbulence = effect.cast<GrPerlinNoiseEffect>();
952 952
953 const SkVector& baseFrequency = turbulence.baseFrequency(); 953 const SkVector& baseFrequency = turbulence.baseFrequency();
954 pdman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY); 954 pdman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY);
955 pdman.set1f(fAlphaUni, SkScalarDiv(SkIntToScalar(turbulence.alpha()), SkIntT oScalar(255))); 955 pdman.set1f(fAlphaUni, SkScalarDiv(SkIntToScalar(turbulence.alpha()), SkIntT oScalar(255)));
956 956
957 if (turbulence.stitchTiles()) { 957 if (turbulence.stitchTiles()) {
958 const SkPerlinNoiseShader::StitchData& stitchData = turbulence.stitchDat a(); 958 const SkPerlinNoiseShader::StitchData& stitchData = turbulence.stitchDat a();
959 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), 959 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth),
960 SkIntToScalar(stitchData.fHeight)); 960 SkIntToScalar(stitchData.fHeight));
961 } 961 }
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
1062 str->append(" seed: "); 1062 str->append(" seed: ");
1063 str->appendScalar(fSeed); 1063 str->appendScalar(fSeed);
1064 str->append(" stitch tiles: "); 1064 str->append(" stitch tiles: ");
1065 str->append(fStitchTiles ? "true " : "false "); 1065 str->append(fStitchTiles ? "true " : "false ");
1066 1066
1067 this->INHERITED::toString(str); 1067 this->INHERITED::toString(str);
1068 1068
1069 str->append(")"); 1069 str->append(")");
1070 } 1070 }
1071 #endif 1071 #endif
OLDNEW
« no previous file with comments | « src/effects/SkMorphologyImageFilter.cpp ('k') | src/effects/SkTableColorFilter.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698