| OLD | NEW |
| 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" |
| (...skipping 592 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 603 } | 603 } |
| 604 } | 604 } |
| 605 | 605 |
| 606 ///////////////////////////////////////////////////////////////////// | 606 ///////////////////////////////////////////////////////////////////// |
| 607 | 607 |
| 608 #if SK_SUPPORT_GPU | 608 #if SK_SUPPORT_GPU |
| 609 | 609 |
| 610 class GrGLPerlinNoise2 : public GrGLSLFragmentProcessor { | 610 class GrGLPerlinNoise2 : public GrGLSLFragmentProcessor { |
| 611 public: | 611 public: |
| 612 GrGLPerlinNoise2(const GrProcessor&); | 612 GrGLPerlinNoise2(const GrProcessor&); |
| 613 virtual ~GrGLPerlinNoise2() {} | |
| 614 | 613 |
| 615 virtual void emitCode(EmitArgs&) override; | 614 void emitCode(EmitArgs&) override; |
| 616 | 615 |
| 617 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder* b); | 616 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder* b); |
| 618 | 617 |
| 619 protected: | 618 protected: |
| 620 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 619 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
| 621 | 620 |
| 622 private: | 621 private: |
| 623 | 622 |
| 624 GrGLSLProgramDataManager::UniformHandle fStitchDataUni; | 623 GrGLSLProgramDataManager::UniformHandle fStitchDataUni; |
| 625 SkPerlinNoiseShader2::Type fType; | 624 SkPerlinNoiseShader2::Type fType; |
| (...skipping 407 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1033 const SkPerlinNoiseShader2::StitchData& stitchData = turbulence.stitchDa
ta(); | 1032 const SkPerlinNoiseShader2::StitchData& stitchData = turbulence.stitchDa
ta(); |
| 1034 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), | 1033 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), |
| 1035 SkIntToScalar(stitchData.fHeight)); | 1034 SkIntToScalar(stitchData.fHeight)); |
| 1036 } | 1035 } |
| 1037 } | 1036 } |
| 1038 | 1037 |
| 1039 ///////////////////////////////////////////////////////////////////// | 1038 ///////////////////////////////////////////////////////////////////// |
| 1040 | 1039 |
| 1041 class GrGLImprovedPerlinNoise : public GrGLSLFragmentProcessor { | 1040 class GrGLImprovedPerlinNoise : public GrGLSLFragmentProcessor { |
| 1042 public: | 1041 public: |
| 1043 GrGLImprovedPerlinNoise(const GrProcessor&); | 1042 void emitCode(EmitArgs&) override; |
| 1044 virtual ~GrGLImprovedPerlinNoise() {} | |
| 1045 | 1043 |
| 1046 virtual void emitCode(EmitArgs&) override; | 1044 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder*); |
| 1047 | |
| 1048 static inline void GenKey(const GrProcessor&, const GrGLSLCaps&, GrProcessor
KeyBuilder* b); | |
| 1049 | 1045 |
| 1050 protected: | 1046 protected: |
| 1051 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; | 1047 void onSetData(const GrGLSLProgramDataManager&, const GrProcessor&) override
; |
| 1052 | 1048 |
| 1053 private: | 1049 private: |
| 1054 | |
| 1055 SkScalar fZ; | |
| 1056 GrGLSLProgramDataManager::UniformHandle fZUni; | 1050 GrGLSLProgramDataManager::UniformHandle fZUni; |
| 1057 GrGLSLProgramDataManager::UniformHandle fOctavesUni; | 1051 GrGLSLProgramDataManager::UniformHandle fOctavesUni; |
| 1058 GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni; | 1052 GrGLSLProgramDataManager::UniformHandle fBaseFrequencyUni; |
| 1059 | 1053 |
| 1060 private: | |
| 1061 typedef GrGLSLFragmentProcessor INHERITED; | 1054 typedef GrGLSLFragmentProcessor INHERITED; |
| 1062 }; | 1055 }; |
| 1063 | 1056 |
| 1064 ///////////////////////////////////////////////////////////////////// | 1057 ///////////////////////////////////////////////////////////////////// |
| 1065 | 1058 |
| 1066 class GrImprovedPerlinNoiseEffect : public GrFragmentProcessor { | 1059 class GrImprovedPerlinNoiseEffect : public GrFragmentProcessor { |
| 1067 public: | 1060 public: |
| 1068 static GrFragmentProcessor* Create(int octaves, SkScalar z, | 1061 static GrFragmentProcessor* Create(int octaves, SkScalar z, |
| 1069 SkPerlinNoiseShader2::PaintingData* paint
ingData, | 1062 SkPerlinNoiseShader2::PaintingData* paint
ingData, |
| 1070 GrTexture* permutationsTexture, GrTexture
* gradientTexture, | 1063 GrTexture* permutationsTexture, GrTexture
* gradientTexture, |
| 1071 const SkMatrix& matrix) { | 1064 const SkMatrix& matrix) { |
| 1072 return new GrImprovedPerlinNoiseEffect(octaves, z, paintingData, permuta
tionsTexture, | 1065 return new GrImprovedPerlinNoiseEffect(octaves, z, paintingData, permuta
tionsTexture, |
| 1073 gradientTexture, matrix); | 1066 gradientTexture, matrix); |
| 1074 } | 1067 } |
| 1075 | 1068 |
| 1076 virtual ~GrImprovedPerlinNoiseEffect() { delete fPaintingData; } | 1069 virtual ~GrImprovedPerlinNoiseEffect() { delete fPaintingData; } |
| 1077 | 1070 |
| 1078 const char* name() const override { return "ImprovedPerlinNoise"; } | 1071 const char* name() const override { return "ImprovedPerlinNoise"; } |
| 1079 | 1072 |
| 1080 const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency
; } | 1073 const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency
; } |
| 1081 SkScalar z() const { return fZ; } | 1074 SkScalar z() const { return fZ; } |
| 1082 int octaves() const { return fOctaves; } | 1075 int octaves() const { return fOctaves; } |
| 1083 const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); } | 1076 const SkMatrix& matrix() const { return fCoordTransform.getMatrix(); } |
| 1084 | 1077 |
| 1085 private: | 1078 private: |
| 1086 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { | 1079 GrGLSLFragmentProcessor* onCreateGLSLInstance() const override { |
| 1087 return new GrGLImprovedPerlinNoise(*this); | 1080 return new GrGLImprovedPerlinNoise; |
| 1088 } | 1081 } |
| 1089 | 1082 |
| 1090 virtual void onGetGLSLProcessorKey(const GrGLSLCaps& caps, | 1083 void onGetGLSLProcessorKey(const GrGLSLCaps& caps, GrProcessorKeyBuilder* b)
const override { |
| 1091 GrProcessorKeyBuilder* b) const override
{ | |
| 1092 GrGLImprovedPerlinNoise::GenKey(*this, caps, b); | 1084 GrGLImprovedPerlinNoise::GenKey(*this, caps, b); |
| 1093 } | 1085 } |
| 1094 | 1086 |
| 1095 bool onIsEqual(const GrFragmentProcessor& sBase) const override { | 1087 bool onIsEqual(const GrFragmentProcessor& sBase) const override { |
| 1096 const GrImprovedPerlinNoiseEffect& s = sBase.cast<GrImprovedPerlinNoiseE
ffect>(); | 1088 const GrImprovedPerlinNoiseEffect& s = sBase.cast<GrImprovedPerlinNoiseE
ffect>(); |
| 1097 return fZ == fZ && | 1089 return fZ == fZ && |
| 1098 fPaintingData->fBaseFrequency == s.fPaintingData->fBaseFrequency; | 1090 fPaintingData->fBaseFrequency == s.fPaintingData->fBaseFrequency; |
| 1099 } | 1091 } |
| 1100 | 1092 |
| 1101 void onComputeInvariantOutput(GrInvariantOutput* inout) const override { | 1093 void onComputeInvariantOutput(GrInvariantOutput* inout) const override { |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1146 baseF
requencyY, | 1138 baseF
requencyY, |
| 1147 numOc
taves, | 1139 numOc
taves, |
| 1148 z)); | 1140 z)); |
| 1149 | 1141 |
| 1150 GrPaint grPaint; | 1142 GrPaint grPaint; |
| 1151 return shader->asFragmentProcessor(d->fContext, | 1143 return shader->asFragmentProcessor(d->fContext, |
| 1152 GrTest::TestMatrix(d->fRandom), nullptr, | 1144 GrTest::TestMatrix(d->fRandom), nullptr, |
| 1153 kNone_SkFilterQuality); | 1145 kNone_SkFilterQuality); |
| 1154 } | 1146 } |
| 1155 | 1147 |
| 1156 GrGLImprovedPerlinNoise::GrGLImprovedPerlinNoise(const GrProcessor& processor) | |
| 1157 : fZ(processor.cast<GrImprovedPerlinNoiseEffect>().z()) { | |
| 1158 } | |
| 1159 | |
| 1160 void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { | 1148 void GrGLImprovedPerlinNoise::emitCode(EmitArgs& args) { |
| 1161 GrGLSLFragmentBuilder* fsBuilder = args.fFragBuilder; | 1149 GrGLSLFragmentBuilder* fsBuilder = args.fFragBuilder; |
| 1162 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; | 1150 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
| 1163 SkString vCoords = fsBuilder->ensureFSCoords2D(args.fCoords, 0); | 1151 SkString vCoords = fsBuilder->ensureFSCoords2D(args.fCoords, 0); |
| 1164 | 1152 |
| 1165 fBaseFrequencyUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragme
nt_Visibility, | 1153 fBaseFrequencyUni = uniformHandler->addUniform(GrGLSLUniformHandler::kFragme
nt_Visibility, |
| 1166 kVec2f_GrSLType, kDefault_GrS
LPrecision, | 1154 kVec2f_GrSLType, kDefault_GrS
LPrecision, |
| 1167 "baseFrequency"); | 1155 "baseFrequency"); |
| 1168 const char* baseFrequencyUni = uniformHandler->getUniformCStr(fBaseFrequency
Uni); | 1156 const char* baseFrequencyUni = uniformHandler->getUniformCStr(fBaseFrequency
Uni); |
| 1169 | 1157 |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1416 str->append(" seed: "); | 1404 str->append(" seed: "); |
| 1417 str->appendScalar(fSeed); | 1405 str->appendScalar(fSeed); |
| 1418 str->append(" stitch tiles: "); | 1406 str->append(" stitch tiles: "); |
| 1419 str->append(fStitchTiles ? "true " : "false "); | 1407 str->append(fStitchTiles ? "true " : "false "); |
| 1420 | 1408 |
| 1421 this->INHERITED::toString(str); | 1409 this->INHERITED::toString(str); |
| 1422 | 1410 |
| 1423 str->append(")"); | 1411 str->append(")"); |
| 1424 } | 1412 } |
| 1425 #endif | 1413 #endif |
| OLD | NEW |