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 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
509 }; | 509 }; |
510 | 510 |
511 ///////////////////////////////////////////////////////////////////// | 511 ///////////////////////////////////////////////////////////////////// |
512 | 512 |
513 class GrPerlinNoiseEffect : public GrFragmentProcessor { | 513 class GrPerlinNoiseEffect : public GrFragmentProcessor { |
514 public: | 514 public: |
515 static GrFragmentProcessor* Create(SkPerlinNoiseShader::Type type, | 515 static GrFragmentProcessor* Create(SkPerlinNoiseShader::Type type, |
516 int numOctaves, bool stitchTiles, | 516 int numOctaves, bool stitchTiles, |
517 SkPerlinNoiseShader::PaintingData* painti
ngData, | 517 SkPerlinNoiseShader::PaintingData* painti
ngData, |
518 GrTexture* permutationsTexture, GrTexture
* noiseTexture, | 518 GrTexture* permutationsTexture, GrTexture
* noiseTexture, |
519 const SkMatrix& matrix) { | 519 const SkMatrix& matrix, GrRenderTarget* d
st) { |
520 return new GrPerlinNoiseEffect(type, numOctaves, stitchTiles, paintingDa
ta, | 520 return new GrPerlinNoiseEffect(type, numOctaves, stitchTiles, paintingDa
ta, |
521 permutationsTexture, noiseTexture, matrix
); | 521 permutationsTexture, noiseTexture, matrix
, dst); |
522 } | 522 } |
523 | 523 |
524 virtual ~GrPerlinNoiseEffect() { delete fPaintingData; } | 524 virtual ~GrPerlinNoiseEffect() { delete fPaintingData; } |
525 | 525 |
526 const char* name() const override { return "PerlinNoise"; } | 526 const char* name() const override { return "PerlinNoise"; } |
527 | 527 |
528 const SkPerlinNoiseShader::StitchData& stitchData() const { return fPainting
Data->fStitchDataInit; } | 528 const SkPerlinNoiseShader::StitchData& stitchData() const { return fPainting
Data->fStitchDataInit; } |
529 | 529 |
530 SkPerlinNoiseShader::Type type() const { return fType; } | 530 SkPerlinNoiseShader::Type type() const { return fType; } |
531 bool stitchTiles() const { return fStitchTiles; } | 531 bool stitchTiles() const { return fStitchTiles; } |
(...skipping 21 matching lines...) Expand all Loading... |
553 } | 553 } |
554 | 554 |
555 void onComputeInvariantOutput(GrInvariantOutput* inout) const override { | 555 void onComputeInvariantOutput(GrInvariantOutput* inout) const override { |
556 inout->setToUnknown(GrInvariantOutput::kWillNot_ReadInput); | 556 inout->setToUnknown(GrInvariantOutput::kWillNot_ReadInput); |
557 } | 557 } |
558 | 558 |
559 GrPerlinNoiseEffect(SkPerlinNoiseShader::Type type, | 559 GrPerlinNoiseEffect(SkPerlinNoiseShader::Type type, |
560 int numOctaves, bool stitchTiles, | 560 int numOctaves, bool stitchTiles, |
561 SkPerlinNoiseShader::PaintingData* paintingData, | 561 SkPerlinNoiseShader::PaintingData* paintingData, |
562 GrTexture* permutationsTexture, GrTexture* noiseTexture, | 562 GrTexture* permutationsTexture, GrTexture* noiseTexture, |
563 const SkMatrix& matrix) | 563 const SkMatrix& matrix, GrRenderTarget* dst) |
564 : fType(type) | 564 : fType(type) |
565 , fNumOctaves(numOctaves) | 565 , fNumOctaves(numOctaves) |
566 , fStitchTiles(stitchTiles) | 566 , fStitchTiles(stitchTiles) |
567 , fPermutationsAccess(permutationsTexture) | 567 , fPermutationsAccess(permutationsTexture, GrTextureParams::kNone_FilterMo
de,SkShader::kClamp_TileMode, dst) |
568 , fNoiseAccess(noiseTexture) | 568 , fNoiseAccess(noiseTexture, GrTextureParams::kNone_FilterMode,SkShader::k
Clamp_TileMode, dst) |
569 , fPaintingData(paintingData) { | 569 , fPaintingData(paintingData) { |
570 this->initClassID<GrPerlinNoiseEffect>(); | 570 this->initClassID<GrPerlinNoiseEffect>(); |
571 this->addTextureAccess(&fPermutationsAccess); | 571 this->addTextureAccess(&fPermutationsAccess); |
572 this->addTextureAccess(&fNoiseAccess); | 572 this->addTextureAccess(&fNoiseAccess); |
573 fCoordTransform.reset(kLocal_GrCoordSet, matrix); | 573 fCoordTransform.reset(kLocal_GrCoordSet, matrix); |
574 this->addCoordTransform(&fCoordTransform); | 574 this->addCoordTransform(&fCoordTransform); |
575 } | 575 } |
576 | 576 |
577 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; | 577 GR_DECLARE_FRAGMENT_PROCESSOR_TEST; |
578 | 578 |
(...skipping 25 matching lines...) Expand all Loading... |
604 | 604 |
605 SkAutoTUnref<SkShader> shader(d->fRandom->nextBool() ? | 605 SkAutoTUnref<SkShader> shader(d->fRandom->nextBool() ? |
606 SkPerlinNoiseShader::CreateFractalNoise(baseFrequencyX, baseFrequencyY,
numOctaves, seed, | 606 SkPerlinNoiseShader::CreateFractalNoise(baseFrequencyX, baseFrequencyY,
numOctaves, seed, |
607 stitchTiles ? &tileSize : nullpt
r) : | 607 stitchTiles ? &tileSize : nullpt
r) : |
608 SkPerlinNoiseShader::CreateTurbulence(baseFrequencyX, baseFrequencyY, nu
mOctaves, seed, | 608 SkPerlinNoiseShader::CreateTurbulence(baseFrequencyX, baseFrequencyY, nu
mOctaves, seed, |
609 stitchTiles ? &tileSize : nullptr))
; | 609 stitchTiles ? &tileSize : nullptr))
; |
610 | 610 |
611 GrPaint grPaint; | 611 GrPaint grPaint; |
612 return shader->asFragmentProcessor(d->fContext, | 612 return shader->asFragmentProcessor(d->fContext, |
613 GrTest::TestMatrix(d->fRandom), nullptr, | 613 GrTest::TestMatrix(d->fRandom), nullptr, |
614 kNone_SkFilterQuality); | 614 kNone_SkFilterQuality, |
| 615 NULL); |
615 } | 616 } |
616 | 617 |
617 GrGLPerlinNoise::GrGLPerlinNoise(const GrProcessor& processor) | 618 GrGLPerlinNoise::GrGLPerlinNoise(const GrProcessor& processor) |
618 : fType(processor.cast<GrPerlinNoiseEffect>().type()) | 619 : fType(processor.cast<GrPerlinNoiseEffect>().type()) |
619 , fStitchTiles(processor.cast<GrPerlinNoiseEffect>().stitchTiles()) | 620 , fStitchTiles(processor.cast<GrPerlinNoiseEffect>().stitchTiles()) |
620 , fNumOctaves(processor.cast<GrPerlinNoiseEffect>().numOctaves()) { | 621 , fNumOctaves(processor.cast<GrPerlinNoiseEffect>().numOctaves()) { |
621 } | 622 } |
622 | 623 |
623 void GrGLPerlinNoise::emitCode(EmitArgs& args) { | 624 void GrGLPerlinNoise::emitCode(EmitArgs& args) { |
624 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder()
; | 625 GrGLSLFragmentBuilder* fsBuilder = args.fBuilder->getFragmentShaderBuilder()
; |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
910 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), | 911 pdman.set2f(fStitchDataUni, SkIntToScalar(stitchData.fWidth), |
911 SkIntToScalar(stitchData.fHeight)); | 912 SkIntToScalar(stitchData.fHeight)); |
912 } | 913 } |
913 } | 914 } |
914 | 915 |
915 ///////////////////////////////////////////////////////////////////// | 916 ///////////////////////////////////////////////////////////////////// |
916 const GrFragmentProcessor* SkPerlinNoiseShader::asFragmentProcessor( | 917 const GrFragmentProcessor* SkPerlinNoiseShader::asFragmentProcessor( |
917 GrContext* context, | 918 GrContext* context, |
918 const SkMatrix& viewM, | 919 const SkMatrix& viewM, |
919 const SkMatrix* externalLoca
lMatrix, | 920 const SkMatrix* externalLoca
lMatrix, |
920 SkFilterQuality) const { | 921 SkFilterQuality, |
| 922 GrRenderTarget* dst) const { |
921 SkASSERT(context); | 923 SkASSERT(context); |
922 | 924 |
923 SkMatrix localMatrix = this->getLocalMatrix(); | 925 SkMatrix localMatrix = this->getLocalMatrix(); |
924 if (externalLocalMatrix) { | 926 if (externalLocalMatrix) { |
925 localMatrix.preConcat(*externalLocalMatrix); | 927 localMatrix.preConcat(*externalLocalMatrix); |
926 } | 928 } |
927 | 929 |
928 SkMatrix matrix = viewM; | 930 SkMatrix matrix = viewM; |
929 matrix.preConcat(localMatrix); | 931 matrix.preConcat(localMatrix); |
930 | 932 |
(...skipping 24 matching lines...) Expand all Loading... |
955 SkMatrix m = viewM; | 957 SkMatrix m = viewM; |
956 m.setTranslateX(-localMatrix.getTranslateX() + SK_Scalar1); | 958 m.setTranslateX(-localMatrix.getTranslateX() + SK_Scalar1); |
957 m.setTranslateY(-localMatrix.getTranslateY() + SK_Scalar1); | 959 m.setTranslateY(-localMatrix.getTranslateY() + SK_Scalar1); |
958 if ((permutationsTexture) && (noiseTexture)) { | 960 if ((permutationsTexture) && (noiseTexture)) { |
959 SkAutoTUnref<GrFragmentProcessor> inner( | 961 SkAutoTUnref<GrFragmentProcessor> inner( |
960 GrPerlinNoiseEffect::Create(fType, | 962 GrPerlinNoiseEffect::Create(fType, |
961 fNumOctaves, | 963 fNumOctaves, |
962 fStitchTiles, | 964 fStitchTiles, |
963 paintingData, | 965 paintingData, |
964 permutationsTexture, noiseTexture, | 966 permutationsTexture, noiseTexture, |
965 m)); | 967 m, dst)); |
966 return GrFragmentProcessor::MulOutputByInputAlpha(inner); | 968 return GrFragmentProcessor::MulOutputByInputAlpha(inner); |
967 } | 969 } |
968 delete paintingData; | 970 delete paintingData; |
969 return nullptr; | 971 return nullptr; |
970 } | 972 } |
971 | 973 |
972 #endif | 974 #endif |
973 | 975 |
974 #ifndef SK_IGNORE_TO_STRING | 976 #ifndef SK_IGNORE_TO_STRING |
975 void SkPerlinNoiseShader::toString(SkString* str) const { | 977 void SkPerlinNoiseShader::toString(SkString* str) const { |
(...skipping 20 matching lines...) Expand all Loading... |
996 str->append(" seed: "); | 998 str->append(" seed: "); |
997 str->appendScalar(fSeed); | 999 str->appendScalar(fSeed); |
998 str->append(" stitch tiles: "); | 1000 str->append(" stitch tiles: "); |
999 str->append(fStitchTiles ? "true " : "false "); | 1001 str->append(fStitchTiles ? "true " : "false "); |
1000 | 1002 |
1001 this->INHERITED::toString(str); | 1003 this->INHERITED::toString(str); |
1002 | 1004 |
1003 str->append(")"); | 1005 str->append(")"); |
1004 } | 1006 } |
1005 #endif | 1007 #endif |
OLD | NEW |