diff options
author | Mike Reed <reed@google.com> | 2017-06-09 10:51:52 -0400 |
---|---|---|
committer | Skia Commit-Bot <skia-commit-bot@chromium.org> | 2017-06-09 17:13:53 +0000 |
commit | 01b2b83aba10bc3767d660cd619c1da58b5eb0b5 (patch) | |
tree | e9336afbe6552b1d603ed11645af813ea91c01bb /include/core/SkShader.h | |
parent | 6a0feba05bd57e84103cebc695d4a217ec9e472e (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.h | 33 |
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. * |