xref: /aosp_15_r20/external/skia/src/gpu/ganesh/GrImageInfo.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1*c8dee2aaSAndroid Build Coastguard Worker /*
2*c8dee2aaSAndroid Build Coastguard Worker  * Copyright 2019 Google LLC
3*c8dee2aaSAndroid Build Coastguard Worker  *
4*c8dee2aaSAndroid Build Coastguard Worker  * Use of this source code is governed by a BSD-style license that can be
5*c8dee2aaSAndroid Build Coastguard Worker  * found in the LICENSE file.
6*c8dee2aaSAndroid Build Coastguard Worker  */
7*c8dee2aaSAndroid Build Coastguard Worker 
8*c8dee2aaSAndroid Build Coastguard Worker #ifndef GrImageInfo_DEFINED
9*c8dee2aaSAndroid Build Coastguard Worker #define GrImageInfo_DEFINED
10*c8dee2aaSAndroid Build Coastguard Worker 
11*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkRefCnt.h"
12*c8dee2aaSAndroid Build Coastguard Worker #include "include/core/SkSize.h"
13*c8dee2aaSAndroid Build Coastguard Worker #include "include/private/gpu/ganesh/GrTypesPriv.h"
14*c8dee2aaSAndroid Build Coastguard Worker #include "src/gpu/ganesh/GrColorInfo.h"
15*c8dee2aaSAndroid Build Coastguard Worker 
16*c8dee2aaSAndroid Build Coastguard Worker #include <cstddef>
17*c8dee2aaSAndroid Build Coastguard Worker 
18*c8dee2aaSAndroid Build Coastguard Worker class SkColorSpace;
19*c8dee2aaSAndroid Build Coastguard Worker enum SkAlphaType : int;
20*c8dee2aaSAndroid Build Coastguard Worker struct SkImageInfo;
21*c8dee2aaSAndroid Build Coastguard Worker 
22*c8dee2aaSAndroid Build Coastguard Worker class GrImageInfo {
23*c8dee2aaSAndroid Build Coastguard Worker public:
24*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo();
25*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo(const SkImageInfo& info);
26*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo(GrColorType ct, SkAlphaType at, sk_sp<SkColorSpace> cs, int w, int h);
27*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo(GrColorType ct, SkAlphaType at, sk_sp<SkColorSpace> cs, const SkISize& dimensions);
28*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo(const GrColorInfo& info, const SkISize& dimensions);
29*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo(GrColorInfo&& info, const SkISize& dimensions);
30*c8dee2aaSAndroid Build Coastguard Worker 
31*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo(const GrImageInfo&);
32*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo(GrImageInfo&&);
33*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo& operator=(const GrImageInfo&);
34*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo& operator=(GrImageInfo&&);
35*c8dee2aaSAndroid Build Coastguard Worker 
36*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo makeColorType(GrColorType ct) const;
37*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo makeAlphaType(SkAlphaType at) const;
38*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo makeColorSpace(sk_sp<SkColorSpace> cs) const;
39*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo makeDimensions(SkISize dimensions) const ;
40*c8dee2aaSAndroid Build Coastguard Worker     GrImageInfo makeWH(int width, int height) const;
41*c8dee2aaSAndroid Build Coastguard Worker 
colorInfo()42*c8dee2aaSAndroid Build Coastguard Worker     const GrColorInfo& colorInfo() const { return fColorInfo; }
43*c8dee2aaSAndroid Build Coastguard Worker 
colorType()44*c8dee2aaSAndroid Build Coastguard Worker     GrColorType colorType() const { return fColorInfo.colorType(); }
45*c8dee2aaSAndroid Build Coastguard Worker 
alphaType()46*c8dee2aaSAndroid Build Coastguard Worker     SkAlphaType alphaType() const { return fColorInfo.alphaType(); }
47*c8dee2aaSAndroid Build Coastguard Worker 
colorSpace()48*c8dee2aaSAndroid Build Coastguard Worker     SkColorSpace* colorSpace() const { return fColorInfo.colorSpace(); }
49*c8dee2aaSAndroid Build Coastguard Worker 
50*c8dee2aaSAndroid Build Coastguard Worker     sk_sp<SkColorSpace> refColorSpace() const;
51*c8dee2aaSAndroid Build Coastguard Worker 
dimensions()52*c8dee2aaSAndroid Build Coastguard Worker     SkISize dimensions() const { return fDimensions; }
53*c8dee2aaSAndroid Build Coastguard Worker 
width()54*c8dee2aaSAndroid Build Coastguard Worker     int width() const { return fDimensions.width(); }
55*c8dee2aaSAndroid Build Coastguard Worker 
height()56*c8dee2aaSAndroid Build Coastguard Worker     int height() const { return fDimensions.height(); }
57*c8dee2aaSAndroid Build Coastguard Worker 
bpp()58*c8dee2aaSAndroid Build Coastguard Worker     size_t bpp() const { return GrColorTypeBytesPerPixel(this->colorType()); }
59*c8dee2aaSAndroid Build Coastguard Worker 
minRowBytes()60*c8dee2aaSAndroid Build Coastguard Worker     size_t minRowBytes() const { return this->bpp() * this->width(); }
61*c8dee2aaSAndroid Build Coastguard Worker 
isValid()62*c8dee2aaSAndroid Build Coastguard Worker     bool isValid() const { return fColorInfo.isValid() && this->width() > 0 && this->height() > 0; }
63*c8dee2aaSAndroid Build Coastguard Worker 
64*c8dee2aaSAndroid Build Coastguard Worker private:
65*c8dee2aaSAndroid Build Coastguard Worker     GrColorInfo fColorInfo = {};
66*c8dee2aaSAndroid Build Coastguard Worker     SkISize fDimensions;
67*c8dee2aaSAndroid Build Coastguard Worker };
68*c8dee2aaSAndroid Build Coastguard Worker 
69*c8dee2aaSAndroid Build Coastguard Worker #endif
70