aboutsummaryrefslogtreecommitdiffhomepage
path: root/include/core/SkShader.h
diff options
context:
space:
mode:
authorGravatar Mike Reed <reed@google.com>2017-06-09 10:51:52 -0400
committerGravatar Skia Commit-Bot <skia-commit-bot@chromium.org>2017-06-09 17:13:53 +0000
commit01b2b83aba10bc3767d660cd619c1da58b5eb0b5 (patch)
treee9336afbe6552b1d603ed11645af813ea91c01bb /include/core/SkShader.h
parent6a0feba05bd57e84103cebc695d4a217ec9e472e (diff)
Extend composeshader to support a lerp parameter
Bug: skia: Change-Id: I3bbb2cb8d0a84fca0309654498548ebc94d8938f Reviewed-on: https://skia-review.googlesource.com/18460 Commit-Queue: Mike Reed <reed@google.com> Reviewed-by: Florin Malita <fmalita@chromium.org>
Diffstat (limited to 'include/core/SkShader.h')
-rw-r--r--include/core/SkShader.h33
1 files changed, 32 insertions, 1 deletions
diff --git a/include/core/SkShader.h b/include/core/SkShader.h
index 7f78d4ba93..daed2ba718 100644
--- a/include/core/SkShader.h
+++ b/include/core/SkShader.h
@@ -210,7 +210,38 @@ public:
*/
static sk_sp<SkShader> MakeColorShader(const SkColor4f&, sk_sp<SkColorSpace>);
- static sk_sp<SkShader> MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader> src, SkBlendMode);
+ /**
+ * Compose two shaders together, using two operators: mode and lerp. The resulting colors
+ * are computed by first combining the src and dst shaders using mode, and then linearly
+ * interpolating between the dst and result colors using lerp.
+ *
+ * result = dst * (1 - lerp) + (src (mode) dst) * lerp
+ *
+ * If either shader is nullptr, then this returns nullptr.
+ * If lerp is NaN then this returns nullptr, otherwise lerp is clamped to [0..1].
+ */
+ static sk_sp<SkShader> MakeCompose(sk_sp<SkShader> dst, sk_sp<SkShader> src,
+ SkBlendMode mode, float lerp = 1);
+
+ /*
+ * DEPRECATED: call MakeCompose.
+ */
+ static sk_sp<SkShader> MakeComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader> src,
+ SkBlendMode mode) {
+ return MakeCompose(std::move(dst), std::move(src), mode, 1);
+ }
+
+ /**
+ * Compose two shaders together using a weighted average.
+ *
+ * result = dst * (1 - lerp) + src * lerp
+ *
+ * If either shader is nullptr, then this returns nullptr.
+ * If lerp is NaN then this returns nullptr, otherwise lerp is clamped to [0..1].
+ */
+ static sk_sp<SkShader> MakeMixer(sk_sp<SkShader> dst, sk_sp<SkShader> src, float lerp) {
+ return MakeCompose(std::move(dst), std::move(src), SkBlendMode::kSrc, lerp);
+ }
/** Call this to create a new shader that will draw with the specified bitmap.
*