SkComposeShader.h 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. #ifndef SkComposeShader_DEFINED
  8. #define SkComposeShader_DEFINED
  9. #include "include/core/SkBlendMode.h"
  10. #include "src/shaders/SkShaderBase.h"
  11. class SkShader_Blend final : public SkShaderBase {
  12. public:
  13. SkShader_Blend(SkBlendMode mode, sk_sp<SkShader> dst, sk_sp<SkShader> src, const SkMatrix* lm)
  14. : INHERITED(lm)
  15. , fDst(std::move(dst))
  16. , fSrc(std::move(src))
  17. , fMode(mode)
  18. {}
  19. #if SK_SUPPORT_GPU
  20. std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override;
  21. #endif
  22. protected:
  23. SkShader_Blend(SkReadBuffer&);
  24. void flatten(SkWriteBuffer&) const override;
  25. bool onAppendStages(const SkStageRec&) const override;
  26. private:
  27. SK_FLATTENABLE_HOOKS(SkShader_Blend)
  28. sk_sp<SkShader> fDst;
  29. sk_sp<SkShader> fSrc;
  30. const SkBlendMode fMode;
  31. typedef SkShaderBase INHERITED;
  32. };
  33. class SkShader_Lerp final : public SkShaderBase {
  34. public:
  35. SkShader_Lerp(float weight, sk_sp<SkShader> dst, sk_sp<SkShader> src, const SkMatrix* lm)
  36. : INHERITED(lm)
  37. , fDst(std::move(dst))
  38. , fSrc(std::move(src))
  39. , fWeight(weight)
  40. {
  41. SkASSERT(weight >= 0 && weight <= 1);
  42. }
  43. #if SK_SUPPORT_GPU
  44. std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override;
  45. #endif
  46. protected:
  47. SkShader_Lerp(SkReadBuffer&);
  48. void flatten(SkWriteBuffer&) const override;
  49. bool onAppendStages(const SkStageRec&) const override;
  50. private:
  51. SK_FLATTENABLE_HOOKS(SkShader_Lerp)
  52. sk_sp<SkShader> fDst;
  53. sk_sp<SkShader> fSrc;
  54. const float fWeight;
  55. typedef SkShaderBase INHERITED;
  56. };
  57. class SkShader_LerpRed final : public SkShaderBase {
  58. public:
  59. SkShader_LerpRed(sk_sp<SkShader> red, sk_sp<SkShader> dst, sk_sp<SkShader> src,
  60. const SkMatrix* lm)
  61. : INHERITED(lm)
  62. , fDst(std::move(dst))
  63. , fSrc(std::move(src))
  64. , fRed(std::move(red))
  65. {}
  66. #if SK_SUPPORT_GPU
  67. std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override;
  68. #endif
  69. protected:
  70. SkShader_LerpRed(SkReadBuffer&);
  71. void flatten(SkWriteBuffer&) const override;
  72. bool onAppendStages(const SkStageRec&) const override;
  73. private:
  74. SK_FLATTENABLE_HOOKS(SkShader_LerpRed)
  75. sk_sp<SkShader> fDst;
  76. sk_sp<SkShader> fSrc;
  77. sk_sp<SkShader> fRed;
  78. typedef SkShaderBase INHERITED;
  79. };
  80. #endif