blob: afc7f456391dc609c88e68bc35d05d8b4460a7e1 [file] [log] [blame]
Mike Klein6968f9c2018-05-24 12:33:23 -04001/*
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 "SkColorSpace.h"
12#include "SkImageInfo.h"
13
Mike Kleinb82edcc2018-07-10 18:25:03 +000014class SkRasterPipeline;
15
Mike Klein6968f9c2018-05-24 12:33:23 -040016struct SkColorSpaceXformSteps {
Brian Osmanf018b7d2018-06-13 17:21:19 -040017 struct Flags {
Mike Kleinb8389142018-09-10 17:09:16 -040018 bool unpremul = false;
19 bool linearize = false;
20 bool gamut_transform = false;
21 bool encode = false;
22 bool premul = false;
Brian Osmanf018b7d2018-06-13 17:21:19 -040023
24 uint32_t mask() const {
25 return (unpremul ? 1 : 0)
26 | (linearize ? 2 : 0)
27 | (gamut_transform ? 4 : 0)
28 | (encode ? 8 : 0)
29 | (premul ? 16 : 0);
30 }
31 };
32
Mike Klein6968f9c2018-05-24 12:33:23 -040033 SkColorSpaceXformSteps(SkColorSpace* src, SkAlphaType srcAT,
Mike Klein8f3d36c2018-08-14 10:28:05 -040034 SkColorSpace* dst, SkAlphaType dstAT);
Mike Klein2f2a7032018-06-05 12:24:55 -040035
Brian Osmanf018b7d2018-06-13 17:21:19 -040036 void apply(float rgba[4]) const;
Mike Kleinb82edcc2018-07-10 18:25:03 +000037 void apply(SkRasterPipeline*) const;
Brian Osmanf018b7d2018-06-13 17:21:19 -040038
39 Flags flags;
Mike Klein6968f9c2018-05-24 12:33:23 -040040
Mike Kleinc3a54192018-07-11 11:14:03 -040041 bool srcTF_is_sRGB,
42 dstTF_is_sRGB;
Mike Klein34ab0f22018-05-30 11:07:47 -040043 SkColorSpaceTransferFn srcTF, // Apply for linearize.
44 dstTFInv; // Apply for encode.
Brian Osmanf018b7d2018-06-13 17:21:19 -040045 float src_to_dst_matrix[9]; // Apply this 3x3 column-major matrix for gamut_transform.
Mike Klein6968f9c2018-05-24 12:33:23 -040046};
47
Mike Klein6968f9c2018-05-24 12:33:23 -040048#endif//SkColorSpaceXformSteps_DEFINED