1 | /* |
---|---|
2 | * Copyright 2016 Google Inc. |
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 SkColorFilter_Matrix_DEFINED |
9 | #define SkColorFilter_Matrix_DEFINED |
10 | |
11 | #include "include/core/SkColorFilter.h" |
12 | #include "include/core/SkFlattenable.h" |
13 | |
14 | class SkColorFilter_Matrix : public SkColorFilter { |
15 | public: |
16 | enum class Domain : uint8_t { kRGBA, kHSLA }; |
17 | |
18 | explicit SkColorFilter_Matrix(const float array[20], Domain); |
19 | |
20 | uint32_t getFlags() const override; |
21 | |
22 | #if SK_SUPPORT_GPU |
23 | std::unique_ptr<GrFragmentProcessor> asFragmentProcessor(GrRecordingContext*, |
24 | const GrColorInfo&) const override; |
25 | #endif |
26 | |
27 | static void RegisterFlattenables(); |
28 | |
29 | private: |
30 | void flatten(SkWriteBuffer&) const override; |
31 | bool onAsAColorMatrix(float matrix[20]) const override; |
32 | |
33 | SK_FLATTENABLE_HOOKS(SkColorFilter_Matrix) |
34 | |
35 | bool onAppendStages(const SkStageRec& rec, bool shaderIsOpaque) const override; |
36 | skvm::Color onProgram(skvm::Builder*, skvm::Color, |
37 | SkColorSpace* dstCS, |
38 | skvm::Uniforms* uniforms, SkArenaAlloc*) const override; |
39 | |
40 | float fMatrix[20]; |
41 | uint16_t fFlags; |
42 | Domain fDomain; |
43 | |
44 | typedef SkColorFilter INHERITED; |
45 | }; |
46 | |
47 | #endif |
48 |