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 "SkPerlinNoiseShader.h" | 8 #include "SkPerlinNoiseShader.h" |
9 #include "SkColorFilter.h" | 9 #include "SkColorFilter.h" |
10 #include "SkReadBuffer.h" | 10 #include "SkReadBuffer.h" |
(...skipping 574 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
585 0.99f); | 585 0.99f); |
586 SkScalar baseFrequencyY = d->fRandom->nextRangeScalar(0.01f, | 586 SkScalar baseFrequencyY = d->fRandom->nextRangeScalar(0.01f, |
587 0.99f); | 587 0.99f); |
588 | 588 |
589 sk_sp<SkShader> shader(d->fRandom->nextBool() ? | 589 sk_sp<SkShader> shader(d->fRandom->nextBool() ? |
590 SkPerlinNoiseShader::MakeFractalNoise(baseFrequencyX, baseFrequencyY, nu
mOctaves, seed, | 590 SkPerlinNoiseShader::MakeFractalNoise(baseFrequencyX, baseFrequencyY, nu
mOctaves, seed, |
591 stitchTiles ? &tileSize : nullptr)
: | 591 stitchTiles ? &tileSize : nullptr)
: |
592 SkPerlinNoiseShader::MakeTurbulence(baseFrequencyX, baseFrequencyY, numO
ctaves, seed, | 592 SkPerlinNoiseShader::MakeTurbulence(baseFrequencyX, baseFrequencyY, numO
ctaves, seed, |
593 stitchTiles ? &tileSize : nullptr)); | 593 stitchTiles ? &tileSize : nullptr)); |
594 | 594 |
595 return shader->asFragmentProcessor(d->fContext, | 595 SkMatrix viewMatrix = GrTest::TestMatrix(d->fRandom); |
596 GrTest::TestMatrix(d->fRandom), nullptr, | 596 return shader->asFragmentProcessor(SkShader::AsFPArgs(d->fContext, &viewMatr
ix, nullptr, |
597 kNone_SkFilterQuality, SkSourceGammaTreat
ment::kRespect); | 597 kNone_SkFilterQuality, |
| 598 SkSourceGammaTreatment
::kRespect)); |
598 } | 599 } |
599 | 600 |
600 void GrGLPerlinNoise::emitCode(EmitArgs& args) { | 601 void GrGLPerlinNoise::emitCode(EmitArgs& args) { |
601 const GrPerlinNoiseEffect& pne = args.fFp.cast<GrPerlinNoiseEffect>(); | 602 const GrPerlinNoiseEffect& pne = args.fFp.cast<GrPerlinNoiseEffect>(); |
602 | 603 |
603 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; | 604 GrGLSLFPFragmentBuilder* fragBuilder = args.fFragBuilder; |
604 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; | 605 GrGLSLUniformHandler* uniformHandler = args.fUniformHandler; |
605 SkString vCoords = fragBuilder->ensureFSCoords2D(args.fCoords, 0); | 606 SkString vCoords = fragBuilder->ensureFSCoords2D(args.fCoords, 0); |
606 | 607 |
607 fBaseFrequencyUni = uniformHandler->addUniform(kFragment_GrShaderFlag, | 608 fBaseFrequencyUni = uniformHandler->addUniform(kFragment_GrShaderFlag, |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
886 pdman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY); | 887 pdman.set2f(fBaseFrequencyUni, baseFrequency.fX, baseFrequency.fY); |
887 | 888 |
888 if (turbulence.stitchTiles()) { | 889 if (turbulence.stitchTiles()) { |
889 const SkPerlinNoiseShader::StitchData& stitchData = turbulence.stitchDat
a(); | 890 const SkPerlinNoiseShader::StitchData& stitchData = turbulence.stitchDat
a(); |
890 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), | 891 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), |
891 SkIntToScalar(stitchData.fHeight)); | 892 SkIntToScalar(stitchData.fHeight)); |
892 } | 893 } |
893 } | 894 } |
894 | 895 |
895 ///////////////////////////////////////////////////////////////////// | 896 ///////////////////////////////////////////////////////////////////// |
896 sk_sp<GrFragmentProcessor> SkPerlinNoiseShader::asFragmentProcessor( | 897 sk_sp<GrFragmentProcessor> SkPerlinNoiseShader::asFragmentProcessor(const AsFPAr
gs& args) const { |
897 GrContext* context, | 898 SkASSERT(args.fContext); |
898 const SkMatrix& viewM, | |
899 const SkMatrix* externalLoc
alMatrix, | |
900 SkFilterQuality, | |
901 SkSourceGammaTreatment gamm
aTreatment) const { | |
902 SkASSERT(context); | |
903 | 899 |
904 SkMatrix localMatrix = this->getLocalMatrix(); | 900 SkMatrix localMatrix = this->getLocalMatrix(); |
905 if (externalLocalMatrix) { | 901 if (args.fLocalMatrix) { |
906 localMatrix.preConcat(*externalLocalMatrix); | 902 localMatrix.preConcat(*args.fLocalMatrix); |
907 } | 903 } |
908 | 904 |
909 SkMatrix matrix = viewM; | 905 SkMatrix matrix = *args.fViewMatrix; |
910 matrix.preConcat(localMatrix); | 906 matrix.preConcat(localMatrix); |
911 | 907 |
912 if (0 == fNumOctaves) { | 908 if (0 == fNumOctaves) { |
913 if (kFractalNoise_Type == fType) { | 909 if (kFractalNoise_Type == fType) { |
914 // Extract the incoming alpha and emit rgba = (a/4, a/4, a/4, a/2) | 910 // Extract the incoming alpha and emit rgba = (a/4, a/4, a/4, a/2) |
915 sk_sp<GrFragmentProcessor> inner( | 911 sk_sp<GrFragmentProcessor> inner( |
916 GrConstColorProcessor::Make(0x80404040, | 912 GrConstColorProcessor::Make(0x80404040, |
917 GrConstColorProcessor::kModulateRGBA
_InputMode)); | 913 GrConstColorProcessor::kModulateRGBA
_InputMode)); |
918 return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); | 914 return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); |
919 } | 915 } |
920 // Emit zero. | 916 // Emit zero. |
921 return GrConstColorProcessor::Make(0x0, GrConstColorProcessor::kIgnore_I
nputMode); | 917 return GrConstColorProcessor::Make(0x0, GrConstColorProcessor::kIgnore_I
nputMode); |
922 } | 918 } |
923 | 919 |
924 // Either we don't stitch tiles, either we have a valid tile size | 920 // Either we don't stitch tiles, either we have a valid tile size |
925 SkASSERT(!fStitchTiles || !fTileSize.isEmpty()); | 921 SkASSERT(!fStitchTiles || !fTileSize.isEmpty()); |
926 | 922 |
927 SkPerlinNoiseShader::PaintingData* paintingData = | 923 SkPerlinNoiseShader::PaintingData* paintingData = |
928 new PaintingData(fTileSize, fSeed, fBaseFrequencyX, fBaseFrequencyY,
matrix); | 924 new PaintingData(fTileSize, fSeed, fBaseFrequencyX, fBaseFrequencyY,
matrix); |
929 SkAutoTUnref<GrTexture> permutationsTexture( | 925 SkAutoTUnref<GrTexture> permutationsTexture( |
930 GrRefCachedBitmapTexture(context, paintingData->getPermutationsBitmap(), | 926 GrRefCachedBitmapTexture(args.fContext, paintingData->getPermutationsBit
map(), |
931 GrTextureParams::ClampNoFilter(), gammaTreatmen
t)); | 927 GrTextureParams::ClampNoFilter(), args.fGammaTr
eatment)); |
932 SkAutoTUnref<GrTexture> noiseTexture( | 928 SkAutoTUnref<GrTexture> noiseTexture( |
933 GrRefCachedBitmapTexture(context, paintingData->getNoiseBitmap(), | 929 GrRefCachedBitmapTexture(args.fContext, paintingData->getNoiseBitmap(), |
934 GrTextureParams::ClampNoFilter(), gammaTreatmen
t)); | 930 GrTextureParams::ClampNoFilter(), args.fGammaTr
eatment)); |
935 | 931 |
936 SkMatrix m = viewM; | 932 SkMatrix m = *args.fViewMatrix; |
937 m.setTranslateX(-localMatrix.getTranslateX() + SK_Scalar1); | 933 m.setTranslateX(-localMatrix.getTranslateX() + SK_Scalar1); |
938 m.setTranslateY(-localMatrix.getTranslateY() + SK_Scalar1); | 934 m.setTranslateY(-localMatrix.getTranslateY() + SK_Scalar1); |
939 if ((permutationsTexture) && (noiseTexture)) { | 935 if ((permutationsTexture) && (noiseTexture)) { |
940 sk_sp<GrFragmentProcessor> inner( | 936 sk_sp<GrFragmentProcessor> inner( |
941 GrPerlinNoiseEffect::Make(fType, | 937 GrPerlinNoiseEffect::Make(fType, |
942 fNumOctaves, | 938 fNumOctaves, |
943 fStitchTiles, | 939 fStitchTiles, |
944 paintingData, | 940 paintingData, |
945 permutationsTexture, noiseTexture, | 941 permutationsTexture, noiseTexture, |
946 m)); | 942 m)); |
(...skipping 30 matching lines...) Expand all Loading... |
977 str->append(" seed: "); | 973 str->append(" seed: "); |
978 str->appendScalar(fSeed); | 974 str->appendScalar(fSeed); |
979 str->append(" stitch tiles: "); | 975 str->append(" stitch tiles: "); |
980 str->append(fStitchTiles ? "true " : "false "); | 976 str->append(fStitchTiles ? "true " : "false "); |
981 | 977 |
982 this->INHERITED::toString(str); | 978 this->INHERITED::toString(str); |
983 | 979 |
984 str->append(")"); | 980 str->append(")"); |
985 } | 981 } |
986 #endif | 982 #endif |
OLD | NEW |