• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2006 The Android Open Source Project
3  *
4  * Use of this source code is governed by a BSD-style license that can be
5  * found in the LICENSE file.
6  */
7 
8 #ifndef SkComposeShader_DEFINED
9 #define SkComposeShader_DEFINED
10 
11 #include "include/core/SkBlendMode.h"
12 #include "src/core/SkBlendModePriv.h"
13 #include "src/core/SkBlenderBase.h"
14 #include "src/shaders/SkShaderBase.h"
15 
16 class SkShader_Blend final : public SkShaderBase {
17 public:
SkShader_Blend(SkBlendMode mode,sk_sp<SkShader> dst,sk_sp<SkShader> src)18     SkShader_Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src)
19         : fDst(std::move(dst))
20         , fSrc(std::move(src))
21         , fBlender(nullptr)
22         , fMode(mode)
23     {}
24 
SkShader_Blend(sk_sp<SkBlender> blender,sk_sp<SkShader> dst,sk_sp<SkShader> src)25     SkShader_Blend(sk_sp<SkBlender> blender, sk_sp<SkShader> dst, sk_sp<SkShader> src)
26         : fDst(std::move(dst))
27         , fSrc(std::move(src))
28         , fBlender(std::move(blender))
29         , fMode((SkBlendMode)kCustom_SkBlendMode)
30     {}
31 
32 #if SK_SUPPORT_GPU
33     std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override;
34 #endif
35 
36 protected:
37     SkShader_Blend(SkReadBuffer&);
38     void flatten(SkWriteBuffer&) const override;
39     bool onAppendStages(const SkStageRec&) const override;
40     skvm::Color onProgram(skvm::Builder*, skvm::Coord device, skvm::Coord local, skvm::Color paint,
41                           const SkMatrixProvider&, const SkMatrix* localM, const SkColorInfo& dst,
42                           skvm::Uniforms*, SkArenaAlloc*) const override;
43 
44 private:
45     SK_FLATTENABLE_HOOKS(SkShader_Blend)
46 
47     sk_sp<SkShader>     fDst;
48     sk_sp<SkShader>     fSrc;
49     sk_sp<SkBlender>    fBlender;   // if null, use fMode
50     const SkBlendMode   fMode;      // only use if fBlender is null
51 
52     using INHERITED = SkShaderBase;
53 };
54 
55 #endif
56