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 "SkTypes.h"
11 
12 /*
13  *
14  * Contains useful mask routines for SkMaskSwizzler
15  *
16  */
17 class SkMasks {
18 public:
19 
20     /*
21      *
22      * Input bit masks format
23      *
24      */
25     struct InputMasks {
26         uint32_t red;
27         uint32_t green;
28         uint32_t blue;
29         uint32_t alpha;
30     };
31 
32     /*
33      *
34      * Contains all of the information for a single mask
35      *
36      */
37      struct MaskInfo {
38         uint32_t mask;
39         uint32_t shift;
40         uint32_t size;
41      };
42 
43     /*
44      *
45      * Create the masks object
46      *
47      */
48     static SkMasks* CreateMasks(InputMasks masks, uint32_t bpp);
49 
50     /*
51      *
52      * Get a color component
53      *
54      */
55     uint8_t getRed(uint32_t pixel) const;
56     uint8_t getGreen(uint32_t pixel) const;
57     uint8_t getBlue(uint32_t pixel) const;
58     uint8_t getAlpha(uint32_t pixel) const;
59 
60     /*
61      *
62      * Getter for the alpha mask
63      * The alpha mask may be used in other decoding modes
64      *
65      */
getAlphaMask()66      uint32_t getAlphaMask() const {
67         return fAlpha.mask;
68      }
69 
70 private:
71 
72     /*
73      *
74      * Constructor
75      *
76      */
77     SkMasks(const MaskInfo& red, const MaskInfo& green, const MaskInfo& blue,
78             const MaskInfo& alpha);
79 
80     const MaskInfo fRed;
81     const MaskInfo fGreen;
82     const MaskInfo fBlue;
83     const MaskInfo fAlpha;
84 };
85 
86 #endif
87