aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/shaders/SkComposeShader.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 /src/shaders/SkComposeShader.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 'src/shaders/SkComposeShader.h')
-rw-r--r--src/shaders/SkComposeShader.h42
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;
};