diff options
author | Mike Klein <mtklein@chromium.org> | 2018-01-03 10:30:21 -0500 |
---|---|---|
committer | Mike Klein <mtklein@chromium.org> | 2018-02-09 23:21:16 +0000 |
commit | 1f31309d7a09f5431fef181fd77c59a2da58da81 (patch) | |
tree | ad9908b0a4ffa8586f45ec204a3b8560cc9ef8c3 /src/shaders/SkImageShader.h | |
parent | 528ceb9c0d8e8a9579d97029aa6af0b2fcdc2419 (diff) |
yet another approach to unpremul scale pixels
This keeps punning things to premul (in anticipation of pulling
back on any unpremul support outside read/write/scalePixels),
and yet still clamps correctly for scalePixels() + unpremul + HQ
and/or gamut transform.
Change-Id: I75977cfdb94ffbe62c538ddee39f1abd2cc01935
Reviewed-on: https://skia-review.googlesource.com/106265
Reviewed-by: Brian Osman <brianosman@google.com>
Diffstat (limited to 'src/shaders/SkImageShader.h')
-rw-r--r-- | src/shaders/SkImageShader.h | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/src/shaders/SkImageShader.h b/src/shaders/SkImageShader.h index a3cf3dbe7f..a024dc7185 100644 --- a/src/shaders/SkImageShader.h +++ b/src/shaders/SkImageShader.h @@ -15,8 +15,11 @@ class SkImageShader : public SkShaderBase { public: - static sk_sp<SkShader> Make(sk_sp<SkImage>, TileMode tx, TileMode ty, - const SkMatrix* localMatrix); + static sk_sp<SkShader> Make(sk_sp<SkImage>, + SkShader::TileMode tx, + SkShader::TileMode ty, + const SkMatrix* localMatrix, + bool clampAsIfUnpremul = false); bool isOpaque() const override; @@ -27,19 +30,23 @@ public: std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override; #endif - SkImageShader(sk_sp<SkImage>, TileMode tx, TileMode ty, const SkMatrix* localMatrix); - static bool IsRasterPipelineOnly(const SkMatrix& ctm, SkColorType, SkAlphaType, SkShader::TileMode tx, SkShader::TileMode ty, const SkMatrix& localM); -protected: +private: + SkImageShader(sk_sp<SkImage>, + SkShader::TileMode tx, + SkShader::TileMode ty, + const SkMatrix* localMatrix, + bool clampAsIfUnpremul); + void flatten(SkWriteBuffer&) const override; Context* onMakeContext(const ContextRec&, SkArenaAlloc* storage) const override; #ifdef SK_SUPPORT_LEGACY_SHADER_ISABITMAP - bool onIsABitmap(SkBitmap*, SkMatrix*, TileMode*) const override; + bool onIsABitmap(SkBitmap*, SkMatrix*, SkShader::TileMode*) const override; #endif - SkImage* onIsAImage(SkMatrix*, TileMode*) const override; + SkImage* onIsAImage(SkMatrix*, SkShader::TileMode*) const override; bool onIsRasterPipelineOnly(const SkMatrix& ctm) const override; @@ -50,13 +57,12 @@ protected: &this->getLocalMatrix()); } - sk_sp<SkImage> fImage; - const TileMode fTileModeX; - const TileMode fTileModeY; + sk_sp<SkImage> fImage; + const SkShader::TileMode fTileModeX; + const SkShader::TileMode fTileModeY; + const bool fClampAsIfUnpremul; -private: friend class SkShaderBase; - typedef SkShaderBase INHERITED; }; |