xref: /aosp_15_r20/external/skia/src/shaders/SkEmptyShader.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2023 Google LLC
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 SkEmptyShader_DEFINED
8 #define SkEmptyShader_DEFINED
9 
10 #include "src/shaders/SkShaderBase.h"
11 
12 #include "include/core/SkFlattenable.h"
13 
14 class SkReadBuffer;
15 class SkWriteBuffer;
16 struct SkStageRec;
17 
18 /**
19  *  \class SkEmptyShader
20  *  A Shader that always draws nothing. Its createContext always returns nullptr.
21  */
22 class SkEmptyShader : public SkShaderBase {
23 public:
SkEmptyShader()24     SkEmptyShader() {}
25 
26 protected:
flatten(SkWriteBuffer & buffer)27     void flatten(SkWriteBuffer& buffer) const override {
28         // Do nothing.
29         // We just don't want to fall through to SkShader::flatten(),
30         // which will write data we don't care to serialize or decode.
31     }
32 
appendStages(const SkStageRec &,const SkShaders::MatrixRec &)33     bool appendStages(const SkStageRec&, const SkShaders::MatrixRec&) const override {
34         return false;
35     }
36 
type()37     ShaderType type() const override { return ShaderType::kEmpty; }
38 
39 private:
40     friend void ::SkRegisterEmptyShaderFlattenable();
41     SK_FLATTENABLE_HOOKS(SkEmptyShader)
42 };
43 
44 #endif  // SkEmptyShader_DEFINED
45