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
14class SkColorFilter_Matrix : public SkColorFilter {
15public:
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
29private:
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