aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders/SkImageShader.h
diff options
context:
space:
mode:
authorGravatar Mike Klein <mtklein@chromium.org>2018-01-03 10:30:21 -0500
committerGravatar Mike Klein <mtklein@chromium.org>2018-02-09 23:21:16 +0000
commit1f31309d7a09f5431fef181fd77c59a2da58da81 (patch)
treead9908b0a4ffa8586f45ec204a3b8560cc9ef8c3 /src/shaders/SkImageShader.h
parent528ceb9c0d8e8a9579d97029aa6af0b2fcdc2419 (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.h30
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;
};