Line data Source code
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 SkColorMatrixFilter_DEFINED
9 : #define SkColorMatrixFilter_DEFINED
10 :
11 : #include "SkColorFilter.h"
12 :
13 0 : class SK_API SkColorMatrixFilterRowMajor255 : public SkColorFilter {
14 : public:
15 0 : SkColorMatrixFilterRowMajor255() {}
16 : explicit SkColorMatrixFilterRowMajor255(const SkScalar array[20]);
17 :
18 : /** Creates a color matrix filter that returns the same value in all four channels. */
19 : static sk_sp<SkColorFilter> MakeSingleChannelOutput(const SkScalar row[5]);
20 :
21 : void filterSpan(const SkPMColor src[], int count, SkPMColor[]) const override;
22 : void filterSpan4f(const SkPM4f src[], int count, SkPM4f[]) const override;
23 : uint32_t getFlags() const override;
24 : bool asColorMatrix(SkScalar matrix[20]) const override;
25 : sk_sp<SkColorFilter> makeComposed(sk_sp<SkColorFilter>) const override;
26 :
27 : #if SK_SUPPORT_GPU
28 : sk_sp<GrFragmentProcessor> asFragmentProcessor(GrContext*, SkColorSpace*) const override;
29 : #endif
30 :
31 : SK_TO_STRING_OVERRIDE()
32 :
33 0 : SK_DECLARE_PUBLIC_FLATTENABLE_DESERIALIZATION_PROCS(SkColorMatrixFilter)
34 :
35 : protected:
36 : void flatten(SkWriteBuffer&) const override;
37 :
38 : private:
39 : bool onAppendStages(SkRasterPipeline*, SkColorSpace*, SkArenaAlloc*,
40 : bool shaderIsOpaque) const override;
41 :
42 : SkScalar fMatrix[20];
43 : float fTranspose[20]; // for Sk4s
44 : uint32_t fFlags;
45 :
46 : void initState();
47 :
48 : typedef SkColorFilter INHERITED;
49 : };
50 :
51 : #endif
|