1 /**************************************************************************
3 * Copyright 2013-2014 RAD Game Tools and Valve Software
4 * Copyright 2010-2014 Rich Geldreich and Tenacious Software LLC
7 * Permission is hereby granted, free of charge, to any person obtaining a copy
8 * of this software and associated documentation files (the "Software"), to deal
9 * in the Software without restriction, including without limitation the rights
10 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11 * copies of the Software, and to permit persons to whom the Software is
12 * furnished to do so, subject to the following conditions:
14 * The above copyright notice and this permission notice shall be included in
15 * all copies or substantial portions of the Software.
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
25 **************************************************************************/
27 // File: vogl_pixel_format.h
30 #include "vogl_core.h"
37 namespace pixel_format_helpers
39 uint get_num_formats();
40 pixel_format get_pixel_format_by_index(uint index);
42 const char *get_pixel_format_string(pixel_format fmt);
44 const char *get_vogl_format_string(vogl_format fmt);
46 inline bool is_grayscale(pixel_format fmt)
59 inline bool is_dxt1(pixel_format fmt)
61 return (fmt == PIXEL_FMT_DXT1) || (fmt == PIXEL_FMT_DXT1A);
64 // has_alpha() should probably be called "has_opacity()" - it indicates if the format encodes opacity
65 // because some swizzled DXT5 formats do not encode opacity.
66 inline bool has_alpha(pixel_format fmt)
76 case PIXEL_FMT_A8R8G8B8:
79 case PIXEL_FMT_DXT5_AGBR:
87 inline bool is_alpha_only(pixel_format fmt)
100 inline bool is_normal_map(pixel_format fmt)
106 case PIXEL_FMT_DXT5_xGBR:
107 case PIXEL_FMT_DXT5_xGxR:
108 case PIXEL_FMT_DXT5_AGBR:
116 inline int is_dxt(pixel_format fmt)
121 case PIXEL_FMT_DXT1A:
127 case PIXEL_FMT_DXT5A:
129 case PIXEL_FMT_DXT5_CCxY:
130 case PIXEL_FMT_DXT5_xGxR:
131 case PIXEL_FMT_DXT5_xGBR:
132 case PIXEL_FMT_DXT5_AGBR:
141 inline int get_fundamental_format(pixel_format fmt)
145 case PIXEL_FMT_DXT1A:
146 return PIXEL_FMT_DXT1;
147 case PIXEL_FMT_DXT5_CCxY:
148 case PIXEL_FMT_DXT5_xGxR:
149 case PIXEL_FMT_DXT5_xGBR:
150 case PIXEL_FMT_DXT5_AGBR:
151 return PIXEL_FMT_DXT5;
158 inline dxt_format get_dxt_format(pixel_format fmt)
164 case PIXEL_FMT_DXT1A:
176 case PIXEL_FMT_DXT5A:
180 case PIXEL_FMT_DXT5_CCxY:
182 case PIXEL_FMT_DXT5_xGxR:
184 case PIXEL_FMT_DXT5_xGBR:
186 case PIXEL_FMT_DXT5_AGBR:
196 inline pixel_format from_dxt_format(dxt_format dxt_fmt)
201 return PIXEL_FMT_DXT1;
203 return PIXEL_FMT_DXT1A;
205 return PIXEL_FMT_DXT3;
207 return PIXEL_FMT_DXT5;
209 return PIXEL_FMT_DXN;
211 return PIXEL_FMT_3DC;
213 return PIXEL_FMT_DXT5A;
215 return PIXEL_FMT_ETC1;
220 return PIXEL_FMT_INVALID;
223 inline bool is_pixel_format_non_srgb(pixel_format fmt)
229 case PIXEL_FMT_DXT5A:
230 case PIXEL_FMT_DXT5_CCxY:
231 case PIXEL_FMT_DXT5_xGxR:
232 case PIXEL_FMT_DXT5_xGBR:
233 case PIXEL_FMT_DXT5_AGBR:
241 inline bool is_vogl_format_non_srgb(vogl_format fmt)
248 case cCRNFmtDXT5_CCxY:
249 case cCRNFmtDXT5_xGxR:
250 case cCRNFmtDXT5_xGBR:
251 case cCRNFmtDXT5_AGBR:
259 inline uint get_bpp(pixel_format fmt)
265 case PIXEL_FMT_DXT1A:
279 case PIXEL_FMT_DXT5A:
281 case PIXEL_FMT_R8G8B8:
283 case PIXEL_FMT_A8R8G8B8:
293 case PIXEL_FMT_DXT5_CCxY:
295 case PIXEL_FMT_DXT5_xGxR:
297 case PIXEL_FMT_DXT5_xGBR:
299 case PIXEL_FMT_DXT5_AGBR:
308 inline uint get_dxt_bytes_per_block(pixel_format fmt)
314 case PIXEL_FMT_DXT1A:
316 case PIXEL_FMT_DXT5A:
332 case PIXEL_FMT_DXT5_CCxY:
334 case PIXEL_FMT_DXT5_xGxR:
336 case PIXEL_FMT_DXT5_xGBR:
338 case PIXEL_FMT_DXT5_AGBR:
353 cCompFlagGrayscale = 16,
354 cCompFlagNormalMap = 32,
355 cCompFlagLumaChroma = 64,
356 cCompFlagsRGBValid = cCompFlagRValid | cCompFlagGValid | cCompFlagBValid,
357 cCompFlagsRGBAValid = cCompFlagRValid | cCompFlagGValid | cCompFlagBValid | cCompFlagAValid,
358 cDefaultCompFlags = cCompFlagsRGBAValid
361 component_flags get_component_flags(pixel_format fmt);
363 vogl_format convert_pixel_format_to_best_vogl_format(pixel_format vogl_fmt);
365 pixel_format convert_vogl_format_to_pixel_format(vogl_format fmt);
367 } // namespace pixel_format_helpers