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

Side by Side Diff: experimental/SkPerlinNoiseShader2/SkPerlinNoiseShader2.cpp

Issue 1434313002: Make all GrFragmentProcessors GL independent. (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 | « no previous file | gm/dcshader.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 "SkPerlinNoiseShader2.h" 9 #include "SkPerlinNoiseShader2.h"
10 #include "SkColorFilter.h" 10 #include "SkColorFilter.h"
11 #include "SkReadBuffer.h" 11 #include "SkReadBuffer.h"
12 #include "SkWriteBuffer.h" 12 #include "SkWriteBuffer.h"
13 #include "SkShader.h" 13 #include "SkShader.h"
14 #include "SkUnPreMultiply.h" 14 #include "SkUnPreMultiply.h"
15 #include "SkString.h" 15 #include "SkString.h"
16 16
17 #if SK_SUPPORT_GPU 17 #if SK_SUPPORT_GPU
18 #include "GrContext.h" 18 #include "GrContext.h"
19 #include "GrCoordTransform.h" 19 #include "GrCoordTransform.h"
20 #include "GrInvariantOutput.h" 20 #include "GrInvariantOutput.h"
21 #include "SkGr.h" 21 #include "SkGr.h"
22 #include "effects/GrConstColorProcessor.h" 22 #include "effects/GrConstColorProcessor.h"
23 #include "gl/GrGLFragmentProcessor.h" 23 #include "glsl/GrGLSLFragmentProcessor.h"
24 #include "glsl/GrGLSLFragmentShaderBuilder.h" 24 #include "glsl/GrGLSLFragmentShaderBuilder.h"
25 #include "glsl/GrGLSLProgramBuilder.h" 25 #include "glsl/GrGLSLProgramBuilder.h"
26 #include "glsl/GrGLSLProgramDataManager.h" 26 #include "glsl/GrGLSLProgramDataManager.h"
27 #endif 27 #endif
28 28
29 static const int kBlockSize = 256; 29 static const int kBlockSize = 256;
30 static const int kBlockMask = kBlockSize - 1; 30 static const int kBlockMask = kBlockSize - 1;
31 static const int kPerlinNoise = 4096; 31 static const int kPerlinNoise = 4096;
32 static const int kRandMaximum = SK_MaxS32; // 2**31 - 1 32 static const int kRandMaximum = SK_MaxS32; // 2**31 - 1
33 33
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after
613 result[i] = SkDitherRGB32To565(shade(point, stitchData), dither); 613 result[i] = SkDitherRGB32To565(shade(point, stitchData), dither);
614 DITHER_INC_X(x); 614 DITHER_INC_X(x);
615 point.fX += SK_Scalar1; 615 point.fX += SK_Scalar1;
616 } 616 }
617 } 617 }
618 618
619 ///////////////////////////////////////////////////////////////////// 619 /////////////////////////////////////////////////////////////////////
620 620
621 #if SK_SUPPORT_GPU 621 #if SK_SUPPORT_GPU
622 622
623 class GrGLPerlinNoise2 : public GrGLFragmentProcessor { 623 class GrGLPerlinNoise2 : public GrGLSLFragmentProcessor {
624 public: 624 public:
625 GrGLPerlinNoise2(const GrProcessor&); 625 GrGLPerlinNoise2(const GrProcessor&);
626 virtual ~GrGLPerlinNoise2() {} 626 virtual ~GrGLPerlinNoise2() {}
627 627
628 virtual void emitCode(EmitArgs&) override; 628 virtual void emitCode(EmitArgs&) override;
629 629
630 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder* b); 630 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder* b);
631 631
632 protected: 632 protected:
633 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ; 633 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ;
634 634
635 private: 635 private:
636 636
637 GrGLSLProgramDataManager::UniformHandle fStitchDataUni; 637 GrGLSLProgramDataManager::UniformHandle fStitchDataUni;
638 SkPerlinNoiseShader2::Type fType; 638 SkPerlinNoiseShader2::Type fType;
639 bool fStitchTiles; 639 bool fStitchTiles;
640 int fNumOctaves; 640 int fNumOctaves;
641 GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni; 641 GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni;
642 642
643 private: 643 private:
644 typedef GrGLFragmentProcessor INHERITED; 644 typedef GrGLSLFragmentProcessor INHERITED;
645 }; 645 };
646 646
647 ///////////////////////////////////////////////////////////////////// 647 /////////////////////////////////////////////////////////////////////
648 648
649 class GrPerlinNoise2Effect : public GrFragmentProcessor { 649 class GrPerlinNoise2Effect : public GrFragmentProcessor {
650 public: 650 public:
651 static GrFragmentProcessor* Create(SkPerlinNoiseShader2::Type type, 651 static GrFragmentProcessor* Create(SkPerlinNoiseShader2::Type type,
652 int numOctaves, bool stitchTiles, 652 int numOctaves, bool stitchTiles,
653 SkPerlinNoiseShader2::PaintingData* paint ingData, 653 SkPerlinNoiseShader2::PaintingData* paint ingData,
654 GrTexture* permutationsTexture, GrTexture * noiseTexture, 654 GrTexture* permutationsTexture, GrTexture * noiseTexture,
655 const SkMatrix& matrix) { 655 const SkMatrix& matrix) {
656 return new GrPerlinNoise2Effect(type, numOctaves, stitchTiles, paintingD ata, 656 return new GrPerlinNoise2Effect(type, numOctaves, stitchTiles, paintingD ata,
657 permutationsTexture, noiseTexture, matrix ); 657 permutationsTexture, noiseTexture, matrix );
658 } 658 }
659 659
660 virtual ~GrPerlinNoise2Effect() { delete fPaintingData; } 660 virtual ~GrPerlinNoise2Effect() { delete fPaintingData; }
661 661
662 const char* name() const override { return "PerlinNoise"; } 662 const char* name() const override { return "PerlinNoise"; }
663 663
664 const SkPerlinNoiseShader2::StitchData& stitchData() const { return fPaintin gData->fStitchDataInit; } 664 const SkPerlinNoiseShader2::StitchData& stitchData() const { return fPaintin gData->fStitchDataInit; }
665 665
666 SkPerlinNoiseShader2::Type type() const { return fType; } 666 SkPerlinNoiseShader2::Type type() const { return fType; }
667 bool stitchTiles() const { return fStitchTiles; } 667 bool stitchTiles() const { return fStitchTiles; }
668 const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency ; } 668 const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency ; }
669 int numOctaves() const { return fNumOctaves; } 669 int numOctaves() const { return fNumOctaves; }
670 const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); } 670 const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); }
671 671
672 private: 672 private:
673 GrGLFragmentProcessor* onCreateGLInstance() const override { 673 GrGLSLFragmentProcessor* onCreateGLInstance() const override {
674 return new GrGLPerlinNoise2(*this); 674 return new GrGLPerlinNoise2(*this);
675 } 675 }
676 676
677 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, 677 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps,
678 GrProcessorKeyBuilder* b) const override { 678 GrProcessorKeyBuilder* b) const override {
679 GrGLPerlinNoise2::GenKey(*this, caps, b); 679 GrGLPerlinNoise2::GenKey(*this, caps, b);
680 } 680 }
681 681
682 bool onIsEqual(const GrFragmentProcessor& sBase) const override { 682 bool onIsEqual(const GrFragmentProcessor& sBase) const override {
683 const GrPerlinNoise2Effect& s = sBase.cast<GrPerlinNoise2Effect>(); 683 const GrPerlinNoise2Effect& s = sBase.cast<GrPerlinNoise2Effect>();
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after
1043 1043
1044 if (turbulence.stitchTiles()) { 1044 if (turbulence.stitchTiles()) {
1045 const SkPerlinNoiseShader2::StitchData& stitchData = turbulence.stitchDa ta(); 1045 const SkPerlinNoiseShader2::StitchData& stitchData = turbulence.stitchDa ta();
1046 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), 1046 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth),
1047 SkIntToScalar(stitchData.fHeight)); 1047 SkIntToScalar(stitchData.fHeight));
1048 } 1048 }
1049 } 1049 }
1050 1050
1051 ///////////////////////////////////////////////////////////////////// 1051 /////////////////////////////////////////////////////////////////////
1052 1052
1053 class GrGLImprovedPerlinNoise : public GrGLFragmentProcessor { 1053 class GrGLImprovedPerlinNoise : public GrGLSLFragmentProcessor {
1054 public: 1054 public:
1055 GrGLImprovedPerlinNoise(const GrProcessor&); 1055 GrGLImprovedPerlinNoise(const GrProcessor&);
1056 virtual ~GrGLImprovedPerlinNoise() {} 1056 virtual ~GrGLImprovedPerlinNoise() {}
1057 1057
1058 virtual void emitCode(EmitArgs&) override; 1058 virtual void emitCode(EmitArgs&) override;
1059 1059
1060 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder* b); 1060 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor KeyBuilder* b);
1061 1061
1062 protected: 1062 protected:
1063 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ; 1063 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override ;
1064 1064
1065 private: 1065 private:
1066 1066
1067 SkScalar fZ; 1067 SkScalar fZ;
1068 GrGLSLProgramDataManager::UniformHandle fZUni; 1068 GrGLSLProgramDataManager::UniformHandle fZUni;
1069 GrGLSLProgramDataManager::UniformHandle fOctavesUni; 1069 GrGLSLProgramDataManager::UniformHandle fOctavesUni;
1070 GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni; 1070 GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni;
1071 1071
1072 private: 1072 private:
1073 typedef GrGLFragmentProcessor INHERITED; 1073 typedef GrGLSLFragmentProcessor INHERITED;
1074 }; 1074 };
1075 1075
1076 ///////////////////////////////////////////////////////////////////// 1076 /////////////////////////////////////////////////////////////////////
1077 1077
1078 class GrImprovedPerlinNoiseEffect : public GrFragmentProcessor { 1078 class GrImprovedPerlinNoiseEffect : public GrFragmentProcessor {
1079 public: 1079 public:
1080 static GrFragmentProcessor* Create(int octaves, SkScalar z, 1080 static GrFragmentProcessor* Create(int octaves, SkScalar z,
1081 SkPerlinNoiseShader2::PaintingData* paint ingData, 1081 SkPerlinNoiseShader2::PaintingData* paint ingData,
1082 GrTexture* permutationsTexture, GrTexture * gradientTexture, 1082 GrTexture* permutationsTexture, GrTexture * gradientTexture,
1083 const SkMatrix& matrix) { 1083 const SkMatrix& matrix) {
1084 return new GrImprovedPerlinNoiseEffect(octaves, z, paintingData, permuta tionsTexture, 1084 return new GrImprovedPerlinNoiseEffect(octaves, z, paintingData, permuta tionsTexture,
1085 gradientTexture, matrix); 1085 gradientTexture, matrix);
1086 } 1086 }
1087 1087
1088 virtual ~GrImprovedPerlinNoiseEffect() { delete fPaintingData; } 1088 virtual ~GrImprovedPerlinNoiseEffect() { delete fPaintingData; }
1089 1089
1090 const char* name() const override { return "ImprovedPerlinNoise"; } 1090 const char* name() const override { return "ImprovedPerlinNoise"; }
1091 1091
1092 const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency ; } 1092 const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency ; }
1093 SkScalar z() const { return fZ; } 1093 SkScalar z() const { return fZ; }
1094 int octaves() const { return fOctaves; } 1094 int octaves() const { return fOctaves; }
1095 const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); } 1095 const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); }
1096 1096
1097 private: 1097 private:
1098 GrGLFragmentProcessor* onCreateGLInstance() const override { 1098 GrGLSLFragmentProcessor* onCreateGLInstance() const override {
1099 return new GrGLImprovedPerlinNoise(*this); 1099 return new GrGLImprovedPerlinNoise(*this);
1100 } 1100 }
1101 1101
1102 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps, 1102 virtual void onGetGLProcessorKey(const GrGLSLCaps& caps,
1103 GrProcessorKeyBuilder* b) const override { 1103 GrProcessorKeyBuilder* b) const override {
1104 GrGLImprovedPerlinNoise::GenKey(*this, caps, b); 1104 GrGLImprovedPerlinNoise::GenKey(*this, caps, b);
1105 } 1105 }
1106 1106
1107 bool onIsEqual(const GrFragmentProcessor& sBase) const override { 1107 bool onIsEqual(const GrFragmentProcessor& sBase) const override {
1108 const GrImprovedPerlinNoiseEffect& s = sBase.cast<GrImprovedPerlinNoiseE ffect>(); 1108 const GrImprovedPerlinNoiseEffect& s = sBase.cast<GrImprovedPerlinNoiseE ffect>();
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after
1427 str->append(" seed: "); 1427 str->append(" seed: ");
1428 str->appendScalar(fSeed); 1428 str->appendScalar(fSeed);
1429 str->append(" stitch tiles: "); 1429 str->append(" stitch tiles: ");
1430 str->append(fStitchTiles ? "true " : "false "); 1430 str->append(fStitchTiles ? "true " : "false ");
1431 1431
1432 this->INHERITED::toString(str); 1432 this->INHERITED::toString(str);
1433 1433
1434 str->append(")"); 1434 str->append(")");
1435 } 1435 }
1436 #endif 1436 #endif
OLDNEW
« no previous file with comments | « no previous file | gm/dcshader.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698