Antkeeper  0.0.1
gl-format-lut.hpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Christopher J. Howard
3  *
4  * This file is part of Antkeeper source code.
5  *
6  * Antkeeper source code is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Antkeeper source code is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef ANTKEEPER_GL_GL_FORMAT_LUT_HPP
21 #define ANTKEEPER_GL_GL_FORMAT_LUT_HPP
22 
23 #include <glad/gl.h>
24 
25 namespace gl {
26 
28 constexpr GLenum gl_format_lut[][3] =
29 {
30  {0 , 0 , 0 }, // undefined
31  {0 , GL_RG , 0 }, // r4g4_unorm_pack8
32  {GL_RGBA4 , GL_RGBA , GL_UNSIGNED_SHORT_4_4_4_4 }, // r4g4b4a4_unorm_pack16
33  {GL_RGBA4 , GL_BGRA , GL_UNSIGNED_SHORT_4_4_4_4 }, // b4g4r4a4_unorm_pack16
34  {GL_RGB565 , GL_RGB , GL_UNSIGNED_SHORT_5_6_5 }, // r5g6b5_unorm_pack16
35  {GL_RGB565 , GL_BGR , GL_UNSIGNED_SHORT_5_6_5 }, // b5g6r5_unorm_pack16
36  {GL_RGB5_A1 , GL_RGBA , GL_UNSIGNED_SHORT_5_5_5_1 }, // r5g5b5a1_unorm_pack16
37  {GL_RGB5_A1 , GL_BGRA , GL_UNSIGNED_SHORT_5_5_5_1 }, // b5g5r5a1_unorm_pack16
38  {GL_RGB5_A1 , GL_BGRA , GL_UNSIGNED_SHORT_1_5_5_5_REV }, // a1r5g5b5_unorm_pack16
39  {GL_R8 , GL_RED , GL_UNSIGNED_BYTE }, // r8_unorm
40  {GL_R8_SNORM , GL_RED , GL_BYTE }, // r8_snorm
41  {0 , GL_RED , GL_UNSIGNED_BYTE }, // r8_uscaled
42  {0 , GL_RED , GL_BYTE }, // r8_sscaled
43  {GL_R8UI , GL_RED_INTEGER , GL_UNSIGNED_BYTE }, // r8_uint
44  {GL_R8I , GL_RED_INTEGER , GL_BYTE }, // r8_sint
45  {0 , GL_RED , GL_UNSIGNED_BYTE }, // r8_srgb
46  {GL_RG8 , GL_RG , GL_UNSIGNED_BYTE }, // r8g8_unorm
47  {GL_RG8_SNORM , GL_RG , GL_BYTE }, // r8g8_snorm
48  {0 , GL_RED , GL_UNSIGNED_BYTE }, // r8g8_uscaled
49  {0 , GL_RED , GL_BYTE }, // r8g8_sscaled
50  {GL_RG8UI , GL_RG_INTEGER , GL_UNSIGNED_BYTE }, // r8g8_uint
51  {GL_RG8I , GL_RG_INTEGER , GL_BYTE }, // r8g8_sint
52  {0 , GL_RG , GL_UNSIGNED_BYTE }, // r8g8_srgb
53  {GL_RGB8 , GL_RGB , GL_UNSIGNED_BYTE }, // r8g8b8_unorm
54  {GL_RGB8_SNORM , GL_RGB , GL_BYTE }, // r8g8b8_snorm
55  {0 , GL_RED , GL_UNSIGNED_BYTE }, // r8g8b8_uscaled
56  {0 , GL_RED , GL_BYTE }, // r8g8b8_sscaled
57  {GL_RGB8UI , GL_RGB_INTEGER , GL_UNSIGNED_BYTE }, // r8g8b8_uint
58  {GL_RGB8I , GL_RGB_INTEGER , GL_BYTE }, // r8g8b8_sint
59  {GL_SRGB8 , GL_RGB , GL_UNSIGNED_BYTE }, // r8g8b8_srgb
60  {GL_RGB8 , GL_BGR , GL_UNSIGNED_BYTE }, // b8g8r8_unorm
61  {GL_RGB8_SNORM , GL_BGR , GL_BYTE }, // b8g8r8_snorm
62  {0 , GL_BGR , GL_UNSIGNED_BYTE }, // b8g8r8_uscaled
63  {0 , GL_BGR , GL_BYTE }, // b8g8r8_sscaled
64  {GL_RGB8UI , GL_BGR_INTEGER , GL_UNSIGNED_BYTE }, // b8g8r8_uint
65  {GL_RGB8I , GL_BGR_INTEGER , GL_BYTE }, // b8g8r8_sint
66  {GL_SRGB8 , GL_BGR , GL_UNSIGNED_BYTE }, // b8g8r8_srgb
67  {GL_RGBA8 , GL_RGBA , GL_UNSIGNED_BYTE }, // r8g8b8a8_unorm
68  {GL_RGBA8_SNORM , GL_RGBA , GL_BYTE }, // r8g8b8a8_snorm
69  {0 , GL_RGBA , GL_UNSIGNED_BYTE }, // r8g8b8a8_uscaled
70  {0 , GL_RGBA , GL_BYTE }, // r8g8b8a8_sscaled
71  {GL_RGBA8UI , GL_RGBA_INTEGER , GL_UNSIGNED_BYTE }, // r8g8b8a8_uint
72  {GL_RGBA8I , GL_RGBA_INTEGER , GL_BYTE }, // r8g8b8a8_sint
73  {GL_SRGB8_ALPHA8 , GL_RGBA , GL_UNSIGNED_BYTE }, // r8g8b8a8_srgb
74  {GL_RGBA8 , GL_BGRA , GL_UNSIGNED_BYTE }, // b8g8r8a8_unorm
75  {GL_RGBA8_SNORM , GL_BGRA , GL_BYTE }, // b8g8r8a8_snorm
76  {0 , GL_BGRA , GL_UNSIGNED_BYTE }, // b8g8r8a8_uscaled
77  {0 , GL_BGRA , GL_BYTE }, // b8g8r8a8_sscaled
78  {GL_RGBA8UI , GL_BGRA_INTEGER , GL_UNSIGNED_BYTE }, // b8g8r8a8_uint
79  {GL_RGBA8I , GL_BGRA_INTEGER , GL_BYTE }, // b8g8r8a8_sint
80  {GL_SRGB8_ALPHA8 , GL_BGRA , GL_UNSIGNED_BYTE }, // b8g8r8a8_srgb
81  {GL_RGBA8 , GL_RGBA , GL_UNSIGNED_INT_8_8_8_8_REV }, // a8b8g8r8_unorm_pack32
82  {GL_RGBA8_SNORM , GL_RGBA , 0 }, // a8b8g8r8_snorm_pack32
83  {0 , GL_RGBA , GL_UNSIGNED_INT_8_8_8_8_REV }, // a8b8g8r8_uscaled_pack32
84  {0 , GL_RGBA , 0 }, // a8b8g8r8_sscaled_pack32
85  {GL_RGBA8UI , GL_RGBA_INTEGER , GL_UNSIGNED_INT_8_8_8_8_REV }, // a8b8g8r8_uint_pack32
86  {GL_RGBA8I , GL_RGBA_INTEGER , 0 }, // a8b8g8r8_sint_pack32
87  {GL_SRGB8_ALPHA8 , GL_RGBA , GL_UNSIGNED_INT_8_8_8_8_REV }, // a8b8g8r8_srgb_pack32
88  {GL_RGB10_A2 , GL_BGRA , GL_UNSIGNED_INT_2_10_10_10_REV }, // a2r10g10b10_unorm_pack32
89  {0 , GL_BGRA , 0 }, // a2r10g10b10_snorm_pack32
90  {0 , GL_BGRA , GL_UNSIGNED_INT_2_10_10_10_REV }, // a2r10g10b10_uscaled_pack32
91  {0 , GL_BGRA , 0 }, // a2r10g10b10_sscaled_pack32
92  {GL_RGB10_A2UI , GL_BGRA_INTEGER , GL_UNSIGNED_INT_2_10_10_10_REV }, // a2r10g10b10_uint_pack32
93  {0 , GL_BGRA_INTEGER , 0 }, // a2r10g10b10_sint_pack32
94  {GL_RGB10_A2 , GL_RGBA , GL_UNSIGNED_INT_2_10_10_10_REV }, // a2b10g10r10_unorm_pack32
95  {0 , GL_RGBA , 0 }, // a2b10g10r10_snorm_pack32
96  {0 , GL_RGBA , GL_UNSIGNED_INT_2_10_10_10_REV }, // a2b10g10r10_uscaled_pack32
97  {0 , GL_RGBA , 0 }, // a2b10g10r10_sscaled_pack32
98  {GL_RGB10_A2UI , GL_RGBA_INTEGER , GL_UNSIGNED_INT_2_10_10_10_REV }, // a2b10g10r10_uint_pack32
99  {0 , GL_RGBA_INTEGER , 0 }, // a2b10g10r10_sint_pack32
100  {GL_R16 , GL_RED , GL_UNSIGNED_SHORT }, // r16_unorm
101  {GL_R16_SNORM , GL_RED , GL_SHORT }, // r16_snorm
102  {0 , GL_RED , GL_UNSIGNED_SHORT }, // r16_uscaled
103  {0 , GL_RED , GL_SHORT }, // r16_sscaled
104  {GL_R16UI , GL_RED_INTEGER , GL_UNSIGNED_SHORT }, // r16_uint
105  {GL_R16I , GL_RED_INTEGER , GL_SHORT }, // r16_sint
106  {GL_R16F , GL_RED , GL_HALF_FLOAT }, // r16_sfloat
107  {GL_RG16 , GL_RG , GL_UNSIGNED_SHORT }, // r16g16_unorm
108  {GL_RG16_SNORM , GL_RG , GL_SHORT }, // r16g16_snorm
109  {0 , GL_RG , GL_UNSIGNED_SHORT }, // r16g16_uscaled
110  {0 , GL_RG , GL_SHORT }, // r16g16_sscaled
111  {GL_RG16UI , GL_RG_INTEGER , GL_UNSIGNED_SHORT }, // r16g16_uint
112  {GL_RG16I , GL_RG_INTEGER , GL_SHORT }, // r16g16_sint
113  {GL_RG16F , GL_RG , GL_HALF_FLOAT }, // r16g16_sfloat
114  {GL_RGB16 , GL_RGB , GL_UNSIGNED_SHORT }, // r16g16b16_unorm
115  {GL_RGB16_SNORM , GL_RGB , GL_SHORT }, // r16g16b16_snorm
116  {0 , GL_RGB , GL_UNSIGNED_SHORT }, // r16g16b16_uscaled
117  {0 , GL_RGB , GL_SHORT }, // r16g16b16_sscaled
118  {GL_RGB16UI , GL_RGB_INTEGER , GL_UNSIGNED_SHORT }, // r16g16b16_uint
119  {GL_RGB16I , GL_RGB_INTEGER , GL_SHORT }, // r16g16b16_sint
120  {GL_RGB16F , GL_RGB , GL_HALF_FLOAT }, // r16g16b16_sfloat
121  {GL_RGBA16 , GL_RGBA , GL_UNSIGNED_SHORT }, // r16g16b16a16_unorm
122  {GL_RGBA16_SNORM , GL_RGBA , GL_SHORT }, // r16g16b16a16_snorm
123  {0 , GL_RGBA , GL_UNSIGNED_SHORT }, // r16g16b16a16_uscaled
124  {0 , GL_RGBA , GL_SHORT }, // r16g16b16a16_sscaled
125  {GL_RGBA16UI , GL_RGBA_INTEGER , GL_UNSIGNED_SHORT }, // r16g16b16a16_uint
126  {GL_RGBA16I , GL_RGBA_INTEGER , GL_SHORT }, // r16g16b16a16_sint
127  {GL_RGBA16F , GL_RGBA , GL_HALF_FLOAT }, // r16g16b16a16_sfloat
128  {GL_R32UI , GL_RED_INTEGER , GL_UNSIGNED_INT }, // r32_uint
129  {GL_R32I , GL_RED_INTEGER , GL_INT }, // r32_sint
130  {GL_R32F , GL_RED , GL_FLOAT }, // r32_sfloat
131  {GL_RG32UI , GL_RG_INTEGER , GL_UNSIGNED_INT }, // r32g32_uint
132  {GL_RG32I , GL_RG_INTEGER , GL_INT }, // r32g32_sint
133  {GL_RG32F , GL_RG , GL_FLOAT }, // r32g32_sfloat
134  {GL_RGB32UI , GL_RGB_INTEGER , GL_UNSIGNED_INT }, // r32g32b32_uint
135  {GL_RGB32I , GL_RGB_INTEGER , GL_INT }, // r32g32b32_sint
136  {GL_RGB32F , GL_RGB , GL_FLOAT }, // r32g32b32_sfloat
137  {GL_RGBA32UI , GL_RGBA_INTEGER , GL_UNSIGNED_INT }, // r32g32b32a32_uint
138  {GL_RGBA32I , GL_RGBA_INTEGER , GL_INT }, // r32g32b32a32_sint
139  {GL_RGBA32F , GL_RGBA , GL_FLOAT }, // r32g32b32a32_sfloat
140  {0 , GL_RED_INTEGER , 0 }, // r64_uint
141  {0 , GL_RED_INTEGER , 0 }, // r64_sint
142  {0 , GL_RED , GL_DOUBLE }, // r64_sfloat
143  {0 , GL_RG_INTEGER , 0 }, // r64g64_uint
144  {0 , GL_RG_INTEGER , 0 }, // r64g64_sint
145  {0 , GL_RG , GL_DOUBLE }, // r64g64_sfloat
146  {0 , GL_RGB_INTEGER , 0 }, // r64g64b64_uint
147  {0 , GL_RGB_INTEGER , 0 }, // r64g64b64_sint
148  {0 , GL_RGB , GL_DOUBLE }, // r64g64b64_sfloat
149  {0 , GL_RGBA_INTEGER , 0 }, // r64g64b64a64_uint
150  {0 , GL_RGBA_INTEGER , 0 }, // r64g64b64a64_sint
151  {0 , GL_RGBA , GL_DOUBLE }, // r64g64b64a64_sfloat
152  {GL_R11F_G11F_B10F , GL_BGR , GL_UNSIGNED_INT_10F_11F_11F_REV }, // b10g11r11_ufloat_pack32
153  {GL_RGB9_E5 , GL_BGR , GL_UNSIGNED_INT_5_9_9_9_REV }, // e5b9g9r9_ufloat_pack32
154  {GL_DEPTH_COMPONENT16 , GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT }, // d16_unorm
155  {GL_DEPTH_COMPONENT24 , GL_DEPTH_COMPONENT, GL_UNSIGNED_INT }, // x8_d24_unorm_pack32
156  {GL_DEPTH_COMPONENT32F , GL_DEPTH_COMPONENT, GL_FLOAT }, // d32_sfloat
157  {GL_STENCIL_INDEX8 , GL_STENCIL_INDEX , GL_UNSIGNED_BYTE }, // s8_uint
158  {0 , GL_DEPTH_STENCIL , 0 }, // d16_unorm_s8_uint
159  {GL_DEPTH24_STENCIL8 , GL_DEPTH_STENCIL , GL_UNSIGNED_INT_24_8 }, // d24_unorm_s8_uint
160  {GL_DEPTH32F_STENCIL8 , GL_DEPTH_STENCIL , GL_FLOAT_32_UNSIGNED_INT_24_8_REV}, // d32_sfloat_s8_uint
161  {0 , GL_RGB , 0 }, // bc1_rgb_unorm_block,
162  {0 , GL_RGB , 0 }, // bc1_rgb_srgb_block,
163  {0 , GL_RGBA , 0 }, // bc1_rgba_unorm_block,
164  {0 , GL_RGBA , 0 }, // bc1_rgba_srgb_block,
165  {0 , GL_RGBA , 0 }, // bc2_unorm_block,
166  {0 , GL_RGBA , 0 }, // bc2_srgb_block,
167  {0 , GL_RGBA , 0 }, // bc3_unorm_block,
168  {0 , GL_RGBA , 0 }, // bc3_srgb_block,
169  {GL_COMPRESSED_RED_RGTC1 , GL_RED , 0 }, // bc4_unorm_block,
170  {GL_COMPRESSED_SIGNED_RED_RGTC1 , GL_RED , 0 }, // bc4_snorm_block,
171  {GL_COMPRESSED_RG_RGTC2 , GL_RG , 0 }, // bc5_unorm_block,
172  {GL_COMPRESSED_SIGNED_RG_RGTC2 , GL_RG , 0 }, // bc5_snorm_block,
173  {GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT , GL_RGB , 0 }, // bc6h_ufloat_block,
174  {GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT , GL_RGB , 0 }, // bc6h_sfloat_block,
175  {GL_COMPRESSED_RGBA_BPTC_UNORM , GL_RGBA , 0 }, // bc7_unorm_block,
176  {GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM , GL_RGBA , 0 }, // bc7_srgb_block,
177  {GL_COMPRESSED_RGB8_ETC2 , GL_RGB , 0 }, // etc2_r8g8b8_unorm_block,
178  {GL_COMPRESSED_SRGB8_ETC2 , GL_RGB , 0 }, // etc2_r8g8b8_srgb_block,
179  {GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 , GL_RGBA , 0 }, // etc2_r8g8b8a1_unorm_block,
180  {GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2, GL_RGBA , 0 }, // etc2_r8g8b8a1_srgb_block,
181  {GL_COMPRESSED_RGBA8_ETC2_EAC , GL_RGBA , 0 }, // etc2_r8g8b8a8_unorm_block,
182  {GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC , GL_RGBA , 0 }, // etc2_r8g8b8a8_srgb_block,
183  {GL_COMPRESSED_R11_EAC , GL_RED , 0 }, // eac_r11_unorm_block,
184  {GL_COMPRESSED_SIGNED_R11_EAC , GL_RED , 0 }, // eac_r11_snorm_block,
185  {GL_COMPRESSED_RG11_EAC , GL_RG , 0 }, // eac_r11g11_unorm_block,
186  {GL_COMPRESSED_SIGNED_RG11_EAC , GL_RG , 0 }, // eac_r11g11_snorm_block,
187  {0 , GL_RGBA , 0 }, // astc_4x4_unorm_block,
188  {0 , GL_RGBA , 0 }, // astc_4x4_srgb_block,
189  {0 , GL_RGBA , 0 }, // astc_5x4_unorm_block,
190  {0 , GL_RGBA , 0 }, // astc_5x4_srgb_block,
191  {0 , GL_RGBA , 0 }, // astc_5x5_unorm_block,
192  {0 , GL_RGBA , 0 }, // astc_5x5_srgb_block,
193  {0 , GL_RGBA , 0 }, // astc_6x5_unorm_block,
194  {0 , GL_RGBA , 0 }, // astc_6x5_srgb_block,
195  {0 , GL_RGBA , 0 }, // astc_6x6_unorm_block,
196  {0 , GL_RGBA , 0 }, // astc_6x6_srgb_block,
197  {0 , GL_RGBA , 0 }, // astc_8x5_unorm_block,
198  {0 , GL_RGBA , 0 }, // astc_8x5_srgb_block,
199  {0 , GL_RGBA , 0 }, // astc_8x6_unorm_block,
200  {0 , GL_RGBA , 0 }, // astc_8x6_srgb_block,
201  {0 , GL_RGBA , 0 }, // astc_8x8_unorm_block,
202  {0 , GL_RGBA , 0 }, // astc_8x8_srgb_block,
203  {0 , GL_RGBA , 0 }, // astc_10x5_unorm_block,
204  {0 , GL_RGBA , 0 }, // astc_10x5_srgb_block,
205  {0 , GL_RGBA , 0 }, // astc_10x6_unorm_block,
206  {0 , GL_RGBA , 0 }, // astc_10x6_srgb_block,
207  {0 , GL_RGBA , 0 }, // astc_10x8_unorm_block,
208  {0 , GL_RGBA , 0 }, // astc_10x8_srgb_block,
209  {0 , GL_RGBA , 0 }, // astc_10x10_unorm_block,
210  {0 , GL_RGBA , 0 }, // astc_10x10_srgb_block,
211  {0 , GL_RGBA , 0 }, // astc_12x10_unorm_block,
212  {0 , GL_RGBA , 0 }, // astc_12x10_srgb_block,
213  {0 , GL_RGBA , 0 }, // astc_12x12_unorm_block,
214  {0 , GL_RGBA , 0 } // astc_12x12_srgb_block
215 };
216 
217 } // namespace gl
218 
219 #endif // ANTKEEPER_GL_GL_FORMAT_LUT_HPP
Graphics library interface.
Definition: window.hpp:28
constexpr GLenum gl_format_lut[][3]
Maps gl::format to OpenGL internal format, base format, and pixel type.