• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "include/core/SkAlphaType.h"
12 #include "modules/skcms/skcms.h"
13 #include "src/core/SkVM.h"
14 #include <stdint.h>
15 
16 class SkColorSpace;
17 class SkRasterPipeline;
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     skvm::Color program(skvm::Builder*, skvm::Uniforms*, skvm::Color) const;
49 
50     Flags flags;
51 
52     skcms_TransferFunction srcTF,     // Apply for linearize.
53                            dstTFInv;  // Apply for encode.
54     float src_to_dst_matrix[9];       // Apply this 3x3 column-major matrix for gamut_transform.
55 };
56 
57 #endif//SkColorSpaceXformSteps_DEFINED
58