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 /src/shaders/SkComposeShader.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 'src/shaders/SkComposeShader.h')
-rw-r--r-- | src/shaders/SkComposeShader.h | 42 |
1 files changed, 16 insertions, 26 deletions
diff --git a/src/shaders/SkComposeShader.h b/src/shaders/SkComposeShader.h index 39c43d6b77..03861009a9 100644 --- a/src/shaders/SkComposeShader.h +++ b/src/shaders/SkComposeShader.h @@ -11,36 +11,22 @@ #include "SkShaderBase.h" #include "SkBlendMode.h" -class SkColorSpacXformer; - -/////////////////////////////////////////////////////////////////////////////////////////// - -/** \class SkComposeShader - This subclass of shader returns the composition of two other shaders, combined by - a xfermode. -*/ class SkComposeShader : public SkShaderBase { public: - /** Create a new compose shader, given shaders A, B, and a combining xfermode mode. - When the xfermode is called, it will be given the result from shader A as its - "dst", and the result from shader B as its "src". - mode->xfer32(sA_result, sB_result, ...) - @param shaderA The colors from this shader are seen as the "dst" by the xfermode - @param shaderB The colors from this shader are seen as the "src" by the xfermode - @param mode The xfermode that combines the colors from the two shaders. If mode - is null, then SRC_OVER is assumed. - */ - SkComposeShader(sk_sp<SkShader> sA, sk_sp<SkShader> sB, SkBlendMode mode) - : fShaderA(std::move(sA)) - , fShaderB(std::move(sB)) + SkComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader> src, SkBlendMode mode, float lerpT) + : fDst(std::move(dst)) + , fSrc(std::move(src)) + , fLerpT(lerpT) , fMode(mode) - {} + { + SkASSERT(lerpT >= 0 && lerpT <= 1); + } #if SK_SUPPORT_GPU sk_sp<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override; #endif -#ifdef SK_DEBUG +#ifdef SK_DEBUGx SkShader* getShaderA() { return fShaderA.get(); } SkShader* getShaderB() { return fShaderB.get(); } #endif @@ -57,12 +43,16 @@ protected: bool onAppendStages(SkRasterPipeline*, SkColorSpace* dstCS, SkArenaAlloc*, const SkMatrix&, const SkPaint&, const SkMatrix* localM) const override; - bool isRasterPipelineOnly() const final; + bool isRasterPipelineOnly() const final { return true; } private: - sk_sp<SkShader> fShaderA; - sk_sp<SkShader> fShaderB; - SkBlendMode fMode; + sk_sp<SkShader> fDst; + sk_sp<SkShader> fSrc; + const float fLerpT; + const SkBlendMode fMode; + + bool isJustMode() const { return fLerpT == 1; } + bool isJustLerp() const { return fMode == SkBlendMode::kSrc; } typedef SkShaderBase INHERITED; }; |