ezEngine  Milestone 7
ImageFormat.h
1 #pragma once
2 
3 #include <Foundation/Types/Types.h>
4 #include <CoreUtils/Basics.h>
5 
7 struct EZ_COREUTILS_DLL ezImageFormatType
8 {
10  enum Enum
11  {
12  UNKNOWN,
13  LINEAR,
14  BLOCK_COMPRESSED
15  };
16 };
17 
19 struct EZ_COREUTILS_DLL ezImageFormat
20 {
22  enum Enum
23  {
24  UNKNOWN,
25 
26  // 32b per component, 4 components
27  R32G32B32A32_TYPELESS,
28  R32G32B32A32_FLOAT,
29  R32G32B32A32_UINT,
30  R32G32B32A32_SINT,
31 
32  // 32b per component, 3 components
33  R32G32B32_TYPELESS,
34  R32G32B32_FLOAT,
35  R32G32B32_UINT,
36  R32G32B32_SINT,
37 
38  // 16b per component, 4 components
39  R16G16B16A16_TYPELESS,
40  R16G16B16A16_FLOAT,
41  R16G16B16A16_UNORM,
42  R16G16B16A16_UINT,
43  R16G16B16A16_SNORM,
44  R16G16B16A16_SINT,
45 
46  // 32b per component, 2 components
47  R32G32_TYPELESS,
48  R32G32_FLOAT,
49  R32G32_UINT,
50  R32G32_SINT,
51 
52  // Pseudo depth-stencil formats
53  R32G8X24_TYPELESS,
54  D32_FLOAT_S8X24_UINT,
55  R32_FLOAT_X8X24_TYPELESS,
56  X32_TYPELESS_G8X24_UINT,
57 
58  // 10b and 11b per component
59  R10G10B10A2_TYPELESS,
60  R10G10B10A2_UNORM,
61  R10G10B10A2_UINT,
62  R10G10B10_XR_BIAS_A2_UNORM,
63  R11G11B10_FLOAT,
64 
65  // 8b per component, 4 components
66  R8G8B8A8_UNORM,
67  R8G8B8A8_TYPELESS,
68  R8G8B8A8_UNORM_SRGB,
69  R8G8B8A8_UINT,
70  R8G8B8A8_SNORM,
71  R8G8B8A8_SINT,
72 
73  B8G8R8A8_UNORM,
74  B8G8R8X8_UNORM,
75  B8G8R8A8_TYPELESS,
76  B8G8R8A8_UNORM_SRGB,
77  B8G8R8X8_TYPELESS,
78  B8G8R8X8_UNORM_SRGB,
79 
80  // 16b per component, 2 components
81  R16G16_TYPELESS,
82  R16G16_FLOAT,
83  R16G16_UNORM,
84  R16G16_UINT,
85  R16G16_SNORM,
86  R16G16_SINT,
87 
88  // 32b per component, 1 component
89  R32_TYPELESS,
90  D32_FLOAT,
91  R32_FLOAT,
92  R32_UINT,
93  R32_SINT,
94 
95  // Mixed 24b/8b formats
96  R24G8_TYPELESS,
97  D24_UNORM_S8_UINT,
98  R24_UNORM_X8_TYPELESS,
99  X24_TYPELESS_G8_UINT,
100 
101  // 8b per component, three components
102  B8G8R8_UNORM,
103 
104  // 8b per component, two components
105  R8G8_TYPELESS,
106  R8G8_UNORM,
107  R8G8_UINT,
108  R8G8_SNORM,
109  R8G8_SINT,
110 
111  // 5b and 6b per component
112  B5G6R5_UNORM,
113  B5G5R5A1_UNORM,
114  B5G5R5X1_UNORM,
115 
116  // 16b per component, one component
117  R16_TYPELESS,
118  R16_FLOAT,
119  D16_UNORM,
120  R16_UNORM,
121  R16_UINT,
122  R16_SNORM,
123  R16_SINT,
124 
125  // 8b per component, one component
126  R8_TYPELESS,
127  R8_UNORM,
128  R8_UINT,
129  R8_SNORM,
130  R8_SINT,
131  A8_UNORM,
132 
133  // 1b per component, one component
134  R1_UNORM,
135  R9G9B9E5_SHAREDEXP,
136 
137  // Block compression formats
138  BC1_TYPELESS,
139  BC1_UNORM,
140  BC1_UNORM_SRGB,
141  BC2_TYPELESS,
142  BC2_UNORM,
143  BC2_UNORM_SRGB,
144  BC3_TYPELESS,
145  BC3_UNORM,
146  BC3_UNORM_SRGB,
147  BC4_TYPELESS,
148  BC4_UNORM,
149  BC4_SNORM,
150  BC5_TYPELESS,
151  BC5_UNORM,
152  BC5_SNORM,
153  BC6H_TYPELESS,
154  BC6H_UF16,
155  BC6H_SF16,
156  BC7_TYPELESS,
157  BC7_UNORM,
158  BC7_UNORM_SRGB,
159 
160  // 4b per component
161  B4G4R4A4_UNORM,
162 
163  NUM_FORMATS
164  };
165 
169  static const char* GetName(Enum format);
170 
172  static ezUInt32 GetBitsPerPixel(Enum format);
173 
175  static ezUInt32 GetRedMask(Enum format);
176 
178  static ezUInt32 GetGreenMask(Enum format);
179 
181  static ezUInt32 GetBlueMask(Enum format);
182 
184  static ezUInt32 GetAlphaMask(Enum format);
185 
187  static ezImageFormatType::Enum GetType(Enum format);
188 
190  static ezImageFormat::Enum FromPixelMask(ezUInt32 uiRedMask, ezUInt32 uiGreenMask, ezUInt32 uiBlueMask, ezUInt32 uiAlphaMask);
191 
192 private:
193  EZ_MAKE_SUBSYSTEM_STARTUP_FRIEND(CoreUtils, Image);
194 
195  static void Startup();
196  static void Shutdown();
197 };