diff options
author | Brian Salomon <bsalomon@google.com> | 2017-07-26 14:58:11 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-07-26 19:20:04 +0000 |
commit | 4331e464d3d778a1357372234ff767e881e7a40d (patch) | |
tree | 92f0b054f09753e8eae036c8bb9170d59298c054 /src/shaders/SkPerlinNoiseShader.cpp | |
parent | fb7c83a946ef3977d4860e1647f3f2dc78d2cb89 (diff) |
Implement GrFragmentProcessor::clone() for lighting and perlin noise classes
Change-Id: I4c6d426f170711a06d833257422092bb4b9de20c
Reviewed-on: https://skia-review.googlesource.com/26945
Reviewed-by: Ethan Nicholas <ethannicholas@google.com>
Commit-Queue: Brian Salomon <bsalomon@google.com>
Diffstat (limited to 'src/shaders/SkPerlinNoiseShader.cpp')
-rw-r--r-- | src/shaders/SkPerlinNoiseShader.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/shaders/SkPerlinNoiseShader.cpp b/src/shaders/SkPerlinNoiseShader.cpp index d5b83930b5..d8c6047ca5 100644 --- a/src/shaders/SkPerlinNoiseShader.cpp +++ b/src/shaders/SkPerlinNoiseShader.cpp @@ -136,6 +136,22 @@ public: #endif } + #if SK_SUPPORT_GPU + PaintingData(const PaintingData& that) + : fSeed(that.fSeed) + , fTileSize(that.fTileSize) + , fBaseFrequency(that.fBaseFrequency) + , fStitchDataInit(that.fStitchDataInit) + , fPermutationsBitmap(that.fPermutationsBitmap) + , fNoiseBitmap(that.fNoiseBitmap) + , fImprovedPermutationsBitmap(that.fImprovedPermutationsBitmap) + , fGradientBitmap(that.fGradientBitmap) { + memcpy(fLatticeSelector, that.fLatticeSelector, sizeof(fLatticeSelector)); + memcpy(fNoise, that.fNoise, sizeof(fNoise)); + memcpy(fGradient, that.fGradient, sizeof(fGradient)); + } + #endif + int fSeed; uint8_t fLatticeSelector[kBlockSize]; uint16_t fNoise[4][kBlockSize][2]; @@ -691,6 +707,10 @@ public: const char* name() const override { return "PerlinNoise"; } + sk_sp<GrFragmentProcessor> clone() const override { + return sk_sp<GrFragmentProcessor>(new GrPerlinNoise2Effect(*this)); + } + const SkPerlinNoiseShaderImpl::StitchData& stitchData() const { return fPaintingData->fStitchDataInit; } SkPerlinNoiseShaderImpl::Type type() const { return fType; } @@ -737,6 +757,21 @@ private: this->addCoordTransform(&fCoordTransform); } + GrPerlinNoise2Effect(const GrPerlinNoise2Effect& that) + : INHERITED(kNone_OptimizationFlags) + , fType(that.fType) + , fCoordTransform(that.fCoordTransform) + , fNumOctaves(that.fNumOctaves) + , fStitchTiles(that.fStitchTiles) + , fPermutationsSampler(that.fPermutationsSampler) + , fNoiseSampler(that.fNoiseSampler) + , fPaintingData(new SkPerlinNoiseShaderImpl::PaintingData(*that.fPaintingData)) { + this->initClassID<GrPerlinNoise2Effect>(); + this->addTextureSampler(&fPermutationsSampler); + this->addTextureSampler(&fNoiseSampler); + this->addCoordTransform(&fCoordTransform); + } + GR_DECLARE_FRAGMENT_PROCESSOR_TEST SkPerlinNoiseShaderImpl::Type fType; @@ -1106,6 +1141,10 @@ public: const char* name() const override { return "ImprovedPerlinNoise"; } + sk_sp<GrFragmentProcessor> clone() const override { + return sk_sp<GrFragmentProcessor>(new GrImprovedPerlinNoiseEffect(*this)); + } + const SkVector& baseFrequency() const { return fPaintingData->fBaseFrequency; } SkScalar z() const { return fZ; } int octaves() const { return fOctaves; } @@ -1144,6 +1183,20 @@ private: this->addCoordTransform(&fCoordTransform); } + GrImprovedPerlinNoiseEffect(const GrImprovedPerlinNoiseEffect& that) + : INHERITED(kNone_OptimizationFlags) + , fCoordTransform(that.fCoordTransform) + , fOctaves(that.fOctaves) + , fZ(that.fZ) + , fPermutationsSampler(that.fPermutationsSampler) + , fGradientSampler(that.fGradientSampler) + , fPaintingData(new SkPerlinNoiseShaderImpl::PaintingData(*that.fPaintingData)) { + this->initClassID<GrImprovedPerlinNoiseEffect>(); + this->addTextureSampler(&fPermutationsSampler); + this->addTextureSampler(&fGradientSampler); + this->addCoordTransform(&fCoordTransform); + } + GR_DECLARE_FRAGMENT_PROCESSOR_TEST GrCoordTransform fCoordTransform; |