0.7.0
gl.hpp
Go to the documentation of this file.
1 
29 #pragma once
30 
31 #include "format.hpp"
32 #include "target.hpp"
33 #include <array>
34 
35 namespace gli
36 {
37  class gl
38  {
39  public:
40  enum internalFormat
41  {
42  // unorm formats
43  INTERNAL_R8_UNORM = 0x8229, //GL_R8
44  INTERNAL_RG8_UNORM = 0x822B, //GL_RG8
45  INTERNAL_RGB8_UNORM = 0x8051, //GL_RGB8
46  INTERNAL_RGBA8_UNORM = 0x8058, //GL_RGBA8
47 
48  INTERNAL_R16_UNORM = 0x822A, //GL_R16
49  INTERNAL_RG16_UNORM = 0x822C, //GL_RG16
50  INTERNAL_RGB16_UNORM = 0x8054, //GL_RGB16
51  INTERNAL_RGBA16_UNORM = 0x805B, //GL_RGBA16
52 
53  INTERNAL_RGB10A2_UNORM = 0x8059, //GL_RGB10_A2
54 
55  // snorm formats
56  INTERNAL_R8_SNORM = 0x8F94, //GL_R8_SNORM
57  INTERNAL_RG8_SNORM = 0x8F95, //GL_RG8_SNORM
58  INTERNAL_RGB8_SNORM = 0x8F96, //GL_RGB8_SNORM
59  INTERNAL_RGBA8_SNORM = 0x8F97, //GL_RGBA8_SNORM
60 
61  INTERNAL_R16_SNORM = 0x8F98, //GL_R16_SNORM
62  INTERNAL_RG16_SNORM= 0x8F99, //GL_RG16_SNORM
63  INTERNAL_RGB16_SNORM= 0x8F9A, //GL_RGB16_SNORM
64  INTERNAL_RGBA16_SNORM = 0x8F9B, //GL_RGBA16_SNORM
65 
66  // unsigned integer formats
67  INTERNAL_R8U = 0x8232, //GL_R8UI
68  INTERNAL_RG8U = 0x8238, //GL_RG8UI
69  INTERNAL_RGB8U = 0x8D7D, //GL_RGB8UI
70  INTERNAL_RGBA8U = 0x8D7C, //GL_RGBA8UI
71 
72  INTERNAL_R16U = 0x8234, //GL_R16UI
73  INTERNAL_RG16U = 0x823A, //GL_RG16UI
74  INTERNAL_RGB16U = 0x8D77, //GL_RGB16UI
75  INTERNAL_RGBA16U = 0x8D76, //GL_RGBA16UI
76 
77  INTERNAL_R32U = 0x8236, //GL_R32UI
78  INTERNAL_RG32U = 0x823C, //GL_RG32UI
79  INTERNAL_RGB32U = 0x8D71, //GL_RGB32UI
80  INTERNAL_RGBA32U = 0x8D70, //GL_RGBA32UI
81 
82  INTERNAL_RGB10A2U = 0x906F, //GL_RGB10_A2UI
83 
84  // signed integer formats
85  INTERNAL_R8I = 0x8231, //GL_R8I
86  INTERNAL_RG8I = 0x8237, //GL_RG8I
87  INTERNAL_RGB8I = 0x8D8F, //GL_RGB8I
88  INTERNAL_RGBA8I = 0x8D8E, //GL_RGBA8I
89 
90  INTERNAL_R16I = 0x8233, //GL_R16I
91  INTERNAL_RG16I = 0x8239, //GL_RG16I
92  INTERNAL_RGB16I = 0x8D89, //GL_RGB16I
93  INTERNAL_RGBA16I = 0x8D88, //GL_RGBA16I
94 
95  INTERNAL_R32I = 0x8235, //GL_R32I
96  INTERNAL_RG32I = 0x823B, //GL_RG32I
97  INTERNAL_RGB32I = 0x8D83, //GL_RGB32I
98  INTERNAL_RGBA32I = 0x8D82, //GL_RGBA32I
99 
100  // Floating formats
101  INTERNAL_R16F = 0x822D, //GL_R16F
102  INTERNAL_RG16F = 0x822F, //GL_RG16F
103  INTERNAL_RGB16F = 0x881B, //GL_RGB16F
104  INTERNAL_RGBA16F = 0x881A, //GL_RGBA16F
105 
106  INTERNAL_R32F = 0x822E, //GL_R32F
107  INTERNAL_RG32F = 0x8230, //GL_RG32F
108  INTERNAL_RGB32F = 0x8815, //GL_RGB32F
109  INTERNAL_RGBA32F = 0x8814, //GL_RGBA32F
110 
111  // sRGB formats
112  INTERNAL_SR8 = 0x8FBD, //GL_SR8_EXT
113  INTERNAL_SRG8 = 0x8FBE, //GL_SRG8_EXT
114  INTERNAL_SRGB8 = 0x8C41, //GL_SRGB8
115  INTERNAL_SRGB8_ALPHA8 = 0x8C43, //GL_SRGB8_ALPHA8
116 
117  // Packed formats
118  INTERNAL_RGB9E5 = 0x8C3D, //GL_RGB9_E5
119  INTERNAL_RG11B10F = 0x8C3A, //GL_R11F_G11F_B10F
120  INTERNAL_RG3B2 = 0x2A10, //GL_R3_G3_B2
121  INTERNAL_R5G6B5 = 0x8D62, //GL_RGB565
122  INTERNAL_RGB5A1 = 0x8057, //GL_RGB5_A1
123  INTERNAL_RGBA4 = 0x8056, //GL_RGBA4
124 
125  // Luminance Alpha formats
126  INTERNAL_LA4 = 0x8043, //GL_LUMINANCE4_ALPHA4
127  INTERNAL_L8 = 0x8040, //GL_LUMINANCE8
128  INTERNAL_A8 = 0x803C, //GL_ALPHA8
129  INTERNAL_LA8 = 0x8045, //GL_LUMINANCE8_ALPHA8
130  INTERNAL_L16 = 0x8042, //GL_LUMINANCE16
131  INTERNAL_A16 = 0x803E, //GL_ALPHA16
132  INTERNAL_LA16 = 0x8048, //GL_LUMINANCE16_ALPHA16
133 
134  // Depth formats
135  INTERNAL_D16 = 0x81A5, //GL_DEPTH_COMPONENT16
136  INTERNAL_D24 = 0x81A6, //GL_DEPTH_COMPONENT24
137  INTERNAL_D24S8 = 0x88F0, //GL_DEPTH24_STENCIL8
138  INTERNAL_D32 = 0x81A7, //GL_DEPTH_COMPONENT32
139  INTERNAL_D32F = 0x8CAC, //GL_DEPTH_COMPONENT32F
140  INTERNAL_D32FS8X24 = 0x8CAD, //GL_DEPTH32F_STENCIL8
141 
142  // Compressed formats
143  INTERNAL_RGB_DXT1 = 0x83F0, //GL_COMPRESSED_RGB_S3TC_DXT1_EXT
144  INTERNAL_RGBA_DXT1 = 0x83F1, //GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
145  INTERNAL_RGBA_DXT3 = 0x83F2, //GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
146  INTERNAL_RGBA_DXT5 = 0x83F3, //GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
147  INTERNAL_R_ATI1N_UNORM = 0x8DBB, //GL_COMPRESSED_RED_RGTC1
148  INTERNAL_R_ATI1N_SNORM = 0x8DBC, //GL_COMPRESSED_SIGNED_RED_RGTC1
149  INTERNAL_RG_ATI2N_UNORM = 0x8DBD, //GL_COMPRESSED_RG_RGTC2
150  INTERNAL_RG_ATI2N_SNORM = 0x8DBE, //GL_COMPRESSED_SIGNED_RG_RGTC2
151  INTERNAL_RGB_BP_UNSIGNED_FLOAT = 0x8E8F, //GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT
152  INTERNAL_RGB_BP_SIGNED_FLOAT = 0x8E8E, //GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT
153  INTERNAL_RGB_BP_UNORM = 0x8E8C, //GL_COMPRESSED_RGBA_BPTC_UNORM
154  INTERNAL_RGB_PVRTC_4BPPV1 = 0x8C00, //GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG
155  INTERNAL_RGB_PVRTC_2BPPV1 = 0x8C01, //GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG
156  INTERNAL_RGBA_PVRTC_4BPPV1 = 0x8C02, //GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
157  INTERNAL_RGBA_PVRTC_2BPPV1 = 0x8C03, //GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
158  INTERNAL_RGBA_PVRTC_4BPPV2 = 0x9137, //GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG
159  INTERNAL_RGBA_PVRTC_2BPPV2 = 0x9138, //GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG
160  INTERNAL_ATC_RGB = 0x8C92, //GL_ATC_RGB_AMD
161  INTERNAL_ATC_RGBA_EXPLICIT_ALPHA = 0x8C93, //GL_ATC_RGBA_EXPLICIT_ALPHA_AMD
162  INTERNAL_ATC_RGBA_INTERPOLATED_ALPHA = 0x87EE, //GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD
163 
164  INTERNAL_RGB_ETC = 0x8D64, //GL_COMPRESSED_RGB8_ETC1
165  INTERNAL_RGB_ETC2 = 0x9274, //GL_COMPRESSED_RGB8_ETC2
166  INTERNAL_RGBA_PUNCHTHROUGH_ETC2 = 0x9276, //GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
167  INTERNAL_RGBA_ETC2 = 0x9278, //GL_COMPRESSED_RGBA8_ETC2_EAC
168  INTERNAL_R11_EAC = 0x9270, //GL_COMPRESSED_R11_EAC
169  INTERNAL_SIGNED_R11_EAC = 0x9271, //GL_COMPRESSED_SIGNED_R11_EAC
170  INTERNAL_RG11_EAC = 0x9272, //GL_COMPRESSED_RG11_EAC
171  INTERNAL_SIGNED_RG11_EAC = 0x9273, //GL_COMPRESSED_SIGNED_RG11_EAC
172 
173  INTERNAL_RGBA_ASTC_4x4 = 0x93B0, //GL_COMPRESSED_RGBA_ASTC_4x4_KHR
174  INTERNAL_RGBA_ASTC_5x4 = 0x93B1, //GL_COMPRESSED_RGBA_ASTC_5x4_KHR
175  INTERNAL_RGBA_ASTC_5x5 = 0x93B2, //GL_COMPRESSED_RGBA_ASTC_5x5_KHR
176  INTERNAL_RGBA_ASTC_6x5 = 0x93B3, //GL_COMPRESSED_RGBA_ASTC_6x5_KHR
177  INTERNAL_RGBA_ASTC_6x6 = 0x93B4, //GL_COMPRESSED_RGBA_ASTC_6x6_KHR
178  INTERNAL_RGBA_ASTC_8x5 = 0x93B5, //GL_COMPRESSED_RGBA_ASTC_8x5_KHR
179  INTERNAL_RGBA_ASTC_8x6 = 0x93B6, //GL_COMPRESSED_RGBA_ASTC_8x6_KHR
180  INTERNAL_RGBA_ASTC_8x8 = 0x93B7, //GL_COMPRESSED_RGBA_ASTC_8x8_KHR
181  INTERNAL_RGBA_ASTC_10x5 = 0x93B8, //GL_COMPRESSED_RGBA_ASTC_10x5_KHR
182  INTERNAL_RGBA_ASTC_10x6 = 0x93B9, //GL_COMPRESSED_RGBA_ASTC_10x6_KHR
183  INTERNAL_RGBA_ASTC_10x8 = 0x93BA, //GL_COMPRESSED_RGBA_ASTC_10x8_KHR
184  INTERNAL_RGBA_ASTC_10x10 = 0x93BB, //GL_COMPRESSED_RGBA_ASTC_10x10_KHR
185  INTERNAL_RGBA_ASTC_12x10 = 0x93BC, //GL_COMPRESSED_RGBA_ASTC_12x10_KHR
186  INTERNAL_RGBA_ASTC_12x12 = 0x93BD, //GL_COMPRESSED_RGBA_ASTC_12x12_KHR
187 
188  // sRGB formats
189  INTERNAL_SRGB_DXT1 = 0x8C4C, //GL_COMPRESSED_SRGB_S3TC_DXT1_EXT
190  INTERNAL_SRGB_ALPHA_DXT1 = 0x8C4C, //GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
191  INTERNAL_SRGB_ALPHA_DXT3 = 0x8C4E, //GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
192  INTERNAL_SRGB_ALPHA_DXT5 = 0x8C4F, //GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
193  INTERNAL_SRGB_BP_UNORM = 0x8E8D, //GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM
194  INTERNAL_SRGB_PVRTC_2BPPV1 = 0x8A54, //GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT
195  INTERNAL_SRGB_PVRTC_4BPPV1 = 0x8A55, //GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT
196  INTERNAL_SRGB_ALPHA_PVRTC_2BPPV1 = 0x8A56, //GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT
197  INTERNAL_SRGB_ALPHA_PVRTC_4BPPV1 = 0x8A57, //GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT
198  INTERNAL_SRGB_ALPHA_PVRTC_2BPPV2 = 0x93F0, //COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV2_IMG
199  INTERNAL_SRGB_ALPHA_PVRTC_4BPPV2 = 0x93F1, //GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV2_IMG
200  INTERNAL_SRGB8_ETC2 = 0x9275, //GL_COMPRESSED_SRGB8_ETC2
201  INTERNAL_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 = 0x9277, //GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
202  INTERNAL_SRGB8_ALPHA8_ETC2_EAC = 0x9279, //GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
203  INTERNAL_SRGB8_ALPHA8_ASTC_4x4 = 0x93D0, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR
204  INTERNAL_SRGB8_ALPHA8_ASTC_5x4 = 0x93D1, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR
205  INTERNAL_SRGB8_ALPHA8_ASTC_5x5 = 0x93D2, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR
206  INTERNAL_SRGB8_ALPHA8_ASTC_6x5 = 0x93D3, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR
207  INTERNAL_SRGB8_ALPHA8_ASTC_6x6 = 0x93D4, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR
208  INTERNAL_SRGB8_ALPHA8_ASTC_8x5 = 0x93D5, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR
209  INTERNAL_SRGB8_ALPHA8_ASTC_8x6 = 0x93D6, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR
210  INTERNAL_SRGB8_ALPHA8_ASTC_8x8 = 0x93D7, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR
211  INTERNAL_SRGB8_ALPHA8_ASTC_10x5 = 0x93D8, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR
212  INTERNAL_SRGB8_ALPHA8_ASTC_10x6 = 0x93D9, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR
213  INTERNAL_SRGB8_ALPHA8_ASTC_10x8 = 0x93DA, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR
214  INTERNAL_SRGB8_ALPHA8_ASTC_10x10 = 0x93DB, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR
215  INTERNAL_SRGB8_ALPHA8_ASTC_12x10 = 0x93DC, //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR
216  INTERNAL_SRGB8_ALPHA8_ASTC_12x12 = 0x93DD //GL_COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR
217  };
218 
219  enum externalFormat
220  {
221  EXTERNAL_NONE = 0, //GL_NONE
222  EXTERNAL_RED = 0x1903, //GL_RED
223  EXTERNAL_RG = 0x8227, //GL_RG
224  EXTERNAL_RGB= 0x1907, //GL_RGB
225  EXTERNAL_BGR = 0x80E0, //GL_BGR
226  EXTERNAL_RGBA = 0x1908, //GL_RGBA
227  EXTERNAL_BGRA = 0x80E1, //GL_BGRA
228  EXTERNAL_RED_INTEGER = 0x8D94, //GL_RED_INTEGER
229  EXTERNAL_RG_INTEGER = 0x8228, //GL_RG_INTEGER
230  EXTERNAL_RGB_INTEGER = 0x8D98, //GL_RGB_INTEGER
231  EXTERNAL_BGR_INTEGER = 0x8D9A, //GL_BGR_INTEGER
232  EXTERNAL_RGBA_INTEGER = 0x8D99, //GL_RGBA_INTEGER
233  EXTERNAL_BGRA_INTEGER = 0x8D9B, //GL_BGRA_INTEGER
234  EXTERNAL_DEPTH = 0x1902, //GL_DEPTH_COMPONENT
235  EXTERNAL_DEPTH_STENCIL = 0x84F9, //GL_DEPTH_STENCIL
236 
237  EXTERNAL_LUMINANCE = 0x1909, //GL_LUMINANCE
238  EXTERNAL_ALPHA = 0x1906, //GL_ALPHA
239  EXTERNAL_LUMINANCE_ALPHA = 0x190A, //GL_LUMINANCE_ALPHA
240  };
241 
242  enum typeFormat
243  {
244  TYPE_NONE = 0, //GL_NONE
245  TYPE_I8 = 0x1400, //GL_BYTE
246  TYPE_U8 = 0x1401, //GL_UNSIGNED_BYTE
247  TYPE_I16 = 0x1402, //GL_SHORT
248  TYPE_U16 = 0x1403, //GL_UNSIGNED_SHORT
249  TYPE_I32 = 0x1404, //GL_INT
250  TYPE_U32 = 0x1405, //GL_UNSIGNED_INT
251  TYPE_F16 = 0x140B, //GL_HALF_FLOAT
252  TYPE_F32 = 0x1406, //GL_FLOAT
253  TYPE_UINT32_RGB9_E5 = 0x8C3E, //GL_UNSIGNED_INT_5_9_9_9_REV
254  TYPE_UINT32_RG11B10F = 0x8C3B, //GL_UNSIGNED_INT_10F_11F_11F_REV
255  TYPE_UINT8_RG3B2 = 0x8032, //GL_UNSIGNED_BYTE_3_3_2
256  TYPE_UINT8_RG3B2_REV = 0x8362, //GL_UNSIGNED_BYTE_2_3_3_REV
257  TYPE_UINT16_RGB5A1 = 0x8034, //GL_UNSIGNED_SHORT_5_5_5_1
258  TYPE_UINT16_RGB5A1_REV = 0x8366, //GL_UNSIGNED_SHORT_1_5_5_5_REV
259  TYPE_UINT16_R5G6B5 = 0x8363, //GL_UNSIGNED_SHORT_5_6_5
260  TYPE_UINT16_R5G6B5_REV = 0x8364, //GL_UNSIGNED_SHORT_5_6_5_REV
261  TYPE_UINT16_RGBA4 = 0x8033, //GL_UNSIGNED_SHORT_4_4_4_4
262  TYPE_UINT16_RGBA4_REV = 0x8365, //GL_UNSIGNED_SHORT_4_4_4_4_REV
263  TYPE_UINT32_RGB10A2 = 0x8036, //GL_UNSIGNED_INT_10_10_10_2
264  TYPE_UINT32_RGB10A2_REV = 0x8368 //GL_UNSIGNED_INT_2_10_10_10_REV
265  };
266 
267  enum target
268  {
269  TARGET_1D = 0x0DE0,
270  TARGET_1D_ARRAY = 0x8C18,
271  TARGET_2D = 0x0DE1,
272  TARGET_2D_ARRAY = 0x8C1A,
273  TARGET_3D = 0x806F,
274  TARGET_CUBE = 0x8513,
275  TARGET_CUBE_ARRAY = 0x9009
276  };
277 
278  enum swizzle
279  {
280  SWIZZLE_RED = 0x1903, //GL_RED
281  SWIZZLE_GREEN = 0x1904, //GL_GREEN
282  SWIZZLE_BLUE = 0x1905, //GL_BLUE
283  SWIZZLE_ALPHA = 0x1906, //GL_ALPHA
284  SWIZZLE_ZERO = 0x0000, //GL_ZERO
285  SWIZZLE_ONE = 0x0001, //GL_ONE
286  };
287 
288  struct format
289  {
290  internalFormat Internal;
291  externalFormat External;
292  typeFormat Type;
293  swizzle Swizzle[4];
294  };
295 
296  gl();
297 
298  target const & translate(gli::target Target) const;
299  format const & translate(gli::format Format) const;
300  gli::format find(internalFormat internalFormat, externalFormat externalFormat, typeFormat type);
301 
302  private:
303  std::array<format, FORMAT_COUNT> Translation;
304  };
305 }//namespace gli
306 
307 #include "./core/gl.inl"
OpenGL Image (gli.g-truc.net)
OpenGL Image (gli.g-truc.net)