blob: 85d56cc352a9924e412c205053757e0dcc0b7841 [file] [log] [blame]
reed@android.com8a1c16f2008-12-17 15:59:43 +00001/*
epoger@google.comec3ed6a2011-07-28 14:26:00 +00002 * Copyright 2006 The Android Open Source Project
reed@android.com8a1c16f2008-12-17 15:59:43 +00003 *
epoger@google.comec3ed6a2011-07-28 14:26:00 +00004 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
reed@android.com8a1c16f2008-12-17 15:59:43 +00006 */
7
8#ifndef SkComposeShader_DEFINED
9#define SkComposeShader_DEFINED
10
Florin Malita4aed1382017-05-25 10:38:07 -040011#include "SkShaderBase.h"
Mike Reed7d954ad2016-10-28 15:42:34 -040012#include "SkBlendMode.h"
reed@android.com8a1c16f2008-12-17 15:59:43 +000013
Florin Malita5769dd22017-07-12 13:31:25 -040014class SkComposeShader final : public SkShaderBase {
reed@android.com8a1c16f2008-12-17 15:59:43 +000015public:
Mike Reed01b2b832017-06-09 10:51:52 -040016 SkComposeShader(sk_sp<SkShader> dst, sk_sp<SkShader> src, SkBlendMode mode, float lerpT)
17 : fDst(std::move(dst))
18 , fSrc(std::move(src))
19 , fLerpT(lerpT)
Mike Reed7d954ad2016-10-28 15:42:34 -040020 , fMode(mode)
Mike Reed01b2b832017-06-09 10:51:52 -040021 {
22 SkASSERT(lerpT >= 0 && lerpT <= 1);
23 }
rmistry@google.comfbfcd562012-08-23 18:09:54 +000024
wangyix73fa6162015-09-01 09:45:08 -070025#if SK_SUPPORT_GPU
Brian Salomonaff329b2017-08-11 09:40:37 -040026 std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const AsFPArgs&) const override;
wangyix73fa6162015-09-01 09:45:08 -070027#endif
28
Mike Reed01b2b832017-06-09 10:51:52 -040029#ifdef SK_DEBUGx
reed8a21c9f2016-03-08 18:50:00 -080030 SkShader* getShaderA() { return fShaderA.get(); }
31 SkShader* getShaderB() { return fShaderB.get(); }
commit-bot@chromium.org87fcd952014-04-23 19:10:51 +000032#endif
reed@android.com8a1c16f2008-12-17 15:59:43 +000033
Mike Reeda6aaa302017-06-09 10:29:40 -040034#ifdef SK_BUILD_FOR_ANDROID_FRAMEWORK
mtklein36352bf2015-03-25 18:17:31 -070035 bool asACompose(ComposeRec* rec) const override;
Mike Reeda6aaa302017-06-09 10:29:40 -040036#endif
commit-bot@chromium.org79590552014-05-13 18:14:45 +000037
commit-bot@chromium.org0f10f7b2014-03-13 18:02:17 +000038 SK_TO_STRING_OVERRIDE()
djsollen@google.comba28d032012-03-26 17:57:35 +000039 SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkComposeShader)
40
reed@android.com8a1c16f2008-12-17 15:59:43 +000041protected:
reedcfb6bdf2016-03-29 11:32:50 -070042 SkComposeShader(SkReadBuffer&);
mtklein36352bf2015-03-25 18:17:31 -070043 void flatten(SkWriteBuffer&) const override;
Mike Klein2814d912017-05-10 12:35:51 -040044 sk_sp<SkShader> onMakeColorSpace(SkColorSpaceXformer* xformer) const override;
Mike Reed1d8c42e2017-08-29 14:58:19 -040045 bool onAppendStages(const StageRec&) const override;
reed@android.com8a1c16f2008-12-17 15:59:43 +000046
Mike Reed34042072017-08-08 16:29:22 -040047 bool onIsRasterPipelineOnly(const SkMatrix&) const override { return true; }
Florin Malita7d022e02017-05-15 15:06:39 -040048
reed@android.com8a1c16f2008-12-17 15:59:43 +000049private:
Mike Reed01b2b832017-06-09 10:51:52 -040050 sk_sp<SkShader> fDst;
51 sk_sp<SkShader> fSrc;
52 const float fLerpT;
53 const SkBlendMode fMode;
54
55 bool isJustMode() const { return fLerpT == 1; }
56 bool isJustLerp() const { return fMode == SkBlendMode::kSrc; }
reed@android.com8a1c16f2008-12-17 15:59:43 +000057
Florin Malita4aed1382017-05-25 10:38:07 -040058 typedef SkShaderBase INHERITED;
reed@android.com8a1c16f2008-12-17 15:59:43 +000059};
60
61#endif