xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrColorInfo.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2017 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 GrColorInfo_DEFINED
9 #define GrColorInfo_DEFINED
10 
11 #include "include/core/SkAlphaType.h"
12 #include "include/core/SkRefCnt.h"
13 #include "include/private/gpu/ganesh/GrTypesPriv.h"
14 #include "src/gpu/ganesh/GrColorSpaceXform.h"
15 
16 class SkColorInfo;
17 class SkColorSpace;
18 /**
19  * All the info needed to interpret a color: Color type + alpha type + color space. Also caches
20  * the GrColorSpaceXform from sRGB. */
21 class GrColorInfo {
22 public:
23     GrColorInfo();
24     GrColorInfo(const GrColorInfo&);
25     GrColorInfo& operator=(const GrColorInfo&);
26     GrColorInfo(GrColorType, SkAlphaType, sk_sp<SkColorSpace>);
27     /* implicit */ GrColorInfo(const SkColorInfo&);
28     ~GrColorInfo();
29 
30     bool operator==(const GrColorInfo& that) const;
31     bool operator!=(const GrColorInfo& that) const { return !(*this == that); }
32 
33     GrColorInfo makeColorType(GrColorType ct) const;
34 
35     bool isLinearlyBlended() const;
36 
37     SkColorSpace* colorSpace() const;
38     sk_sp<SkColorSpace> refColorSpace() const;
39 
colorSpaceXformFromSRGB()40     GrColorSpaceXform* colorSpaceXformFromSRGB() const { return fColorXformFromSRGB.get(); }
refColorSpaceXformFromSRGB()41     sk_sp<GrColorSpaceXform> refColorSpaceXformFromSRGB() const { return fColorXformFromSRGB; }
42 
colorType()43     GrColorType colorType() const { return fColorType; }
alphaType()44     SkAlphaType alphaType() const { return fAlphaType; }
45 
isAlphaOnly()46     bool isAlphaOnly() const { return GrColorTypeIsAlphaOnly(fColorType); }
47 
isValid()48     bool isValid() const {
49         return fColorType != GrColorType::kUnknown && fAlphaType != kUnknown_SkAlphaType;
50     }
51 
52 private:
53     sk_sp<SkColorSpace> fColorSpace;
54     sk_sp<GrColorSpaceXform> fColorXformFromSRGB;
55     GrColorType fColorType = GrColorType::kUnknown;
56     SkAlphaType fAlphaType = kUnknown_SkAlphaType;
57 };
58 
59 #endif
60