xref: /aosp_15_r20/external/skia/src/core/SkColorSpaceXformSteps.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2018 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 SkColorSpaceXformSteps_DEFINED
9 #define SkColorSpaceXformSteps_DEFINED
10 
11 #include "modules/skcms/skcms.h"
12 
13 #include <cstdint>
14 
15 class SkColorSpace;
16 class SkRasterPipeline;
17 enum SkAlphaType : int;
18 
19 struct SkColorSpaceXformSteps {
20 
21     struct Flags {
22         bool unpremul         = false;
23         bool linearize        = false;
24         bool gamut_transform  = false;
25         bool encode           = false;
26         bool premul           = false;
27 
maskSkColorSpaceXformSteps::Flags28         constexpr uint32_t mask() const {
29             return (unpremul        ?  1 : 0)
30                  | (linearize       ?  2 : 0)
31                  | (gamut_transform ?  4 : 0)
32                  | (encode          ?  8 : 0)
33                  | (premul          ? 16 : 0);
34         }
35     };
36 
SkColorSpaceXformStepsSkColorSpaceXformSteps37     SkColorSpaceXformSteps() {}
38     SkColorSpaceXformSteps(const SkColorSpace* src, SkAlphaType srcAT,
39                            const SkColorSpace* dst, SkAlphaType dstAT);
40 
41     template <typename S, typename D>
SkColorSpaceXformStepsSkColorSpaceXformSteps42     SkColorSpaceXformSteps(const S& src, const D& dst)
43         : SkColorSpaceXformSteps(src.colorSpace(), src.alphaType(),
44                                  dst.colorSpace(), dst.alphaType()) {}
45 
46     void apply(float rgba[4]) const;
47     void apply(SkRasterPipeline*) const;
48 
49     Flags flags;
50 
51     skcms_TransferFunction srcTF,     // Apply for linearize.
52                            dstTFInv;  // Apply for encode.
53     float src_to_dst_matrix[9];       // Apply this 3x3 column-major matrix for gamut_transform.
54 };
55 
56 #endif//SkColorSpaceXformSteps_DEFINED
57