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