| 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 "SkPerlinNoiseShader.h" | 9 #include "SkPerlinNoiseShader.h" |
| 10 #include "SkColorFilter.h" | 10 #include "SkColorFilter.h" |
| (...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 492 #include "GrTBackendEffectFactory.h" | 492 #include "GrTBackendEffectFactory.h" |
| 493 | 493 |
| 494 class GrGLPerlinNoise : public GrGLEffect { | 494 class GrGLPerlinNoise : public GrGLEffect { |
| 495 public: | 495 public: |
| 496 GrGLPerlinNoise(const GrBackendEffectFactory& factory, | 496 GrGLPerlinNoise(const GrBackendEffectFactory& factory, |
| 497 const GrDrawEffect& drawEffect); | 497 const GrDrawEffect& drawEffect); |
| 498 virtual ~GrGLPerlinNoise() {} | 498 virtual ~GrGLPerlinNoise() {} |
| 499 | 499 |
| 500 virtual void emitCode(GrGLShaderBuilder*, | 500 virtual void emitCode(GrGLShaderBuilder*, |
| 501 const GrDrawEffect&, | 501 const GrDrawEffect&, |
| 502 EffectKey, | 502 const GrEffectKey&, |
| 503 const char* outputColor, | 503 const char* outputColor, |
| 504 const char* inputColor, | 504 const char* inputColor, |
| 505 const TransformedCoordsArray&, | 505 const TransformedCoordsArray&, |
| 506 const TextureSamplerArray&) SK_OVERRIDE; | 506 const TextureSamplerArray&) SK_OVERRIDE; |
| 507 | 507 |
| 508 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; | 508 virtual void setData(const GrGLUniformManager&, const GrDrawEffect&) SK_OVER
RIDE; |
| 509 | 509 |
| 510 static inline EffectKey GenKey(const GrDrawEffect&, const GrGLCaps&); | 510 static inline void GenKey(const GrDrawEffect&, const GrGLCaps&, GrEffectKeyB
uilder* b); |
| 511 | 511 |
| 512 private: | 512 private: |
| 513 | 513 |
| 514 GrGLUniformManager::UniformHandle fStitchDataUni; | 514 GrGLUniformManager::UniformHandle fStitchDataUni; |
| 515 SkPerlinNoiseShader::Type fType; | 515 SkPerlinNoiseShader::Type fType; |
| 516 bool fStitchTiles; | 516 bool fStitchTiles; |
| 517 int fNumOctaves; | 517 int fNumOctaves; |
| 518 GrGLUniformManager::UniformHandle fBaseFrequencyUni; | 518 GrGLUniformManager::UniformHandle fBaseFrequencyUni; |
| 519 GrGLUniformManager::UniformHandle fAlphaUni; | 519 GrGLUniformManager::UniformHandle fAlphaUni; |
| 520 | 520 |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 640 | 640 |
| 641 GrGLPerlinNoise::GrGLPerlinNoise(const GrBackendEffectFactory& factory, const Gr
DrawEffect& drawEffect) | 641 GrGLPerlinNoise::GrGLPerlinNoise(const GrBackendEffectFactory& factory, const Gr
DrawEffect& drawEffect) |
| 642 : INHERITED (factory) | 642 : INHERITED (factory) |
| 643 , fType(drawEffect.castEffect<GrPerlinNoiseEffect>().type()) | 643 , fType(drawEffect.castEffect<GrPerlinNoiseEffect>().type()) |
| 644 , fStitchTiles(drawEffect.castEffect<GrPerlinNoiseEffect>().stitchTiles()) | 644 , fStitchTiles(drawEffect.castEffect<GrPerlinNoiseEffect>().stitchTiles()) |
| 645 , fNumOctaves(drawEffect.castEffect<GrPerlinNoiseEffect>().numOctaves()) { | 645 , fNumOctaves(drawEffect.castEffect<GrPerlinNoiseEffect>().numOctaves()) { |
| 646 } | 646 } |
| 647 | 647 |
| 648 void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder, | 648 void GrGLPerlinNoise::emitCode(GrGLShaderBuilder* builder, |
| 649 const GrDrawEffect&, | 649 const GrDrawEffect&, |
| 650 EffectKey key, | 650 const GrEffectKey& key, |
| 651 const char* outputColor, | 651 const char* outputColor, |
| 652 const char* inputColor, | 652 const char* inputColor, |
| 653 const TransformedCoordsArray& coords, | 653 const TransformedCoordsArray& coords, |
| 654 const TextureSamplerArray& samplers) { | 654 const TextureSamplerArray& samplers) { |
| 655 sk_ignore_unused_variable(inputColor); | 655 sk_ignore_unused_variable(inputColor); |
| 656 | 656 |
| 657 SkString vCoords = builder->ensureFSCoords2D(coords, 0); | 657 SkString vCoords = builder->ensureFSCoords2D(coords, 0); |
| 658 | 658 |
| 659 fBaseFrequencyUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibil
ity, | 659 fBaseFrequencyUni = builder->addUniform(GrGLShaderBuilder::kFragment_Visibil
ity, |
| 660 kVec2f_GrSLType, "baseFrequency"); | 660 kVec2f_GrSLType, "baseFrequency"); |
| (...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 893 builder->fsCodeAppendf("\n\t\t%s.a *= %s;", outputColor, alphaUni); | 893 builder->fsCodeAppendf("\n\t\t%s.a *= %s;", outputColor, alphaUni); |
| 894 | 894 |
| 895 // Clamp values | 895 // Clamp values |
| 896 builder->fsCodeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", outputColor, outpu
tColor); | 896 builder->fsCodeAppendf("\n\t\t%s = clamp(%s, 0.0, 1.0);", outputColor, outpu
tColor); |
| 897 | 897 |
| 898 // Pre-multiply the result | 898 // Pre-multiply the result |
| 899 builder->fsCodeAppendf("\n\t\t%s = vec4(%s.rgb * %s.aaa, %s.a);\n", | 899 builder->fsCodeAppendf("\n\t\t%s = vec4(%s.rgb * %s.aaa, %s.a);\n", |
| 900 outputColor, outputColor, outputColor, outputColor); | 900 outputColor, outputColor, outputColor, outputColor); |
| 901 } | 901 } |
| 902 | 902 |
| 903 GrGLEffect::EffectKey GrGLPerlinNoise::GenKey(const GrDrawEffect& drawEffect, co
nst GrGLCaps&) { | 903 void GrGLPerlinNoise::GenKey(const GrDrawEffect& drawEffect, const GrGLCaps&, Gr
EffectKeyBuilder* b) { |
| 904 const GrPerlinNoiseEffect& turbulence = drawEffect.castEffect<GrPerlinNoiseE
ffect>(); | 904 const GrPerlinNoiseEffect& turbulence = drawEffect.castEffect<GrPerlinNoiseE
ffect>(); |
| 905 | 905 |
| 906 EffectKey key = turbulence.numOctaves(); | 906 uint32_t key = turbulence.numOctaves(); |
| 907 | 907 |
| 908 key = key << 3; // Make room for next 3 bits | 908 key = key << 3; // Make room for next 3 bits |
| 909 | 909 |
| 910 switch (turbulence.type()) { | 910 switch (turbulence.type()) { |
| 911 case SkPerlinNoiseShader::kFractalNoise_Type: | 911 case SkPerlinNoiseShader::kFractalNoise_Type: |
| 912 key |= 0x1; | 912 key |= 0x1; |
| 913 break; | 913 break; |
| 914 case SkPerlinNoiseShader::kTurbulence_Type: | 914 case SkPerlinNoiseShader::kTurbulence_Type: |
| 915 key |= 0x2; | 915 key |= 0x2; |
| 916 break; | 916 break; |
| 917 default: | 917 default: |
| 918 // leave key at 0 | 918 // leave key at 0 |
| 919 break; | 919 break; |
| 920 } | 920 } |
| 921 | 921 |
| 922 if (turbulence.stitchTiles()) { | 922 if (turbulence.stitchTiles()) { |
| 923 key |= 0x4; // Flip the 3rd bit if tile stitching is on | 923 key |= 0x4; // Flip the 3rd bit if tile stitching is on |
| 924 } | 924 } |
| 925 | 925 |
| 926 return key; | 926 b->add32(key); |
| 927 } | 927 } |
| 928 | 928 |
| 929 void GrGLPerlinNoise::setData(const GrGLUniformManager& uman, const GrDrawEffect
& drawEffect) { | 929 void GrGLPerlinNoise::setData(const GrGLUniformManager& uman, const GrDrawEffect
& drawEffect) { |
| 930 INHERITED::setData(uman, drawEffect); | 930 INHERITED::setData(uman, drawEffect); |
| 931 | 931 |
| 932 const GrPerlinNoiseEffect& turbulence = drawEffect.castEffect<GrPerlinNoiseE
ffect>(); | 932 const GrPerlinNoiseEffect& turbulence = drawEffect.castEffect<GrPerlinNoiseE
ffect>(); |
| 933 | 933 |
| 934 const SkVector& baseFrequency = turbulence.baseFrequency(); | 934 const SkVector& baseFrequency = turbulence.baseFrequency(); |
| 935 uman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY); | 935 uman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY); |
| 936 uman.set1f(fAlphaUni, SkScalarDiv(SkIntToScalar(turbulence.alpha()), SkIntTo
Scalar(255))); | 936 uman.set1f(fAlphaUni, SkScalarDiv(SkIntToScalar(turbulence.alpha()), SkIntTo
Scalar(255))); |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1043 str->append(" seed: "); | 1043 str->append(" seed: "); |
| 1044 str->appendScalar(fSeed); | 1044 str->appendScalar(fSeed); |
| 1045 str->append(" stitch tiles: "); | 1045 str->append(" stitch tiles: "); |
| 1046 str->append(fStitchTiles ? "true " : "false "); | 1046 str->append(fStitchTiles ? "true " : "false "); |
| 1047 | 1047 |
| 1048 this->INHERITED::toString(str); | 1048 this->INHERITED::toString(str); |
| 1049 | 1049 |
| 1050 str->append(")"); | 1050 str->append(")"); |
| 1051 } | 1051 } |
| 1052 #endif | 1052 #endif |
| OLD | NEW |