reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 1 | /* |
epoger@google.com | ec3ed6a | 2011-07-28 14:26:00 +0000 | [diff] [blame] | 2 | * Copyright 2007 The Android Open Source Project |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 3 | * |
epoger@google.com | ec3ed6a | 2011-07-28 14:26:00 +0000 | [diff] [blame] | 4 | * Use of this source code is governed by a BSD-style license that can be |
| 5 | * found in the LICENSE file. |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 6 | */ |
| 7 | |
| 8 | #ifndef SkColorShader_DEFINED |
| 9 | #define SkColorShader_DEFINED |
| 10 | |
Mike Klein | c0bd9f9 | 2019-04-23 12:05:21 -0500 | [diff] [blame] | 11 | #include "src/shaders/SkShaderBase.h" |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 12 | |
| 13 | /** \class SkColorShader |
| 14 | A Shader that represents a single color. In general, this effect can be |
| 15 | accomplished by just using the color field on the paint, but if an |
| 16 | actual shader object is needed, this provides that feature. |
| 17 | */ |
Florin Malita | 95c993c | 2017-05-26 09:44:10 -0400 | [diff] [blame] | 18 | class SkColorShader : public SkShaderBase { |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 19 | public: |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 20 | /** Create a ColorShader that ignores the color in the paint, and uses the |
| 21 | specified color. Note: like all shaders, at draw time the paint's alpha |
| 22 | will be respected, and is applied to the specified color. |
| 23 | */ |
commit-bot@chromium.org | 76a3b2a | 2014-04-24 16:54:46 +0000 | [diff] [blame] | 24 | explicit SkColorShader(SkColor c); |
reed@android.com | f2b98d6 | 2010-12-20 18:26:13 +0000 | [diff] [blame] | 25 | |
mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 26 | bool isOpaque() const override; |
Mike Klein | b0d10e0 | 2016-11-12 10:29:26 -0500 | [diff] [blame] | 27 | bool isConstant() const override { return true; } |
commit-bot@chromium.org | 87fcd95 | 2014-04-23 19:10:51 +0000 | [diff] [blame] | 28 | |
mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 29 | GradientType asAGradient(GradientInfo* info) const override; |
vandebo@chromium.org | d3ae779 | 2011-02-24 00:21:06 +0000 | [diff] [blame] | 30 | |
bsalomon | c21b09e | 2015-08-28 18:46:56 -0700 | [diff] [blame] | 31 | #if SK_SUPPORT_GPU |
Mike Reed | e3429e6 | 2018-01-19 11:43:34 -0500 | [diff] [blame] | 32 | std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override; |
bsalomon | c21b09e | 2015-08-28 18:46:56 -0700 | [diff] [blame] | 33 | #endif |
dandov | 9de5b51 | 2014-06-10 14:38:28 -0700 | [diff] [blame] | 34 | |
Mike Klein | a4eb936 | 2018-10-30 13:36:24 -0400 | [diff] [blame] | 35 | private: |
| 36 | SK_FLATTENABLE_HOOKS(SkColorShader) |
| 37 | |
mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 38 | void flatten(SkWriteBuffer&) const override; |
Herb Derby | 83e939b | 2017-02-07 14:25:11 -0500 | [diff] [blame] | 39 | |
mtklein | 36352bf | 2015-03-25 18:17:31 -0700 | [diff] [blame] | 40 | bool onAsLuminanceColor(SkColor* lum) const override { |
reed | 8367b8c | 2014-08-22 08:30:20 -0700 | [diff] [blame] | 41 | *lum = fColor; |
| 42 | return true; |
| 43 | } |
Herb Derby | 83e939b | 2017-02-07 14:25:11 -0500 | [diff] [blame] | 44 | |
Mike Reed | 1386b2d | 2019-03-13 21:15:05 -0400 | [diff] [blame] | 45 | bool onAppendStages(const SkStageRec&) const override; |
reed@google.com | 59ccef6 | 2011-12-07 14:59:50 +0000 | [diff] [blame] | 46 | |
Mike Klein | 0393505 | 2019-11-01 11:36:55 -0500 | [diff] [blame] | 47 | bool onProgram(skvm::Builder*, |
| 48 | SkColorSpace* dstCS, |
Mike Klein | 1cc6067 | 2019-11-05 14:19:58 -0600 | [diff] [blame] | 49 | skvm::Uniforms* uniforms, |
Mike Klein | f3d4109 | 2019-11-04 13:22:02 -0600 | [diff] [blame] | 50 | skvm::F32 x, skvm::F32 y, |
Mike Klein | b9f2088 | 2019-11-08 12:14:15 -0600 | [diff] [blame] | 51 | skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const override; |
Mike Klein | e4522dc | 2019-10-29 12:10:34 -0500 | [diff] [blame] | 52 | |
reed | 8367b8c | 2014-08-22 08:30:20 -0700 | [diff] [blame] | 53 | SkColor fColor; |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 54 | }; |
| 55 | |
Florin Malita | 4aed138 | 2017-05-25 10:38:07 -0400 | [diff] [blame] | 56 | class SkColor4Shader : public SkShaderBase { |
reed | 0ccc62d | 2016-05-04 13:09:39 -0700 | [diff] [blame] | 57 | public: |
| 58 | SkColor4Shader(const SkColor4f&, sk_sp<SkColorSpace>); |
| 59 | |
Mike Klein | a4eb936 | 2018-10-30 13:36:24 -0400 | [diff] [blame] | 60 | bool isOpaque() const override { return fColor.isOpaque(); } |
Mike Klein | b0d10e0 | 2016-11-12 10:29:26 -0500 | [diff] [blame] | 61 | bool isConstant() const override { return true; } |
reed | 0ccc62d | 2016-05-04 13:09:39 -0700 | [diff] [blame] | 62 | |
reed | 0ccc62d | 2016-05-04 13:09:39 -0700 | [diff] [blame] | 63 | #if SK_SUPPORT_GPU |
Mike Reed | e3429e6 | 2018-01-19 11:43:34 -0500 | [diff] [blame] | 64 | std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(const GrFPArgs&) const override; |
reed | 0ccc62d | 2016-05-04 13:09:39 -0700 | [diff] [blame] | 65 | #endif |
| 66 | |
reed | 0ccc62d | 2016-05-04 13:09:39 -0700 | [diff] [blame] | 67 | private: |
Mike Klein | 4fee323 | 2018-10-18 17:27:16 -0400 | [diff] [blame] | 68 | SK_FLATTENABLE_HOOKS(SkColor4Shader) |
| 69 | |
Mike Klein | a4eb936 | 2018-10-30 13:36:24 -0400 | [diff] [blame] | 70 | void flatten(SkWriteBuffer&) const override; |
Mike Reed | 1386b2d | 2019-03-13 21:15:05 -0400 | [diff] [blame] | 71 | bool onAppendStages(const SkStageRec&) const override; |
Mike Klein | b0d10e0 | 2016-11-12 10:29:26 -0500 | [diff] [blame] | 72 | |
Mike Klein | 0393505 | 2019-11-01 11:36:55 -0500 | [diff] [blame] | 73 | bool onProgram(skvm::Builder*, |
| 74 | SkColorSpace* dstCS, |
Mike Klein | 1cc6067 | 2019-11-05 14:19:58 -0600 | [diff] [blame] | 75 | skvm::Uniforms* uniforms, |
Mike Klein | f3d4109 | 2019-11-04 13:22:02 -0600 | [diff] [blame] | 76 | skvm::F32 x, skvm::F32 y, |
Mike Klein | b9f2088 | 2019-11-08 12:14:15 -0600 | [diff] [blame] | 77 | skvm::F32* r, skvm::F32* g, skvm::F32* b, skvm::F32* a) const override; |
Mike Klein | 9d0c67a | 2019-10-31 15:41:58 -0500 | [diff] [blame] | 78 | |
Mike Klein | a4eb936 | 2018-10-30 13:36:24 -0400 | [diff] [blame] | 79 | sk_sp<SkColorSpace> fColorSpace; |
| 80 | const SkColor4f fColor; |
reed | 0ccc62d | 2016-05-04 13:09:39 -0700 | [diff] [blame] | 81 | }; |
| 82 | |
reed@android.com | 8a1c16f | 2008-12-17 15:59:43 +0000 | [diff] [blame] | 83 | #endif |