diff options
author | 2017-02-18 15:15:51 -0500 | |
---|---|---|
committer | 2017-02-18 20:55:51 +0000 | |
commit | 6f9f7ebb74f49a3b641421fd368d8101e81dd05e (patch) | |
tree | ff4f60366fb41ff6a6569c97c3897ed9bf5ee96b /src/effects/SkPerlinNoiseShader.cpp | |
parent | 7f302c4682f5d6eb9dc61f1fb1d12e1079024f70 (diff) |
Expand use of GrMakeCachedBitmapProxy (take 2)
Reland of https://skia-review.googlesource.com/c/8666/ (Expand use of GrMakeCachedBitmapProxy) with a fix for the non-GPU build
Change-Id: I91d1658139b895b94e04d3f486e56b76bc6d184a
Reviewed-on: https://skia-review.googlesource.com/8700
Reviewed-by: Robert Phillips <robertphillips@google.com>
Commit-Queue: Robert Phillips <robertphillips@google.com>
Diffstat (limited to 'src/effects/SkPerlinNoiseShader.cpp')
-rw-r--r-- | src/effects/SkPerlinNoiseShader.cpp | 39 |
1 files changed, 22 insertions, 17 deletions
diff --git a/src/effects/SkPerlinNoiseShader.cpp b/src/effects/SkPerlinNoiseShader.cpp index b67fb34692..5f8fe32f08 100644 --- a/src/effects/SkPerlinNoiseShader.cpp +++ b/src/effects/SkPerlinNoiseShader.cpp @@ -19,6 +19,7 @@ #include "GrContext.h" #include "GrCoordTransform.h" #include "SkGr.h" +#include "SkGrPriv.h" #include "effects/GrConstColorProcessor.h" #include "glsl/GrGLSLFragmentProcessor.h" #include "glsl/GrGLSLFragmentShaderBuilder.h" @@ -485,14 +486,16 @@ private: class GrPerlinNoiseEffect : public GrFragmentProcessor { public: - static sk_sp<GrFragmentProcessor> Make(SkPerlinNoiseShader::Type type, + static sk_sp<GrFragmentProcessor> Make(GrTextureProvider* textureProvider, + SkPerlinNoiseShader::Type type, int numOctaves, bool stitchTiles, SkPerlinNoiseShader::PaintingData* paintingData, - GrTexture* permutationsTexture, GrTexture* noiseTexture, + sk_sp<GrTextureProxy> permutationsProxy, + sk_sp<GrTextureProxy> noiseProxy, const SkMatrix& matrix) { return sk_sp<GrFragmentProcessor>( - new GrPerlinNoiseEffect(type, numOctaves, stitchTiles, paintingData, - permutationsTexture, noiseTexture, matrix)); + new GrPerlinNoiseEffect(textureProvider, type, numOctaves, stitchTiles, paintingData, + std::move(permutationsProxy), std::move(noiseProxy), matrix)); } virtual ~GrPerlinNoiseEffect() { delete fPaintingData; } @@ -525,17 +528,18 @@ private: fPaintingData->fStitchDataInit == s.fPaintingData->fStitchDataInit; } - GrPerlinNoiseEffect(SkPerlinNoiseShader::Type type, int numOctaves, bool stitchTiles, + GrPerlinNoiseEffect(GrTextureProvider* textureProvider, + SkPerlinNoiseShader::Type type, int numOctaves, bool stitchTiles, SkPerlinNoiseShader::PaintingData* paintingData, - GrTexture* permutationsTexture, GrTexture* noiseTexture, + sk_sp<GrTextureProxy> permutationsProxy, sk_sp<GrTextureProxy> noiseProxy, const SkMatrix& matrix) : INHERITED(kNone_OptimizationFlags) , fType(type) , fCoordTransform(matrix) , fNumOctaves(numOctaves) , fStitchTiles(stitchTiles) - , fPermutationsSampler(permutationsTexture) - , fNoiseSampler(noiseTexture) + , fPermutationsSampler(textureProvider, std::move(permutationsProxy)) + , fNoiseSampler(textureProvider, std::move(noiseProxy)) , fPaintingData(paintingData) { this->initClassID<GrPerlinNoiseEffect>(); this->addTextureSampler(&fPermutationsSampler); @@ -911,23 +915,24 @@ sk_sp<GrFragmentProcessor> SkPerlinNoiseShader::asFragmentProcessor(const AsFPAr SkPerlinNoiseShader::PaintingData* paintingData = new PaintingData(fTileSize, fSeed, fBaseFrequencyX, fBaseFrequencyY, matrix); - sk_sp<GrTexture> permutationsTexture( - GrRefCachedBitmapTexture(args.fContext, paintingData->getPermutationsBitmap(), - GrSamplerParams::ClampNoFilter(), nullptr)); - sk_sp<GrTexture> noiseTexture( - GrRefCachedBitmapTexture(args.fContext, paintingData->getNoiseBitmap(), - GrSamplerParams::ClampNoFilter(), nullptr)); + sk_sp<GrTextureProxy> permutationsProxy(GrMakeCachedBitmapProxy( + args.fContext, + paintingData->getPermutationsBitmap())); + sk_sp<GrTextureProxy> noiseProxy(GrMakeCachedBitmapProxy(args.fContext, + paintingData->getNoiseBitmap())); SkMatrix m = *args.fViewMatrix; m.setTranslateX(-localMatrix.getTranslateX() + SK_Scalar1); m.setTranslateY(-localMatrix.getTranslateY() + SK_Scalar1); - if ((permutationsTexture) && (noiseTexture)) { + if (permutationsProxy && noiseProxy) { sk_sp<GrFragmentProcessor> inner( - GrPerlinNoiseEffect::Make(fType, + GrPerlinNoiseEffect::Make(args.fContext->textureProvider(), + fType, fNumOctaves, fStitchTiles, paintingData, - permutationsTexture.get(), noiseTexture.get(), + std::move(permutationsProxy), + std::move(noiseProxy), m)); return GrFragmentProcessor::MulOutputByInputAlpha(std::move(inner)); } |