xref: /aosp_15_r20/external/skia/src/core/SkMasks.h (revision c8dee2aa9b3f27cf6c858bd81872bdeb2c07ed17)
1 /*
2  * Copyright 2015 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 #ifndef SkMasks_DEFINED
8 #define SkMasks_DEFINED
9 
10 #include "include/core/SkTypes.h"
11 
12 #include <cstdint>
13 
14 class SkMasks {
15 public:
16     // Contains all of the information for a single mask
17     struct MaskInfo {
18         uint32_t mask;
19         uint32_t shift;  // To the left
20         uint32_t size;   // Of mask width
21     };
22 
SkMasks(const MaskInfo red,const MaskInfo green,const MaskInfo blue,const MaskInfo alpha)23     constexpr SkMasks(const MaskInfo red,
24                       const MaskInfo green,
25                       const MaskInfo blue,
26                       const MaskInfo alpha)
27             : fRed(red), fGreen(green), fBlue(blue), fAlpha(alpha) {}
28 
29     // Input bit masks format
30     struct InputMasks {
31         uint32_t red;
32         uint32_t green;
33         uint32_t blue;
34         uint32_t alpha;
35     };
36 
37     // Create the masks object
38     static SkMasks* CreateMasks(InputMasks masks, int bytesPerPixel);
39 
40     // Get a color component
41     uint8_t getRed(uint32_t pixel) const;
42     uint8_t getGreen(uint32_t pixel) const;
43     uint8_t getBlue(uint32_t pixel) const;
44     uint8_t getAlpha(uint32_t pixel) const;
45 
46     // Getter for the alpha mask
47     // The alpha mask may be used in other decoding modes
getAlphaMask()48     uint32_t getAlphaMask() const { return fAlpha.mask; }
49 
50 private:
51     const MaskInfo fRed;
52     const MaskInfo fGreen;
53     const MaskInfo fBlue;
54     const MaskInfo fAlpha;
55 };
56 
57 #endif
58