glcore/
glcore.rs

1
2#![allow(dead_code)]
3#![allow(non_snake_case)]
4#![allow(non_camel_case_types)]
5#![allow(non_upper_case_globals)]
6#![allow(unpredictable_function_pointer_comparisons)]
7use std::{
8	mem::transmute,
9	ffi::{c_void, CStr},
10	fmt::{self, Debug, Formatter},
11	panic::catch_unwind,
12	ptr::null,
13};
14
15#[derive(Debug, Clone, Copy)]
16pub enum GLCoreError {
17	NullFunctionPointer(&'static str),
18	InvalidEnum(&'static str),
19	InvalidValue(&'static str),
20	InvalidOperation(&'static str),
21	InvalidFramebufferOperation(&'static str),
22	OutOfMemory(&'static str),
23	StackUnderflow(&'static str),
24	StackOverflow(&'static str),
25	UnknownError((GLenum, &'static str)),
26}
27
28pub type Result<T> = std::result::Result<T, GLCoreError>;
29pub fn to_result<T>(funcname: &'static str, ret: T, gl_error: GLenum) -> Result<T> {
30	match gl_error {
31		GL_NO_ERROR => Ok(ret),
32		GL_INVALID_ENUM => Err(GLCoreError::InvalidEnum(funcname)),
33		GL_INVALID_VALUE => Err(GLCoreError::InvalidValue(funcname)),
34		GL_INVALID_OPERATION => Err(GLCoreError::InvalidOperation(funcname)),
35		GL_INVALID_FRAMEBUFFER_OPERATION => Err(GLCoreError::InvalidFramebufferOperation(funcname)),
36		GL_OUT_OF_MEMORY => Err(GLCoreError::OutOfMemory(funcname)),
37		GL_STACK_UNDERFLOW => Err(GLCoreError::StackUnderflow(funcname)),
38		GL_STACK_OVERFLOW => Err(GLCoreError::StackOverflow(funcname)),
39		_ => Err(GLCoreError::UnknownError((gl_error, funcname))),
40	}
41}
42
43pub fn process_catch<T>(funcname: &'static str, ret: std::thread::Result<T>) -> Result<T> {
44	match ret {
45		Ok(ret) => Ok(ret),
46		Err(_) => {
47			Err(GLCoreError::NullFunctionPointer(funcname))
48		}
49	}
50}
51
52pub type khronos_float_t = f32;
53pub type khronos_ssize_t = usize;
54pub type khronos_intptr_t = usize;
55pub type khronos_int16_t = i16;
56pub type khronos_int8_t = i8;
57pub type khronos_uint16_t = u16;
58pub type khronos_int64_t = i64;
59pub type khronos_uint64_t = u64;
60
61pub type GLDEBUGPROC = extern "system" fn(GLenum, GLenum, GLuint, GLenum, GLsizei, *const GLchar, *const c_void);
62
63pub type GLvoid = c_void;
64pub type GLenum = u32;
65pub type GLbitfield = u32;
66pub type GLuint = u32;
67pub type GLfloat = f32;
68pub type GLint = i32;
69pub type GLsizei = i32;
70pub type GLdouble = f64;
71pub type GLboolean = u8;
72pub type GLubyte = u8;
73pub type GLshort = i16;
74pub type GLbyte = i8;
75pub type GLushort = u16;
76type PFNGLCULLFACEPROC = extern "system" fn(GLenum);
77type PFNGLFRONTFACEPROC = extern "system" fn(GLenum);
78type PFNGLHINTPROC = extern "system" fn(GLenum, GLenum);
79type PFNGLLINEWIDTHPROC = extern "system" fn(GLfloat);
80type PFNGLPOINTSIZEPROC = extern "system" fn(GLfloat);
81type PFNGLPOLYGONMODEPROC = extern "system" fn(GLenum, GLenum);
82type PFNGLSCISSORPROC = extern "system" fn(GLint, GLint, GLsizei, GLsizei);
83type PFNGLTEXPARAMETERFPROC = extern "system" fn(GLenum, GLenum, GLfloat);
84type PFNGLTEXPARAMETERFVPROC = extern "system" fn(GLenum, GLenum, *const GLfloat);
85type PFNGLTEXPARAMETERIPROC = extern "system" fn(GLenum, GLenum, GLint);
86type PFNGLTEXPARAMETERIVPROC = extern "system" fn(GLenum, GLenum, *const GLint);
87type PFNGLTEXIMAGE1DPROC = extern "system" fn(GLenum, GLint, GLint, GLsizei, GLint, GLenum, GLenum, *const c_void);
88type PFNGLTEXIMAGE2DPROC = extern "system" fn(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, *const c_void);
89type PFNGLDRAWBUFFERPROC = extern "system" fn(GLenum);
90type PFNGLCLEARPROC = extern "system" fn(GLbitfield);
91type PFNGLCLEARCOLORPROC = extern "system" fn(GLfloat, GLfloat, GLfloat, GLfloat);
92type PFNGLCLEARSTENCILPROC = extern "system" fn(GLint);
93type PFNGLCLEARDEPTHPROC = extern "system" fn(GLdouble);
94type PFNGLSTENCILMASKPROC = extern "system" fn(GLuint);
95type PFNGLCOLORMASKPROC = extern "system" fn(GLboolean, GLboolean, GLboolean, GLboolean);
96type PFNGLDEPTHMASKPROC = extern "system" fn(GLboolean);
97type PFNGLDISABLEPROC = extern "system" fn(GLenum);
98type PFNGLENABLEPROC = extern "system" fn(GLenum);
99type PFNGLFINISHPROC = extern "system" fn();
100type PFNGLFLUSHPROC = extern "system" fn();
101type PFNGLBLENDFUNCPROC = extern "system" fn(GLenum, GLenum);
102type PFNGLLOGICOPPROC = extern "system" fn(GLenum);
103type PFNGLSTENCILFUNCPROC = extern "system" fn(GLenum, GLint, GLuint);
104type PFNGLSTENCILOPPROC = extern "system" fn(GLenum, GLenum, GLenum);
105type PFNGLDEPTHFUNCPROC = extern "system" fn(GLenum);
106type PFNGLPIXELSTOREFPROC = extern "system" fn(GLenum, GLfloat);
107type PFNGLPIXELSTOREIPROC = extern "system" fn(GLenum, GLint);
108type PFNGLREADBUFFERPROC = extern "system" fn(GLenum);
109type PFNGLREADPIXELSPROC = extern "system" fn(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, *mut c_void);
110type PFNGLGETBOOLEANVPROC = extern "system" fn(GLenum, *mut GLboolean);
111type PFNGLGETDOUBLEVPROC = extern "system" fn(GLenum, *mut GLdouble);
112type PFNGLGETERRORPROC = extern "system" fn() -> GLenum;
113type PFNGLGETFLOATVPROC = extern "system" fn(GLenum, *mut GLfloat);
114type PFNGLGETINTEGERVPROC = extern "system" fn(GLenum, *mut GLint);
115type PFNGLGETSTRINGPROC = extern "system" fn(GLenum) -> *const GLubyte;
116type PFNGLGETTEXIMAGEPROC = extern "system" fn(GLenum, GLint, GLenum, GLenum, *mut c_void);
117type PFNGLGETTEXPARAMETERFVPROC = extern "system" fn(GLenum, GLenum, *mut GLfloat);
118type PFNGLGETTEXPARAMETERIVPROC = extern "system" fn(GLenum, GLenum, *mut GLint);
119type PFNGLGETTEXLEVELPARAMETERFVPROC = extern "system" fn(GLenum, GLint, GLenum, *mut GLfloat);
120type PFNGLGETTEXLEVELPARAMETERIVPROC = extern "system" fn(GLenum, GLint, GLenum, *mut GLint);
121type PFNGLISENABLEDPROC = extern "system" fn(GLenum) -> GLboolean;
122type PFNGLDEPTHRANGEPROC = extern "system" fn(GLdouble, GLdouble);
123type PFNGLVIEWPORTPROC = extern "system" fn(GLint, GLint, GLsizei, GLsizei);
124extern "system" fn dummy_pfnglcullfaceproc (_: GLenum) {
125	panic!("OpenGL function pointer `glCullFace()` is null.")
126}
127extern "system" fn dummy_pfnglfrontfaceproc (_: GLenum) {
128	panic!("OpenGL function pointer `glFrontFace()` is null.")
129}
130extern "system" fn dummy_pfnglhintproc (_: GLenum, _: GLenum) {
131	panic!("OpenGL function pointer `glHint()` is null.")
132}
133extern "system" fn dummy_pfngllinewidthproc (_: GLfloat) {
134	panic!("OpenGL function pointer `glLineWidth()` is null.")
135}
136extern "system" fn dummy_pfnglpointsizeproc (_: GLfloat) {
137	panic!("OpenGL function pointer `glPointSize()` is null.")
138}
139extern "system" fn dummy_pfnglpolygonmodeproc (_: GLenum, _: GLenum) {
140	panic!("OpenGL function pointer `glPolygonMode()` is null.")
141}
142extern "system" fn dummy_pfnglscissorproc (_: GLint, _: GLint, _: GLsizei, _: GLsizei) {
143	panic!("OpenGL function pointer `glScissor()` is null.")
144}
145extern "system" fn dummy_pfngltexparameterfproc (_: GLenum, _: GLenum, _: GLfloat) {
146	panic!("OpenGL function pointer `glTexParameterf()` is null.")
147}
148extern "system" fn dummy_pfngltexparameterfvproc (_: GLenum, _: GLenum, _: *const GLfloat) {
149	panic!("OpenGL function pointer `glTexParameterfv()` is null.")
150}
151extern "system" fn dummy_pfngltexparameteriproc (_: GLenum, _: GLenum, _: GLint) {
152	panic!("OpenGL function pointer `glTexParameteri()` is null.")
153}
154extern "system" fn dummy_pfngltexparameterivproc (_: GLenum, _: GLenum, _: *const GLint) {
155	panic!("OpenGL function pointer `glTexParameteriv()` is null.")
156}
157extern "system" fn dummy_pfnglteximage1dproc (_: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLint, _: GLenum, _: GLenum, _: *const c_void) {
158	panic!("OpenGL function pointer `glTexImage1D()` is null.")
159}
160extern "system" fn dummy_pfnglteximage2dproc (_: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLint, _: GLenum, _: GLenum, _: *const c_void) {
161	panic!("OpenGL function pointer `glTexImage2D()` is null.")
162}
163extern "system" fn dummy_pfngldrawbufferproc (_: GLenum) {
164	panic!("OpenGL function pointer `glDrawBuffer()` is null.")
165}
166extern "system" fn dummy_pfnglclearproc (_: GLbitfield) {
167	panic!("OpenGL function pointer `glClear()` is null.")
168}
169extern "system" fn dummy_pfnglclearcolorproc (_: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat) {
170	panic!("OpenGL function pointer `glClearColor()` is null.")
171}
172extern "system" fn dummy_pfnglclearstencilproc (_: GLint) {
173	panic!("OpenGL function pointer `glClearStencil()` is null.")
174}
175extern "system" fn dummy_pfnglcleardepthproc (_: GLdouble) {
176	panic!("OpenGL function pointer `glClearDepth()` is null.")
177}
178extern "system" fn dummy_pfnglstencilmaskproc (_: GLuint) {
179	panic!("OpenGL function pointer `glStencilMask()` is null.")
180}
181extern "system" fn dummy_pfnglcolormaskproc (_: GLboolean, _: GLboolean, _: GLboolean, _: GLboolean) {
182	panic!("OpenGL function pointer `glColorMask()` is null.")
183}
184extern "system" fn dummy_pfngldepthmaskproc (_: GLboolean) {
185	panic!("OpenGL function pointer `glDepthMask()` is null.")
186}
187extern "system" fn dummy_pfngldisableproc (_: GLenum) {
188	panic!("OpenGL function pointer `glDisable()` is null.")
189}
190extern "system" fn dummy_pfnglenableproc (_: GLenum) {
191	panic!("OpenGL function pointer `glEnable()` is null.")
192}
193extern "system" fn dummy_pfnglfinishproc () {
194	panic!("OpenGL function pointer `glFinish()` is null.")
195}
196extern "system" fn dummy_pfnglflushproc () {
197	panic!("OpenGL function pointer `glFlush()` is null.")
198}
199extern "system" fn dummy_pfnglblendfuncproc (_: GLenum, _: GLenum) {
200	panic!("OpenGL function pointer `glBlendFunc()` is null.")
201}
202extern "system" fn dummy_pfngllogicopproc (_: GLenum) {
203	panic!("OpenGL function pointer `glLogicOp()` is null.")
204}
205extern "system" fn dummy_pfnglstencilfuncproc (_: GLenum, _: GLint, _: GLuint) {
206	panic!("OpenGL function pointer `glStencilFunc()` is null.")
207}
208extern "system" fn dummy_pfnglstencilopproc (_: GLenum, _: GLenum, _: GLenum) {
209	panic!("OpenGL function pointer `glStencilOp()` is null.")
210}
211extern "system" fn dummy_pfngldepthfuncproc (_: GLenum) {
212	panic!("OpenGL function pointer `glDepthFunc()` is null.")
213}
214extern "system" fn dummy_pfnglpixelstorefproc (_: GLenum, _: GLfloat) {
215	panic!("OpenGL function pointer `glPixelStoref()` is null.")
216}
217extern "system" fn dummy_pfnglpixelstoreiproc (_: GLenum, _: GLint) {
218	panic!("OpenGL function pointer `glPixelStorei()` is null.")
219}
220extern "system" fn dummy_pfnglreadbufferproc (_: GLenum) {
221	panic!("OpenGL function pointer `glReadBuffer()` is null.")
222}
223extern "system" fn dummy_pfnglreadpixelsproc (_: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: *mut c_void) {
224	panic!("OpenGL function pointer `glReadPixels()` is null.")
225}
226extern "system" fn dummy_pfnglgetbooleanvproc (_: GLenum, _: *mut GLboolean) {
227	panic!("OpenGL function pointer `glGetBooleanv()` is null.")
228}
229extern "system" fn dummy_pfnglgetdoublevproc (_: GLenum, _: *mut GLdouble) {
230	panic!("OpenGL function pointer `glGetDoublev()` is null.")
231}
232extern "system" fn dummy_pfnglgeterrorproc () -> GLenum {
233	panic!("OpenGL function pointer `glGetError()` is null.")
234}
235extern "system" fn dummy_pfnglgetfloatvproc (_: GLenum, _: *mut GLfloat) {
236	panic!("OpenGL function pointer `glGetFloatv()` is null.")
237}
238extern "system" fn dummy_pfnglgetintegervproc (_: GLenum, _: *mut GLint) {
239	panic!("OpenGL function pointer `glGetIntegerv()` is null.")
240}
241extern "system" fn dummy_pfnglgetstringproc (_: GLenum) -> *const GLubyte {
242	panic!("OpenGL function pointer `glGetString()` is null.")
243}
244extern "system" fn dummy_pfnglgetteximageproc (_: GLenum, _: GLint, _: GLenum, _: GLenum, _: *mut c_void) {
245	panic!("OpenGL function pointer `glGetTexImage()` is null.")
246}
247extern "system" fn dummy_pfnglgettexparameterfvproc (_: GLenum, _: GLenum, _: *mut GLfloat) {
248	panic!("OpenGL function pointer `glGetTexParameterfv()` is null.")
249}
250extern "system" fn dummy_pfnglgettexparameterivproc (_: GLenum, _: GLenum, _: *mut GLint) {
251	panic!("OpenGL function pointer `glGetTexParameteriv()` is null.")
252}
253extern "system" fn dummy_pfnglgettexlevelparameterfvproc (_: GLenum, _: GLint, _: GLenum, _: *mut GLfloat) {
254	panic!("OpenGL function pointer `glGetTexLevelParameterfv()` is null.")
255}
256extern "system" fn dummy_pfnglgettexlevelparameterivproc (_: GLenum, _: GLint, _: GLenum, _: *mut GLint) {
257	panic!("OpenGL function pointer `glGetTexLevelParameteriv()` is null.")
258}
259extern "system" fn dummy_pfnglisenabledproc (_: GLenum) -> GLboolean {
260	panic!("OpenGL function pointer `glIsEnabled()` is null.")
261}
262extern "system" fn dummy_pfngldepthrangeproc (_: GLdouble, _: GLdouble) {
263	panic!("OpenGL function pointer `glDepthRange()` is null.")
264}
265extern "system" fn dummy_pfnglviewportproc (_: GLint, _: GLint, _: GLsizei, _: GLsizei) {
266	panic!("OpenGL function pointer `glViewport()` is null.")
267}
268pub const GL_DEPTH_BUFFER_BIT: GLbitfield = 0x00000100;
269pub const GL_STENCIL_BUFFER_BIT: GLbitfield = 0x00000400;
270pub const GL_COLOR_BUFFER_BIT: GLbitfield = 0x00004000;
271pub const GL_FALSE: GLenum = 0;
272pub const GL_TRUE: GLenum = 1;
273pub const GL_POINTS: GLenum = 0x0000;
274pub const GL_LINES: GLenum = 0x0001;
275pub const GL_LINE_LOOP: GLenum = 0x0002;
276pub const GL_LINE_STRIP: GLenum = 0x0003;
277pub const GL_TRIANGLES: GLenum = 0x0004;
278pub const GL_TRIANGLE_STRIP: GLenum = 0x0005;
279pub const GL_TRIANGLE_FAN: GLenum = 0x0006;
280pub const GL_QUADS: GLenum = 0x0007;
281pub const GL_NEVER: GLenum = 0x0200;
282pub const GL_LESS: GLenum = 0x0201;
283pub const GL_EQUAL: GLenum = 0x0202;
284pub const GL_LEQUAL: GLenum = 0x0203;
285pub const GL_GREATER: GLenum = 0x0204;
286pub const GL_NOTEQUAL: GLenum = 0x0205;
287pub const GL_GEQUAL: GLenum = 0x0206;
288pub const GL_ALWAYS: GLenum = 0x0207;
289pub const GL_ZERO: GLenum = 0;
290pub const GL_ONE: GLenum = 1;
291pub const GL_SRC_COLOR: GLenum = 0x0300;
292pub const GL_ONE_MINUS_SRC_COLOR: GLenum = 0x0301;
293pub const GL_SRC_ALPHA: GLenum = 0x0302;
294pub const GL_ONE_MINUS_SRC_ALPHA: GLenum = 0x0303;
295pub const GL_DST_ALPHA: GLenum = 0x0304;
296pub const GL_ONE_MINUS_DST_ALPHA: GLenum = 0x0305;
297pub const GL_DST_COLOR: GLenum = 0x0306;
298pub const GL_ONE_MINUS_DST_COLOR: GLenum = 0x0307;
299pub const GL_SRC_ALPHA_SATURATE: GLenum = 0x0308;
300pub const GL_NONE: GLenum = 0;
301pub const GL_FRONT_LEFT: GLenum = 0x0400;
302pub const GL_FRONT_RIGHT: GLenum = 0x0401;
303pub const GL_BACK_LEFT: GLenum = 0x0402;
304pub const GL_BACK_RIGHT: GLenum = 0x0403;
305pub const GL_FRONT: GLenum = 0x0404;
306pub const GL_BACK: GLenum = 0x0405;
307pub const GL_LEFT: GLenum = 0x0406;
308pub const GL_RIGHT: GLenum = 0x0407;
309pub const GL_FRONT_AND_BACK: GLenum = 0x0408;
310pub const GL_NO_ERROR: GLenum = 0;
311pub const GL_INVALID_ENUM: GLenum = 0x0500;
312pub const GL_INVALID_VALUE: GLenum = 0x0501;
313pub const GL_INVALID_OPERATION: GLenum = 0x0502;
314pub const GL_OUT_OF_MEMORY: GLenum = 0x0505;
315pub const GL_CW: GLenum = 0x0900;
316pub const GL_CCW: GLenum = 0x0901;
317pub const GL_POINT_SIZE: GLenum = 0x0B11;
318pub const GL_POINT_SIZE_RANGE: GLenum = 0x0B12;
319pub const GL_POINT_SIZE_GRANULARITY: GLenum = 0x0B13;
320pub const GL_LINE_SMOOTH: GLenum = 0x0B20;
321pub const GL_LINE_WIDTH: GLenum = 0x0B21;
322pub const GL_LINE_WIDTH_RANGE: GLenum = 0x0B22;
323pub const GL_LINE_WIDTH_GRANULARITY: GLenum = 0x0B23;
324pub const GL_POLYGON_MODE: GLenum = 0x0B40;
325pub const GL_POLYGON_SMOOTH: GLenum = 0x0B41;
326pub const GL_CULL_FACE: GLenum = 0x0B44;
327pub const GL_CULL_FACE_MODE: GLenum = 0x0B45;
328pub const GL_FRONT_FACE: GLenum = 0x0B46;
329pub const GL_DEPTH_RANGE: GLenum = 0x0B70;
330pub const GL_DEPTH_TEST: GLenum = 0x0B71;
331pub const GL_DEPTH_WRITEMASK: GLenum = 0x0B72;
332pub const GL_DEPTH_CLEAR_VALUE: GLenum = 0x0B73;
333pub const GL_DEPTH_FUNC: GLenum = 0x0B74;
334pub const GL_STENCIL_TEST: GLenum = 0x0B90;
335pub const GL_STENCIL_CLEAR_VALUE: GLenum = 0x0B91;
336pub const GL_STENCIL_FUNC: GLenum = 0x0B92;
337pub const GL_STENCIL_VALUE_MASK: GLenum = 0x0B93;
338pub const GL_STENCIL_FAIL: GLenum = 0x0B94;
339pub const GL_STENCIL_PASS_DEPTH_FAIL: GLenum = 0x0B95;
340pub const GL_STENCIL_PASS_DEPTH_PASS: GLenum = 0x0B96;
341pub const GL_STENCIL_REF: GLenum = 0x0B97;
342pub const GL_STENCIL_WRITEMASK: GLenum = 0x0B98;
343pub const GL_VIEWPORT: GLenum = 0x0BA2;
344pub const GL_DITHER: GLenum = 0x0BD0;
345pub const GL_BLEND_DST: GLenum = 0x0BE0;
346pub const GL_BLEND_SRC: GLenum = 0x0BE1;
347pub const GL_BLEND: GLenum = 0x0BE2;
348pub const GL_LOGIC_OP_MODE: GLenum = 0x0BF0;
349pub const GL_DRAW_BUFFER: GLenum = 0x0C01;
350pub const GL_READ_BUFFER: GLenum = 0x0C02;
351pub const GL_SCISSOR_BOX: GLenum = 0x0C10;
352pub const GL_SCISSOR_TEST: GLenum = 0x0C11;
353pub const GL_COLOR_CLEAR_VALUE: GLenum = 0x0C22;
354pub const GL_COLOR_WRITEMASK: GLenum = 0x0C23;
355pub const GL_DOUBLEBUFFER: GLenum = 0x0C32;
356pub const GL_STEREO: GLenum = 0x0C33;
357pub const GL_LINE_SMOOTH_HINT: GLenum = 0x0C52;
358pub const GL_POLYGON_SMOOTH_HINT: GLenum = 0x0C53;
359pub const GL_UNPACK_SWAP_BYTES: GLenum = 0x0CF0;
360pub const GL_UNPACK_LSB_FIRST: GLenum = 0x0CF1;
361pub const GL_UNPACK_ROW_LENGTH: GLenum = 0x0CF2;
362pub const GL_UNPACK_SKIP_ROWS: GLenum = 0x0CF3;
363pub const GL_UNPACK_SKIP_PIXELS: GLenum = 0x0CF4;
364pub const GL_UNPACK_ALIGNMENT: GLenum = 0x0CF5;
365pub const GL_PACK_SWAP_BYTES: GLenum = 0x0D00;
366pub const GL_PACK_LSB_FIRST: GLenum = 0x0D01;
367pub const GL_PACK_ROW_LENGTH: GLenum = 0x0D02;
368pub const GL_PACK_SKIP_ROWS: GLenum = 0x0D03;
369pub const GL_PACK_SKIP_PIXELS: GLenum = 0x0D04;
370pub const GL_PACK_ALIGNMENT: GLenum = 0x0D05;
371pub const GL_MAX_TEXTURE_SIZE: GLenum = 0x0D33;
372pub const GL_MAX_VIEWPORT_DIMS: GLenum = 0x0D3A;
373pub const GL_SUBPIXEL_BITS: GLenum = 0x0D50;
374pub const GL_TEXTURE_1D: GLenum = 0x0DE0;
375pub const GL_TEXTURE_2D: GLenum = 0x0DE1;
376pub const GL_TEXTURE_WIDTH: GLenum = 0x1000;
377pub const GL_TEXTURE_HEIGHT: GLenum = 0x1001;
378pub const GL_TEXTURE_BORDER_COLOR: GLenum = 0x1004;
379pub const GL_DONT_CARE: GLenum = 0x1100;
380pub const GL_FASTEST: GLenum = 0x1101;
381pub const GL_NICEST: GLenum = 0x1102;
382pub const GL_BYTE: GLenum = 0x1400;
383pub const GL_UNSIGNED_BYTE: GLenum = 0x1401;
384pub const GL_SHORT: GLenum = 0x1402;
385pub const GL_UNSIGNED_SHORT: GLenum = 0x1403;
386pub const GL_INT: GLenum = 0x1404;
387pub const GL_UNSIGNED_INT: GLenum = 0x1405;
388pub const GL_FLOAT: GLenum = 0x1406;
389pub const GL_STACK_OVERFLOW: GLenum = 0x0503;
390pub const GL_STACK_UNDERFLOW: GLenum = 0x0504;
391pub const GL_CLEAR: GLenum = 0x1500;
392pub const GL_AND: GLenum = 0x1501;
393pub const GL_AND_REVERSE: GLenum = 0x1502;
394pub const GL_COPY: GLenum = 0x1503;
395pub const GL_AND_INVERTED: GLenum = 0x1504;
396pub const GL_NOOP: GLenum = 0x1505;
397pub const GL_XOR: GLenum = 0x1506;
398pub const GL_OR: GLenum = 0x1507;
399pub const GL_NOR: GLenum = 0x1508;
400pub const GL_EQUIV: GLenum = 0x1509;
401pub const GL_INVERT: GLenum = 0x150A;
402pub const GL_OR_REVERSE: GLenum = 0x150B;
403pub const GL_COPY_INVERTED: GLenum = 0x150C;
404pub const GL_OR_INVERTED: GLenum = 0x150D;
405pub const GL_NAND: GLenum = 0x150E;
406pub const GL_SET: GLenum = 0x150F;
407pub const GL_TEXTURE: GLenum = 0x1702;
408pub const GL_COLOR: GLenum = 0x1800;
409pub const GL_DEPTH: GLenum = 0x1801;
410pub const GL_STENCIL: GLenum = 0x1802;
411pub const GL_STENCIL_INDEX: GLenum = 0x1901;
412pub const GL_DEPTH_COMPONENT: GLenum = 0x1902;
413pub const GL_RED: GLenum = 0x1903;
414pub const GL_GREEN: GLenum = 0x1904;
415pub const GL_BLUE: GLenum = 0x1905;
416pub const GL_ALPHA: GLenum = 0x1906;
417pub const GL_RGB: GLenum = 0x1907;
418pub const GL_RGBA: GLenum = 0x1908;
419pub const GL_POINT: GLenum = 0x1B00;
420pub const GL_LINE: GLenum = 0x1B01;
421pub const GL_FILL: GLenum = 0x1B02;
422pub const GL_KEEP: GLenum = 0x1E00;
423pub const GL_REPLACE: GLenum = 0x1E01;
424pub const GL_INCR: GLenum = 0x1E02;
425pub const GL_DECR: GLenum = 0x1E03;
426pub const GL_VENDOR: GLenum = 0x1F00;
427pub const GL_RENDERER: GLenum = 0x1F01;
428pub const GL_VERSION: GLenum = 0x1F02;
429pub const GL_EXTENSIONS: GLenum = 0x1F03;
430pub const GL_NEAREST: GLint = 0x2600;
431pub const GL_LINEAR: GLint = 0x2601;
432pub const GL_NEAREST_MIPMAP_NEAREST: GLint = 0x2700;
433pub const GL_LINEAR_MIPMAP_NEAREST: GLint = 0x2701;
434pub const GL_NEAREST_MIPMAP_LINEAR: GLint = 0x2702;
435pub const GL_LINEAR_MIPMAP_LINEAR: GLint = 0x2703;
436pub const GL_TEXTURE_MAG_FILTER: GLenum = 0x2800;
437pub const GL_TEXTURE_MIN_FILTER: GLenum = 0x2801;
438pub const GL_TEXTURE_WRAP_S: GLenum = 0x2802;
439pub const GL_TEXTURE_WRAP_T: GLenum = 0x2803;
440pub const GL_REPEAT: GLint = 0x2901;
441
442pub trait GL_1_0 {
443	fn glCullFace(&self, mode: GLenum) -> Result<()>;
444	fn glFrontFace(&self, mode: GLenum) -> Result<()>;
445	fn glHint(&self, target: GLenum, mode: GLenum) -> Result<()>;
446	fn glLineWidth(&self, width: GLfloat) -> Result<()>;
447	fn glPointSize(&self, size: GLfloat) -> Result<()>;
448	fn glPolygonMode(&self, face: GLenum, mode: GLenum) -> Result<()>;
449	fn glScissor(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
450	fn glTexParameterf(&self, target: GLenum, pname: GLenum, param: GLfloat) -> Result<()>;
451	fn glTexParameterfv(&self, target: GLenum, pname: GLenum, params: *const GLfloat) -> Result<()>;
452	fn glTexParameteri(&self, target: GLenum, pname: GLenum, param: GLint) -> Result<()>;
453	fn glTexParameteriv(&self, target: GLenum, pname: GLenum, params: *const GLint) -> Result<()>;
454	fn glTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
455	fn glTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
456	fn glDrawBuffer(&self, buf: GLenum) -> Result<()>;
457	fn glClear(&self, mask: GLbitfield) -> Result<()>;
458	fn glClearColor(&self, red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat) -> Result<()>;
459	fn glClearStencil(&self, s: GLint) -> Result<()>;
460	fn glClearDepth(&self, depth: GLdouble) -> Result<()>;
461	fn glStencilMask(&self, mask: GLuint) -> Result<()>;
462	fn glColorMask(&self, red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean) -> Result<()>;
463	fn glDepthMask(&self, flag: GLboolean) -> Result<()>;
464	fn glDisable(&self, cap: GLenum) -> Result<()>;
465	fn glEnable(&self, cap: GLenum) -> Result<()>;
466	fn glFinish(&self) -> Result<()>;
467	fn glFlush(&self) -> Result<()>;
468	fn glBlendFunc(&self, sfactor: GLenum, dfactor: GLenum) -> Result<()>;
469	fn glLogicOp(&self, opcode: GLenum) -> Result<()>;
470	fn glStencilFunc(&self, func: GLenum, ref_: GLint, mask: GLuint) -> Result<()>;
471	fn glStencilOp(&self, fail: GLenum, zfail: GLenum, zpass: GLenum) -> Result<()>;
472	fn glDepthFunc(&self, func: GLenum) -> Result<()>;
473	fn glPixelStoref(&self, pname: GLenum, param: GLfloat) -> Result<()>;
474	fn glPixelStorei(&self, pname: GLenum, param: GLint) -> Result<()>;
475	fn glReadBuffer(&self, src: GLenum) -> Result<()>;
476	fn glReadPixels(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *mut c_void) -> Result<()>;
477	fn glGetBooleanv(&self, pname: GLenum, data: *mut GLboolean) -> Result<()>;
478	fn glGetDoublev(&self, pname: GLenum, data: *mut GLdouble) -> Result<()>;
479	fn glGetError(&self) -> GLenum;
480	fn glGetFloatv(&self, pname: GLenum, data: *mut GLfloat) -> Result<()>;
481	fn glGetIntegerv(&self, pname: GLenum, data: *mut GLint) -> Result<()>;
482	fn glGetString(&self, name: GLenum) -> Result<&'static str>;
483	fn glGetTexImage(&self, target: GLenum, level: GLint, format: GLenum, type_: GLenum, pixels: *mut c_void) -> Result<()>;
484	fn glGetTexParameterfv(&self, target: GLenum, pname: GLenum, params: *mut GLfloat) -> Result<()>;
485	fn glGetTexParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
486	fn glGetTexLevelParameterfv(&self, target: GLenum, level: GLint, pname: GLenum, params: *mut GLfloat) -> Result<()>;
487	fn glGetTexLevelParameteriv(&self, target: GLenum, level: GLint, pname: GLenum, params: *mut GLint) -> Result<()>;
488	fn glIsEnabled(&self, cap: GLenum) -> Result<GLboolean>;
489	fn glDepthRange(&self, n: GLdouble, f: GLdouble) -> Result<()>;
490	fn glViewport(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
491	fn get_version(&self) -> (&'static str, u32, u32, u32);
492	fn get_vendor(&self) -> &'static str;
493	fn get_renderer(&self) -> &'static str;
494	fn get_versionstr(&self) -> &'static str;
495}
496
497#[derive(Clone, Copy, PartialEq, Eq, Hash)]
498pub struct Version10 {
499	spec: &'static str,
500	major_version: u32,
501	minor_version: u32,
502	release_version: u32,
503	vendor: &'static str,
504	renderer: &'static str,
505	version: &'static str,
506	available: bool,
507	cullface: PFNGLCULLFACEPROC,
508	frontface: PFNGLFRONTFACEPROC,
509	hint: PFNGLHINTPROC,
510	linewidth: PFNGLLINEWIDTHPROC,
511	pointsize: PFNGLPOINTSIZEPROC,
512	polygonmode: PFNGLPOLYGONMODEPROC,
513	scissor: PFNGLSCISSORPROC,
514	texparameterf: PFNGLTEXPARAMETERFPROC,
515	texparameterfv: PFNGLTEXPARAMETERFVPROC,
516	texparameteri: PFNGLTEXPARAMETERIPROC,
517	texparameteriv: PFNGLTEXPARAMETERIVPROC,
518	teximage1d: PFNGLTEXIMAGE1DPROC,
519	teximage2d: PFNGLTEXIMAGE2DPROC,
520	drawbuffer: PFNGLDRAWBUFFERPROC,
521	clear: PFNGLCLEARPROC,
522	clearcolor: PFNGLCLEARCOLORPROC,
523	clearstencil: PFNGLCLEARSTENCILPROC,
524	cleardepth: PFNGLCLEARDEPTHPROC,
525	stencilmask: PFNGLSTENCILMASKPROC,
526	colormask: PFNGLCOLORMASKPROC,
527	depthmask: PFNGLDEPTHMASKPROC,
528	disable: PFNGLDISABLEPROC,
529	enable: PFNGLENABLEPROC,
530	finish: PFNGLFINISHPROC,
531	flush: PFNGLFLUSHPROC,
532	blendfunc: PFNGLBLENDFUNCPROC,
533	logicop: PFNGLLOGICOPPROC,
534	stencilfunc: PFNGLSTENCILFUNCPROC,
535	stencilop: PFNGLSTENCILOPPROC,
536	depthfunc: PFNGLDEPTHFUNCPROC,
537	pixelstoref: PFNGLPIXELSTOREFPROC,
538	pixelstorei: PFNGLPIXELSTOREIPROC,
539	readbuffer: PFNGLREADBUFFERPROC,
540	readpixels: PFNGLREADPIXELSPROC,
541	getbooleanv: PFNGLGETBOOLEANVPROC,
542	getdoublev: PFNGLGETDOUBLEVPROC,
543	geterror: PFNGLGETERRORPROC,
544	getfloatv: PFNGLGETFLOATVPROC,
545	getintegerv: PFNGLGETINTEGERVPROC,
546	getstring: PFNGLGETSTRINGPROC,
547	getteximage: PFNGLGETTEXIMAGEPROC,
548	gettexparameterfv: PFNGLGETTEXPARAMETERFVPROC,
549	gettexparameteriv: PFNGLGETTEXPARAMETERIVPROC,
550	gettexlevelparameterfv: PFNGLGETTEXLEVELPARAMETERFVPROC,
551	gettexlevelparameteriv: PFNGLGETTEXLEVELPARAMETERIVPROC,
552	isenabled: PFNGLISENABLEDPROC,
553	depthrange: PFNGLDEPTHRANGEPROC,
554	viewport: PFNGLVIEWPORTPROC,
555}
556
557impl GL_1_0 for Version10 {
558	#[inline(always)]
559	fn glCullFace(&self, mode: GLenum) -> Result<()> {
560		let ret = process_catch("glCullFace", catch_unwind(||(self.cullface)(mode)));
561		#[cfg(feature = "diagnose")]
562		if let Ok(ret) = ret {
563			return to_result("glCullFace", ret, self.glGetError());
564		} else {
565			return ret
566		}
567		#[cfg(not(feature = "diagnose"))]
568		return ret;
569	}
570	#[inline(always)]
571	fn glFrontFace(&self, mode: GLenum) -> Result<()> {
572		let ret = process_catch("glFrontFace", catch_unwind(||(self.frontface)(mode)));
573		#[cfg(feature = "diagnose")]
574		if let Ok(ret) = ret {
575			return to_result("glFrontFace", ret, self.glGetError());
576		} else {
577			return ret
578		}
579		#[cfg(not(feature = "diagnose"))]
580		return ret;
581	}
582	#[inline(always)]
583	fn glHint(&self, target: GLenum, mode: GLenum) -> Result<()> {
584		let ret = process_catch("glHint", catch_unwind(||(self.hint)(target, mode)));
585		#[cfg(feature = "diagnose")]
586		if let Ok(ret) = ret {
587			return to_result("glHint", ret, self.glGetError());
588		} else {
589			return ret
590		}
591		#[cfg(not(feature = "diagnose"))]
592		return ret;
593	}
594	#[inline(always)]
595	fn glLineWidth(&self, width: GLfloat) -> Result<()> {
596		let ret = process_catch("glLineWidth", catch_unwind(||(self.linewidth)(width)));
597		#[cfg(feature = "diagnose")]
598		if let Ok(ret) = ret {
599			return to_result("glLineWidth", ret, self.glGetError());
600		} else {
601			return ret
602		}
603		#[cfg(not(feature = "diagnose"))]
604		return ret;
605	}
606	#[inline(always)]
607	fn glPointSize(&self, size: GLfloat) -> Result<()> {
608		let ret = process_catch("glPointSize", catch_unwind(||(self.pointsize)(size)));
609		#[cfg(feature = "diagnose")]
610		if let Ok(ret) = ret {
611			return to_result("glPointSize", ret, self.glGetError());
612		} else {
613			return ret
614		}
615		#[cfg(not(feature = "diagnose"))]
616		return ret;
617	}
618	#[inline(always)]
619	fn glPolygonMode(&self, face: GLenum, mode: GLenum) -> Result<()> {
620		let ret = process_catch("glPolygonMode", catch_unwind(||(self.polygonmode)(face, mode)));
621		#[cfg(feature = "diagnose")]
622		if let Ok(ret) = ret {
623			return to_result("glPolygonMode", ret, self.glGetError());
624		} else {
625			return ret
626		}
627		#[cfg(not(feature = "diagnose"))]
628		return ret;
629	}
630	#[inline(always)]
631	fn glScissor(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
632		let ret = process_catch("glScissor", catch_unwind(||(self.scissor)(x, y, width, height)));
633		#[cfg(feature = "diagnose")]
634		if let Ok(ret) = ret {
635			return to_result("glScissor", ret, self.glGetError());
636		} else {
637			return ret
638		}
639		#[cfg(not(feature = "diagnose"))]
640		return ret;
641	}
642	#[inline(always)]
643	fn glTexParameterf(&self, target: GLenum, pname: GLenum, param: GLfloat) -> Result<()> {
644		let ret = process_catch("glTexParameterf", catch_unwind(||(self.texparameterf)(target, pname, param)));
645		#[cfg(feature = "diagnose")]
646		if let Ok(ret) = ret {
647			return to_result("glTexParameterf", ret, self.glGetError());
648		} else {
649			return ret
650		}
651		#[cfg(not(feature = "diagnose"))]
652		return ret;
653	}
654	#[inline(always)]
655	fn glTexParameterfv(&self, target: GLenum, pname: GLenum, params: *const GLfloat) -> Result<()> {
656		let ret = process_catch("glTexParameterfv", catch_unwind(||(self.texparameterfv)(target, pname, params)));
657		#[cfg(feature = "diagnose")]
658		if let Ok(ret) = ret {
659			return to_result("glTexParameterfv", ret, self.glGetError());
660		} else {
661			return ret
662		}
663		#[cfg(not(feature = "diagnose"))]
664		return ret;
665	}
666	#[inline(always)]
667	fn glTexParameteri(&self, target: GLenum, pname: GLenum, param: GLint) -> Result<()> {
668		let ret = process_catch("glTexParameteri", catch_unwind(||(self.texparameteri)(target, pname, param)));
669		#[cfg(feature = "diagnose")]
670		if let Ok(ret) = ret {
671			return to_result("glTexParameteri", ret, self.glGetError());
672		} else {
673			return ret
674		}
675		#[cfg(not(feature = "diagnose"))]
676		return ret;
677	}
678	#[inline(always)]
679	fn glTexParameteriv(&self, target: GLenum, pname: GLenum, params: *const GLint) -> Result<()> {
680		let ret = process_catch("glTexParameteriv", catch_unwind(||(self.texparameteriv)(target, pname, params)));
681		#[cfg(feature = "diagnose")]
682		if let Ok(ret) = ret {
683			return to_result("glTexParameteriv", ret, self.glGetError());
684		} else {
685			return ret
686		}
687		#[cfg(not(feature = "diagnose"))]
688		return ret;
689	}
690	#[inline(always)]
691	fn glTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
692		let ret = process_catch("glTexImage1D", catch_unwind(||(self.teximage1d)(target, level, internalformat, width, border, format, type_, pixels)));
693		#[cfg(feature = "diagnose")]
694		if let Ok(ret) = ret {
695			return to_result("glTexImage1D", ret, self.glGetError());
696		} else {
697			return ret
698		}
699		#[cfg(not(feature = "diagnose"))]
700		return ret;
701	}
702	#[inline(always)]
703	fn glTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
704		let ret = process_catch("glTexImage2D", catch_unwind(||(self.teximage2d)(target, level, internalformat, width, height, border, format, type_, pixels)));
705		#[cfg(feature = "diagnose")]
706		if let Ok(ret) = ret {
707			return to_result("glTexImage2D", ret, self.glGetError());
708		} else {
709			return ret
710		}
711		#[cfg(not(feature = "diagnose"))]
712		return ret;
713	}
714	#[inline(always)]
715	fn glDrawBuffer(&self, buf: GLenum) -> Result<()> {
716		let ret = process_catch("glDrawBuffer", catch_unwind(||(self.drawbuffer)(buf)));
717		#[cfg(feature = "diagnose")]
718		if let Ok(ret) = ret {
719			return to_result("glDrawBuffer", ret, self.glGetError());
720		} else {
721			return ret
722		}
723		#[cfg(not(feature = "diagnose"))]
724		return ret;
725	}
726	#[inline(always)]
727	fn glClear(&self, mask: GLbitfield) -> Result<()> {
728		let ret = process_catch("glClear", catch_unwind(||(self.clear)(mask)));
729		#[cfg(feature = "diagnose")]
730		if let Ok(ret) = ret {
731			return to_result("glClear", ret, self.glGetError());
732		} else {
733			return ret
734		}
735		#[cfg(not(feature = "diagnose"))]
736		return ret;
737	}
738	#[inline(always)]
739	fn glClearColor(&self, red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat) -> Result<()> {
740		let ret = process_catch("glClearColor", catch_unwind(||(self.clearcolor)(red, green, blue, alpha)));
741		#[cfg(feature = "diagnose")]
742		if let Ok(ret) = ret {
743			return to_result("glClearColor", ret, self.glGetError());
744		} else {
745			return ret
746		}
747		#[cfg(not(feature = "diagnose"))]
748		return ret;
749	}
750	#[inline(always)]
751	fn glClearStencil(&self, s: GLint) -> Result<()> {
752		let ret = process_catch("glClearStencil", catch_unwind(||(self.clearstencil)(s)));
753		#[cfg(feature = "diagnose")]
754		if let Ok(ret) = ret {
755			return to_result("glClearStencil", ret, self.glGetError());
756		} else {
757			return ret
758		}
759		#[cfg(not(feature = "diagnose"))]
760		return ret;
761	}
762	#[inline(always)]
763	fn glClearDepth(&self, depth: GLdouble) -> Result<()> {
764		let ret = process_catch("glClearDepth", catch_unwind(||(self.cleardepth)(depth)));
765		#[cfg(feature = "diagnose")]
766		if let Ok(ret) = ret {
767			return to_result("glClearDepth", ret, self.glGetError());
768		} else {
769			return ret
770		}
771		#[cfg(not(feature = "diagnose"))]
772		return ret;
773	}
774	#[inline(always)]
775	fn glStencilMask(&self, mask: GLuint) -> Result<()> {
776		let ret = process_catch("glStencilMask", catch_unwind(||(self.stencilmask)(mask)));
777		#[cfg(feature = "diagnose")]
778		if let Ok(ret) = ret {
779			return to_result("glStencilMask", ret, self.glGetError());
780		} else {
781			return ret
782		}
783		#[cfg(not(feature = "diagnose"))]
784		return ret;
785	}
786	#[inline(always)]
787	fn glColorMask(&self, red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean) -> Result<()> {
788		let ret = process_catch("glColorMask", catch_unwind(||(self.colormask)(red, green, blue, alpha)));
789		#[cfg(feature = "diagnose")]
790		if let Ok(ret) = ret {
791			return to_result("glColorMask", ret, self.glGetError());
792		} else {
793			return ret
794		}
795		#[cfg(not(feature = "diagnose"))]
796		return ret;
797	}
798	#[inline(always)]
799	fn glDepthMask(&self, flag: GLboolean) -> Result<()> {
800		let ret = process_catch("glDepthMask", catch_unwind(||(self.depthmask)(flag)));
801		#[cfg(feature = "diagnose")]
802		if let Ok(ret) = ret {
803			return to_result("glDepthMask", ret, self.glGetError());
804		} else {
805			return ret
806		}
807		#[cfg(not(feature = "diagnose"))]
808		return ret;
809	}
810	#[inline(always)]
811	fn glDisable(&self, cap: GLenum) -> Result<()> {
812		let ret = process_catch("glDisable", catch_unwind(||(self.disable)(cap)));
813		#[cfg(feature = "diagnose")]
814		if let Ok(ret) = ret {
815			return to_result("glDisable", ret, self.glGetError());
816		} else {
817			return ret
818		}
819		#[cfg(not(feature = "diagnose"))]
820		return ret;
821	}
822	#[inline(always)]
823	fn glEnable(&self, cap: GLenum) -> Result<()> {
824		let ret = process_catch("glEnable", catch_unwind(||(self.enable)(cap)));
825		#[cfg(feature = "diagnose")]
826		if let Ok(ret) = ret {
827			return to_result("glEnable", ret, self.glGetError());
828		} else {
829			return ret
830		}
831		#[cfg(not(feature = "diagnose"))]
832		return ret;
833	}
834	#[inline(always)]
835	fn glFinish(&self) -> Result<()> {
836		let ret = process_catch("glFinish", catch_unwind(||(self.finish)()));
837		#[cfg(feature = "diagnose")]
838		if let Ok(ret) = ret {
839			return to_result("glFinish", ret, self.glGetError());
840		} else {
841			return ret
842		}
843		#[cfg(not(feature = "diagnose"))]
844		return ret;
845	}
846	#[inline(always)]
847	fn glFlush(&self) -> Result<()> {
848		let ret = process_catch("glFlush", catch_unwind(||(self.flush)()));
849		#[cfg(feature = "diagnose")]
850		if let Ok(ret) = ret {
851			return to_result("glFlush", ret, self.glGetError());
852		} else {
853			return ret
854		}
855		#[cfg(not(feature = "diagnose"))]
856		return ret;
857	}
858	#[inline(always)]
859	fn glBlendFunc(&self, sfactor: GLenum, dfactor: GLenum) -> Result<()> {
860		let ret = process_catch("glBlendFunc", catch_unwind(||(self.blendfunc)(sfactor, dfactor)));
861		#[cfg(feature = "diagnose")]
862		if let Ok(ret) = ret {
863			return to_result("glBlendFunc", ret, self.glGetError());
864		} else {
865			return ret
866		}
867		#[cfg(not(feature = "diagnose"))]
868		return ret;
869	}
870	#[inline(always)]
871	fn glLogicOp(&self, opcode: GLenum) -> Result<()> {
872		let ret = process_catch("glLogicOp", catch_unwind(||(self.logicop)(opcode)));
873		#[cfg(feature = "diagnose")]
874		if let Ok(ret) = ret {
875			return to_result("glLogicOp", ret, self.glGetError());
876		} else {
877			return ret
878		}
879		#[cfg(not(feature = "diagnose"))]
880		return ret;
881	}
882	#[inline(always)]
883	fn glStencilFunc(&self, func: GLenum, ref_: GLint, mask: GLuint) -> Result<()> {
884		let ret = process_catch("glStencilFunc", catch_unwind(||(self.stencilfunc)(func, ref_, mask)));
885		#[cfg(feature = "diagnose")]
886		if let Ok(ret) = ret {
887			return to_result("glStencilFunc", ret, self.glGetError());
888		} else {
889			return ret
890		}
891		#[cfg(not(feature = "diagnose"))]
892		return ret;
893	}
894	#[inline(always)]
895	fn glStencilOp(&self, fail: GLenum, zfail: GLenum, zpass: GLenum) -> Result<()> {
896		let ret = process_catch("glStencilOp", catch_unwind(||(self.stencilop)(fail, zfail, zpass)));
897		#[cfg(feature = "diagnose")]
898		if let Ok(ret) = ret {
899			return to_result("glStencilOp", ret, self.glGetError());
900		} else {
901			return ret
902		}
903		#[cfg(not(feature = "diagnose"))]
904		return ret;
905	}
906	#[inline(always)]
907	fn glDepthFunc(&self, func: GLenum) -> Result<()> {
908		let ret = process_catch("glDepthFunc", catch_unwind(||(self.depthfunc)(func)));
909		#[cfg(feature = "diagnose")]
910		if let Ok(ret) = ret {
911			return to_result("glDepthFunc", ret, self.glGetError());
912		} else {
913			return ret
914		}
915		#[cfg(not(feature = "diagnose"))]
916		return ret;
917	}
918	#[inline(always)]
919	fn glPixelStoref(&self, pname: GLenum, param: GLfloat) -> Result<()> {
920		let ret = process_catch("glPixelStoref", catch_unwind(||(self.pixelstoref)(pname, param)));
921		#[cfg(feature = "diagnose")]
922		if let Ok(ret) = ret {
923			return to_result("glPixelStoref", ret, self.glGetError());
924		} else {
925			return ret
926		}
927		#[cfg(not(feature = "diagnose"))]
928		return ret;
929	}
930	#[inline(always)]
931	fn glPixelStorei(&self, pname: GLenum, param: GLint) -> Result<()> {
932		let ret = process_catch("glPixelStorei", catch_unwind(||(self.pixelstorei)(pname, param)));
933		#[cfg(feature = "diagnose")]
934		if let Ok(ret) = ret {
935			return to_result("glPixelStorei", ret, self.glGetError());
936		} else {
937			return ret
938		}
939		#[cfg(not(feature = "diagnose"))]
940		return ret;
941	}
942	#[inline(always)]
943	fn glReadBuffer(&self, src: GLenum) -> Result<()> {
944		let ret = process_catch("glReadBuffer", catch_unwind(||(self.readbuffer)(src)));
945		#[cfg(feature = "diagnose")]
946		if let Ok(ret) = ret {
947			return to_result("glReadBuffer", ret, self.glGetError());
948		} else {
949			return ret
950		}
951		#[cfg(not(feature = "diagnose"))]
952		return ret;
953	}
954	#[inline(always)]
955	fn glReadPixels(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *mut c_void) -> Result<()> {
956		let ret = process_catch("glReadPixels", catch_unwind(||(self.readpixels)(x, y, width, height, format, type_, pixels)));
957		#[cfg(feature = "diagnose")]
958		if let Ok(ret) = ret {
959			return to_result("glReadPixels", ret, self.glGetError());
960		} else {
961			return ret
962		}
963		#[cfg(not(feature = "diagnose"))]
964		return ret;
965	}
966	#[inline(always)]
967	fn glGetBooleanv(&self, pname: GLenum, data: *mut GLboolean) -> Result<()> {
968		let ret = process_catch("glGetBooleanv", catch_unwind(||(self.getbooleanv)(pname, data)));
969		#[cfg(feature = "diagnose")]
970		if let Ok(ret) = ret {
971			return to_result("glGetBooleanv", ret, self.glGetError());
972		} else {
973			return ret
974		}
975		#[cfg(not(feature = "diagnose"))]
976		return ret;
977	}
978	#[inline(always)]
979	fn glGetDoublev(&self, pname: GLenum, data: *mut GLdouble) -> Result<()> {
980		let ret = process_catch("glGetDoublev", catch_unwind(||(self.getdoublev)(pname, data)));
981		#[cfg(feature = "diagnose")]
982		if let Ok(ret) = ret {
983			return to_result("glGetDoublev", ret, self.glGetError());
984		} else {
985			return ret
986		}
987		#[cfg(not(feature = "diagnose"))]
988		return ret;
989	}
990	#[inline(always)]
991	fn glGetError(&self) -> GLenum {
992		(self.geterror)()
993	}
994	#[inline(always)]
995	fn glGetFloatv(&self, pname: GLenum, data: *mut GLfloat) -> Result<()> {
996		let ret = process_catch("glGetFloatv", catch_unwind(||(self.getfloatv)(pname, data)));
997		#[cfg(feature = "diagnose")]
998		if let Ok(ret) = ret {
999			return to_result("glGetFloatv", ret, self.glGetError());
1000		} else {
1001			return ret
1002		}
1003		#[cfg(not(feature = "diagnose"))]
1004		return ret;
1005	}
1006	#[inline(always)]
1007	fn glGetIntegerv(&self, pname: GLenum, data: *mut GLint) -> Result<()> {
1008		let ret = process_catch("glGetIntegerv", catch_unwind(||(self.getintegerv)(pname, data)));
1009		#[cfg(feature = "diagnose")]
1010		if let Ok(ret) = ret {
1011			return to_result("glGetIntegerv", ret, self.glGetError());
1012		} else {
1013			return ret
1014		}
1015		#[cfg(not(feature = "diagnose"))]
1016		return ret;
1017	}
1018	#[inline(always)]
1019	fn glGetString(&self, name: GLenum) -> Result<&'static str> {
1020		let ret = process_catch("glGetString", catch_unwind(||unsafe{CStr::from_ptr((self.getstring)(name) as *const i8)}.to_str().unwrap()));
1021		#[cfg(feature = "diagnose")]
1022		if let Ok(ret) = ret {
1023			return to_result("glGetString", ret, self.glGetError());
1024		} else {
1025			return ret
1026		}
1027		#[cfg(not(feature = "diagnose"))]
1028		return ret;
1029	}
1030	#[inline(always)]
1031	fn glGetTexImage(&self, target: GLenum, level: GLint, format: GLenum, type_: GLenum, pixels: *mut c_void) -> Result<()> {
1032		let ret = process_catch("glGetTexImage", catch_unwind(||(self.getteximage)(target, level, format, type_, pixels)));
1033		#[cfg(feature = "diagnose")]
1034		if let Ok(ret) = ret {
1035			return to_result("glGetTexImage", ret, self.glGetError());
1036		} else {
1037			return ret
1038		}
1039		#[cfg(not(feature = "diagnose"))]
1040		return ret;
1041	}
1042	#[inline(always)]
1043	fn glGetTexParameterfv(&self, target: GLenum, pname: GLenum, params: *mut GLfloat) -> Result<()> {
1044		let ret = process_catch("glGetTexParameterfv", catch_unwind(||(self.gettexparameterfv)(target, pname, params)));
1045		#[cfg(feature = "diagnose")]
1046		if let Ok(ret) = ret {
1047			return to_result("glGetTexParameterfv", ret, self.glGetError());
1048		} else {
1049			return ret
1050		}
1051		#[cfg(not(feature = "diagnose"))]
1052		return ret;
1053	}
1054	#[inline(always)]
1055	fn glGetTexParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
1056		let ret = process_catch("glGetTexParameteriv", catch_unwind(||(self.gettexparameteriv)(target, pname, params)));
1057		#[cfg(feature = "diagnose")]
1058		if let Ok(ret) = ret {
1059			return to_result("glGetTexParameteriv", ret, self.glGetError());
1060		} else {
1061			return ret
1062		}
1063		#[cfg(not(feature = "diagnose"))]
1064		return ret;
1065	}
1066	#[inline(always)]
1067	fn glGetTexLevelParameterfv(&self, target: GLenum, level: GLint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
1068		let ret = process_catch("glGetTexLevelParameterfv", catch_unwind(||(self.gettexlevelparameterfv)(target, level, pname, params)));
1069		#[cfg(feature = "diagnose")]
1070		if let Ok(ret) = ret {
1071			return to_result("glGetTexLevelParameterfv", ret, self.glGetError());
1072		} else {
1073			return ret
1074		}
1075		#[cfg(not(feature = "diagnose"))]
1076		return ret;
1077	}
1078	#[inline(always)]
1079	fn glGetTexLevelParameteriv(&self, target: GLenum, level: GLint, pname: GLenum, params: *mut GLint) -> Result<()> {
1080		let ret = process_catch("glGetTexLevelParameteriv", catch_unwind(||(self.gettexlevelparameteriv)(target, level, pname, params)));
1081		#[cfg(feature = "diagnose")]
1082		if let Ok(ret) = ret {
1083			return to_result("glGetTexLevelParameteriv", ret, self.glGetError());
1084		} else {
1085			return ret
1086		}
1087		#[cfg(not(feature = "diagnose"))]
1088		return ret;
1089	}
1090	#[inline(always)]
1091	fn glIsEnabled(&self, cap: GLenum) -> Result<GLboolean> {
1092		let ret = process_catch("glIsEnabled", catch_unwind(||(self.isenabled)(cap)));
1093		#[cfg(feature = "diagnose")]
1094		if let Ok(ret) = ret {
1095			return to_result("glIsEnabled", ret, self.glGetError());
1096		} else {
1097			return ret
1098		}
1099		#[cfg(not(feature = "diagnose"))]
1100		return ret;
1101	}
1102	#[inline(always)]
1103	fn glDepthRange(&self, n: GLdouble, f: GLdouble) -> Result<()> {
1104		let ret = process_catch("glDepthRange", catch_unwind(||(self.depthrange)(n, f)));
1105		#[cfg(feature = "diagnose")]
1106		if let Ok(ret) = ret {
1107			return to_result("glDepthRange", ret, self.glGetError());
1108		} else {
1109			return ret
1110		}
1111		#[cfg(not(feature = "diagnose"))]
1112		return ret;
1113	}
1114	#[inline(always)]
1115	fn glViewport(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
1116		let ret = process_catch("glViewport", catch_unwind(||(self.viewport)(x, y, width, height)));
1117		#[cfg(feature = "diagnose")]
1118		if let Ok(ret) = ret {
1119			return to_result("glViewport", ret, self.glGetError());
1120		} else {
1121			return ret
1122		}
1123		#[cfg(not(feature = "diagnose"))]
1124		return ret;
1125	}
1126	#[inline(always)]
1127	fn get_version(&self) -> (&'static str, u32, u32, u32) {
1128		(self.spec, self.major_version, self.minor_version, self.release_version)
1129	}
1130	#[inline(always)]
1131	fn get_vendor(&self) -> &'static str {
1132		self.vendor
1133	}
1134	#[inline(always)]
1135	fn get_renderer(&self) -> &'static str {
1136		self.renderer
1137	}
1138	#[inline(always)]
1139	fn get_versionstr(&self) -> &'static str {
1140		self.version
1141	}
1142}
1143
1144impl Version10 {
1145	pub fn new(mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Result<Self> {
1146		let mut ret = Self {
1147			available: true,
1148			spec: "unknown",
1149			major_version: 0,
1150			minor_version: 0,
1151			release_version: 0,
1152			vendor: "unknown",
1153			renderer: "unknown",
1154			version: "unknown",
1155			cullface: {let proc = get_proc_address("glCullFace"); if proc == null() {dummy_pfnglcullfaceproc} else {unsafe{transmute(proc)}}},
1156			frontface: {let proc = get_proc_address("glFrontFace"); if proc == null() {dummy_pfnglfrontfaceproc} else {unsafe{transmute(proc)}}},
1157			hint: {let proc = get_proc_address("glHint"); if proc == null() {dummy_pfnglhintproc} else {unsafe{transmute(proc)}}},
1158			linewidth: {let proc = get_proc_address("glLineWidth"); if proc == null() {dummy_pfngllinewidthproc} else {unsafe{transmute(proc)}}},
1159			pointsize: {let proc = get_proc_address("glPointSize"); if proc == null() {dummy_pfnglpointsizeproc} else {unsafe{transmute(proc)}}},
1160			polygonmode: {let proc = get_proc_address("glPolygonMode"); if proc == null() {dummy_pfnglpolygonmodeproc} else {unsafe{transmute(proc)}}},
1161			scissor: {let proc = get_proc_address("glScissor"); if proc == null() {dummy_pfnglscissorproc} else {unsafe{transmute(proc)}}},
1162			texparameterf: {let proc = get_proc_address("glTexParameterf"); if proc == null() {dummy_pfngltexparameterfproc} else {unsafe{transmute(proc)}}},
1163			texparameterfv: {let proc = get_proc_address("glTexParameterfv"); if proc == null() {dummy_pfngltexparameterfvproc} else {unsafe{transmute(proc)}}},
1164			texparameteri: {let proc = get_proc_address("glTexParameteri"); if proc == null() {dummy_pfngltexparameteriproc} else {unsafe{transmute(proc)}}},
1165			texparameteriv: {let proc = get_proc_address("glTexParameteriv"); if proc == null() {dummy_pfngltexparameterivproc} else {unsafe{transmute(proc)}}},
1166			teximage1d: {let proc = get_proc_address("glTexImage1D"); if proc == null() {dummy_pfnglteximage1dproc} else {unsafe{transmute(proc)}}},
1167			teximage2d: {let proc = get_proc_address("glTexImage2D"); if proc == null() {dummy_pfnglteximage2dproc} else {unsafe{transmute(proc)}}},
1168			drawbuffer: {let proc = get_proc_address("glDrawBuffer"); if proc == null() {dummy_pfngldrawbufferproc} else {unsafe{transmute(proc)}}},
1169			clear: {let proc = get_proc_address("glClear"); if proc == null() {dummy_pfnglclearproc} else {unsafe{transmute(proc)}}},
1170			clearcolor: {let proc = get_proc_address("glClearColor"); if proc == null() {dummy_pfnglclearcolorproc} else {unsafe{transmute(proc)}}},
1171			clearstencil: {let proc = get_proc_address("glClearStencil"); if proc == null() {dummy_pfnglclearstencilproc} else {unsafe{transmute(proc)}}},
1172			cleardepth: {let proc = get_proc_address("glClearDepth"); if proc == null() {dummy_pfnglcleardepthproc} else {unsafe{transmute(proc)}}},
1173			stencilmask: {let proc = get_proc_address("glStencilMask"); if proc == null() {dummy_pfnglstencilmaskproc} else {unsafe{transmute(proc)}}},
1174			colormask: {let proc = get_proc_address("glColorMask"); if proc == null() {dummy_pfnglcolormaskproc} else {unsafe{transmute(proc)}}},
1175			depthmask: {let proc = get_proc_address("glDepthMask"); if proc == null() {dummy_pfngldepthmaskproc} else {unsafe{transmute(proc)}}},
1176			disable: {let proc = get_proc_address("glDisable"); if proc == null() {dummy_pfngldisableproc} else {unsafe{transmute(proc)}}},
1177			enable: {let proc = get_proc_address("glEnable"); if proc == null() {dummy_pfnglenableproc} else {unsafe{transmute(proc)}}},
1178			finish: {let proc = get_proc_address("glFinish"); if proc == null() {dummy_pfnglfinishproc} else {unsafe{transmute(proc)}}},
1179			flush: {let proc = get_proc_address("glFlush"); if proc == null() {dummy_pfnglflushproc} else {unsafe{transmute(proc)}}},
1180			blendfunc: {let proc = get_proc_address("glBlendFunc"); if proc == null() {dummy_pfnglblendfuncproc} else {unsafe{transmute(proc)}}},
1181			logicop: {let proc = get_proc_address("glLogicOp"); if proc == null() {dummy_pfngllogicopproc} else {unsafe{transmute(proc)}}},
1182			stencilfunc: {let proc = get_proc_address("glStencilFunc"); if proc == null() {dummy_pfnglstencilfuncproc} else {unsafe{transmute(proc)}}},
1183			stencilop: {let proc = get_proc_address("glStencilOp"); if proc == null() {dummy_pfnglstencilopproc} else {unsafe{transmute(proc)}}},
1184			depthfunc: {let proc = get_proc_address("glDepthFunc"); if proc == null() {dummy_pfngldepthfuncproc} else {unsafe{transmute(proc)}}},
1185			pixelstoref: {let proc = get_proc_address("glPixelStoref"); if proc == null() {dummy_pfnglpixelstorefproc} else {unsafe{transmute(proc)}}},
1186			pixelstorei: {let proc = get_proc_address("glPixelStorei"); if proc == null() {dummy_pfnglpixelstoreiproc} else {unsafe{transmute(proc)}}},
1187			readbuffer: {let proc = get_proc_address("glReadBuffer"); if proc == null() {dummy_pfnglreadbufferproc} else {unsafe{transmute(proc)}}},
1188			readpixels: {let proc = get_proc_address("glReadPixels"); if proc == null() {dummy_pfnglreadpixelsproc} else {unsafe{transmute(proc)}}},
1189			getbooleanv: {let proc = get_proc_address("glGetBooleanv"); if proc == null() {dummy_pfnglgetbooleanvproc} else {unsafe{transmute(proc)}}},
1190			getdoublev: {let proc = get_proc_address("glGetDoublev"); if proc == null() {dummy_pfnglgetdoublevproc} else {unsafe{transmute(proc)}}},
1191			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
1192			getfloatv: {let proc = get_proc_address("glGetFloatv"); if proc == null() {dummy_pfnglgetfloatvproc} else {unsafe{transmute(proc)}}},
1193			getintegerv: {let proc = get_proc_address("glGetIntegerv"); if proc == null() {dummy_pfnglgetintegervproc} else {unsafe{transmute(proc)}}},
1194			getstring: {let proc = get_proc_address("glGetString"); if proc == null() {dummy_pfnglgetstringproc} else {unsafe{transmute(proc)}}},
1195			getteximage: {let proc = get_proc_address("glGetTexImage"); if proc == null() {dummy_pfnglgetteximageproc} else {unsafe{transmute(proc)}}},
1196			gettexparameterfv: {let proc = get_proc_address("glGetTexParameterfv"); if proc == null() {dummy_pfnglgettexparameterfvproc} else {unsafe{transmute(proc)}}},
1197			gettexparameteriv: {let proc = get_proc_address("glGetTexParameteriv"); if proc == null() {dummy_pfnglgettexparameterivproc} else {unsafe{transmute(proc)}}},
1198			gettexlevelparameterfv: {let proc = get_proc_address("glGetTexLevelParameterfv"); if proc == null() {dummy_pfnglgettexlevelparameterfvproc} else {unsafe{transmute(proc)}}},
1199			gettexlevelparameteriv: {let proc = get_proc_address("glGetTexLevelParameteriv"); if proc == null() {dummy_pfnglgettexlevelparameterivproc} else {unsafe{transmute(proc)}}},
1200			isenabled: {let proc = get_proc_address("glIsEnabled"); if proc == null() {dummy_pfnglisenabledproc} else {unsafe{transmute(proc)}}},
1201			depthrange: {let proc = get_proc_address("glDepthRange"); if proc == null() {dummy_pfngldepthrangeproc} else {unsafe{transmute(proc)}}},
1202			viewport: {let proc = get_proc_address("glViewport"); if proc == null() {dummy_pfnglviewportproc} else {unsafe{transmute(proc)}}},
1203		};
1204		ret.fetch_version()?;
1205		Ok(ret)
1206	}
1207	#[inline(always)]
1208	fn fetch_version(&mut self) -> Result<()> {
1209		self.vendor = self.glGetString(GL_VENDOR)?;
1210		self.renderer = self.glGetString(GL_RENDERER)?;
1211		self.version = self.glGetString(GL_VERSION)?;
1212		self.spec = "OpenGL";
1213		let mut verstr = self.version;
1214		if verstr.starts_with("OpenGL ES ") {
1215			verstr = &verstr["OpenGL ES ".len()..];
1216			self.spec = "OpenGL ES ";
1217		} else if let Some((left, right)) = verstr.split_once(' ') {
1218			verstr = left;
1219			self.spec = right;
1220		}
1221		let mut v: Vec<&str> = verstr.split('.').collect();
1222		v.resize(3, "0");
1223		v = v.into_iter().map(|x|if x == "" {"0"} else {x}).collect();
1224		self.major_version = v[0].parse().unwrap();
1225		self.minor_version = v[1].parse().unwrap();
1226		self.release_version = v[2].parse().unwrap();
1227		Ok(())
1228	}
1229	#[inline(always)]
1230	pub fn get_available(&self) -> bool {
1231		self.available
1232	}
1233}
1234
1235impl Default for Version10 {
1236	fn default() -> Self {
1237		Self {
1238			available: false,
1239			spec: "unknown",
1240			major_version: 0,
1241			minor_version: 0,
1242			release_version: 0,
1243			vendor: "unknown",
1244			renderer: "unknown",
1245			version: "unknown",
1246			cullface: dummy_pfnglcullfaceproc,
1247			frontface: dummy_pfnglfrontfaceproc,
1248			hint: dummy_pfnglhintproc,
1249			linewidth: dummy_pfngllinewidthproc,
1250			pointsize: dummy_pfnglpointsizeproc,
1251			polygonmode: dummy_pfnglpolygonmodeproc,
1252			scissor: dummy_pfnglscissorproc,
1253			texparameterf: dummy_pfngltexparameterfproc,
1254			texparameterfv: dummy_pfngltexparameterfvproc,
1255			texparameteri: dummy_pfngltexparameteriproc,
1256			texparameteriv: dummy_pfngltexparameterivproc,
1257			teximage1d: dummy_pfnglteximage1dproc,
1258			teximage2d: dummy_pfnglteximage2dproc,
1259			drawbuffer: dummy_pfngldrawbufferproc,
1260			clear: dummy_pfnglclearproc,
1261			clearcolor: dummy_pfnglclearcolorproc,
1262			clearstencil: dummy_pfnglclearstencilproc,
1263			cleardepth: dummy_pfnglcleardepthproc,
1264			stencilmask: dummy_pfnglstencilmaskproc,
1265			colormask: dummy_pfnglcolormaskproc,
1266			depthmask: dummy_pfngldepthmaskproc,
1267			disable: dummy_pfngldisableproc,
1268			enable: dummy_pfnglenableproc,
1269			finish: dummy_pfnglfinishproc,
1270			flush: dummy_pfnglflushproc,
1271			blendfunc: dummy_pfnglblendfuncproc,
1272			logicop: dummy_pfngllogicopproc,
1273			stencilfunc: dummy_pfnglstencilfuncproc,
1274			stencilop: dummy_pfnglstencilopproc,
1275			depthfunc: dummy_pfngldepthfuncproc,
1276			pixelstoref: dummy_pfnglpixelstorefproc,
1277			pixelstorei: dummy_pfnglpixelstoreiproc,
1278			readbuffer: dummy_pfnglreadbufferproc,
1279			readpixels: dummy_pfnglreadpixelsproc,
1280			getbooleanv: dummy_pfnglgetbooleanvproc,
1281			getdoublev: dummy_pfnglgetdoublevproc,
1282			geterror: dummy_pfnglgeterrorproc,
1283			getfloatv: dummy_pfnglgetfloatvproc,
1284			getintegerv: dummy_pfnglgetintegervproc,
1285			getstring: dummy_pfnglgetstringproc,
1286			getteximage: dummy_pfnglgetteximageproc,
1287			gettexparameterfv: dummy_pfnglgettexparameterfvproc,
1288			gettexparameteriv: dummy_pfnglgettexparameterivproc,
1289			gettexlevelparameterfv: dummy_pfnglgettexlevelparameterfvproc,
1290			gettexlevelparameteriv: dummy_pfnglgettexlevelparameterivproc,
1291			isenabled: dummy_pfnglisenabledproc,
1292			depthrange: dummy_pfngldepthrangeproc,
1293			viewport: dummy_pfnglviewportproc,
1294		}
1295	}
1296}
1297impl Debug for Version10 {
1298	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
1299		if self.available {
1300			f.debug_struct("Version10")
1301			.field("available", &self.available)
1302			.field("spec", &self.spec)
1303			.field("major_version", &self.major_version)
1304			.field("minor_version", &self.minor_version)
1305			.field("release_version", &self.release_version)
1306			.field("vendor", &self.vendor)
1307			.field("renderer", &self.renderer)
1308			.field("version", &self.version)
1309			.field("cullface", unsafe{if transmute::<_, *const c_void>(self.cullface) == (dummy_pfnglcullfaceproc as *const c_void) {&null::<PFNGLCULLFACEPROC>()} else {&self.cullface}})
1310			.field("frontface", unsafe{if transmute::<_, *const c_void>(self.frontface) == (dummy_pfnglfrontfaceproc as *const c_void) {&null::<PFNGLFRONTFACEPROC>()} else {&self.frontface}})
1311			.field("hint", unsafe{if transmute::<_, *const c_void>(self.hint) == (dummy_pfnglhintproc as *const c_void) {&null::<PFNGLHINTPROC>()} else {&self.hint}})
1312			.field("linewidth", unsafe{if transmute::<_, *const c_void>(self.linewidth) == (dummy_pfngllinewidthproc as *const c_void) {&null::<PFNGLLINEWIDTHPROC>()} else {&self.linewidth}})
1313			.field("pointsize", unsafe{if transmute::<_, *const c_void>(self.pointsize) == (dummy_pfnglpointsizeproc as *const c_void) {&null::<PFNGLPOINTSIZEPROC>()} else {&self.pointsize}})
1314			.field("polygonmode", unsafe{if transmute::<_, *const c_void>(self.polygonmode) == (dummy_pfnglpolygonmodeproc as *const c_void) {&null::<PFNGLPOLYGONMODEPROC>()} else {&self.polygonmode}})
1315			.field("scissor", unsafe{if transmute::<_, *const c_void>(self.scissor) == (dummy_pfnglscissorproc as *const c_void) {&null::<PFNGLSCISSORPROC>()} else {&self.scissor}})
1316			.field("texparameterf", unsafe{if transmute::<_, *const c_void>(self.texparameterf) == (dummy_pfngltexparameterfproc as *const c_void) {&null::<PFNGLTEXPARAMETERFPROC>()} else {&self.texparameterf}})
1317			.field("texparameterfv", unsafe{if transmute::<_, *const c_void>(self.texparameterfv) == (dummy_pfngltexparameterfvproc as *const c_void) {&null::<PFNGLTEXPARAMETERFVPROC>()} else {&self.texparameterfv}})
1318			.field("texparameteri", unsafe{if transmute::<_, *const c_void>(self.texparameteri) == (dummy_pfngltexparameteriproc as *const c_void) {&null::<PFNGLTEXPARAMETERIPROC>()} else {&self.texparameteri}})
1319			.field("texparameteriv", unsafe{if transmute::<_, *const c_void>(self.texparameteriv) == (dummy_pfngltexparameterivproc as *const c_void) {&null::<PFNGLTEXPARAMETERIVPROC>()} else {&self.texparameteriv}})
1320			.field("teximage1d", unsafe{if transmute::<_, *const c_void>(self.teximage1d) == (dummy_pfnglteximage1dproc as *const c_void) {&null::<PFNGLTEXIMAGE1DPROC>()} else {&self.teximage1d}})
1321			.field("teximage2d", unsafe{if transmute::<_, *const c_void>(self.teximage2d) == (dummy_pfnglteximage2dproc as *const c_void) {&null::<PFNGLTEXIMAGE2DPROC>()} else {&self.teximage2d}})
1322			.field("drawbuffer", unsafe{if transmute::<_, *const c_void>(self.drawbuffer) == (dummy_pfngldrawbufferproc as *const c_void) {&null::<PFNGLDRAWBUFFERPROC>()} else {&self.drawbuffer}})
1323			.field("clear", unsafe{if transmute::<_, *const c_void>(self.clear) == (dummy_pfnglclearproc as *const c_void) {&null::<PFNGLCLEARPROC>()} else {&self.clear}})
1324			.field("clearcolor", unsafe{if transmute::<_, *const c_void>(self.clearcolor) == (dummy_pfnglclearcolorproc as *const c_void) {&null::<PFNGLCLEARCOLORPROC>()} else {&self.clearcolor}})
1325			.field("clearstencil", unsafe{if transmute::<_, *const c_void>(self.clearstencil) == (dummy_pfnglclearstencilproc as *const c_void) {&null::<PFNGLCLEARSTENCILPROC>()} else {&self.clearstencil}})
1326			.field("cleardepth", unsafe{if transmute::<_, *const c_void>(self.cleardepth) == (dummy_pfnglcleardepthproc as *const c_void) {&null::<PFNGLCLEARDEPTHPROC>()} else {&self.cleardepth}})
1327			.field("stencilmask", unsafe{if transmute::<_, *const c_void>(self.stencilmask) == (dummy_pfnglstencilmaskproc as *const c_void) {&null::<PFNGLSTENCILMASKPROC>()} else {&self.stencilmask}})
1328			.field("colormask", unsafe{if transmute::<_, *const c_void>(self.colormask) == (dummy_pfnglcolormaskproc as *const c_void) {&null::<PFNGLCOLORMASKPROC>()} else {&self.colormask}})
1329			.field("depthmask", unsafe{if transmute::<_, *const c_void>(self.depthmask) == (dummy_pfngldepthmaskproc as *const c_void) {&null::<PFNGLDEPTHMASKPROC>()} else {&self.depthmask}})
1330			.field("disable", unsafe{if transmute::<_, *const c_void>(self.disable) == (dummy_pfngldisableproc as *const c_void) {&null::<PFNGLDISABLEPROC>()} else {&self.disable}})
1331			.field("enable", unsafe{if transmute::<_, *const c_void>(self.enable) == (dummy_pfnglenableproc as *const c_void) {&null::<PFNGLENABLEPROC>()} else {&self.enable}})
1332			.field("finish", unsafe{if transmute::<_, *const c_void>(self.finish) == (dummy_pfnglfinishproc as *const c_void) {&null::<PFNGLFINISHPROC>()} else {&self.finish}})
1333			.field("flush", unsafe{if transmute::<_, *const c_void>(self.flush) == (dummy_pfnglflushproc as *const c_void) {&null::<PFNGLFLUSHPROC>()} else {&self.flush}})
1334			.field("blendfunc", unsafe{if transmute::<_, *const c_void>(self.blendfunc) == (dummy_pfnglblendfuncproc as *const c_void) {&null::<PFNGLBLENDFUNCPROC>()} else {&self.blendfunc}})
1335			.field("logicop", unsafe{if transmute::<_, *const c_void>(self.logicop) == (dummy_pfngllogicopproc as *const c_void) {&null::<PFNGLLOGICOPPROC>()} else {&self.logicop}})
1336			.field("stencilfunc", unsafe{if transmute::<_, *const c_void>(self.stencilfunc) == (dummy_pfnglstencilfuncproc as *const c_void) {&null::<PFNGLSTENCILFUNCPROC>()} else {&self.stencilfunc}})
1337			.field("stencilop", unsafe{if transmute::<_, *const c_void>(self.stencilop) == (dummy_pfnglstencilopproc as *const c_void) {&null::<PFNGLSTENCILOPPROC>()} else {&self.stencilop}})
1338			.field("depthfunc", unsafe{if transmute::<_, *const c_void>(self.depthfunc) == (dummy_pfngldepthfuncproc as *const c_void) {&null::<PFNGLDEPTHFUNCPROC>()} else {&self.depthfunc}})
1339			.field("pixelstoref", unsafe{if transmute::<_, *const c_void>(self.pixelstoref) == (dummy_pfnglpixelstorefproc as *const c_void) {&null::<PFNGLPIXELSTOREFPROC>()} else {&self.pixelstoref}})
1340			.field("pixelstorei", unsafe{if transmute::<_, *const c_void>(self.pixelstorei) == (dummy_pfnglpixelstoreiproc as *const c_void) {&null::<PFNGLPIXELSTOREIPROC>()} else {&self.pixelstorei}})
1341			.field("readbuffer", unsafe{if transmute::<_, *const c_void>(self.readbuffer) == (dummy_pfnglreadbufferproc as *const c_void) {&null::<PFNGLREADBUFFERPROC>()} else {&self.readbuffer}})
1342			.field("readpixels", unsafe{if transmute::<_, *const c_void>(self.readpixels) == (dummy_pfnglreadpixelsproc as *const c_void) {&null::<PFNGLREADPIXELSPROC>()} else {&self.readpixels}})
1343			.field("getbooleanv", unsafe{if transmute::<_, *const c_void>(self.getbooleanv) == (dummy_pfnglgetbooleanvproc as *const c_void) {&null::<PFNGLGETBOOLEANVPROC>()} else {&self.getbooleanv}})
1344			.field("getdoublev", unsafe{if transmute::<_, *const c_void>(self.getdoublev) == (dummy_pfnglgetdoublevproc as *const c_void) {&null::<PFNGLGETDOUBLEVPROC>()} else {&self.getdoublev}})
1345			.field("geterror", unsafe{if transmute::<_, *const c_void>(self.geterror) == (dummy_pfnglgeterrorproc as *const c_void) {&null::<PFNGLGETERRORPROC>()} else {&self.geterror}})
1346			.field("getfloatv", unsafe{if transmute::<_, *const c_void>(self.getfloatv) == (dummy_pfnglgetfloatvproc as *const c_void) {&null::<PFNGLGETFLOATVPROC>()} else {&self.getfloatv}})
1347			.field("getintegerv", unsafe{if transmute::<_, *const c_void>(self.getintegerv) == (dummy_pfnglgetintegervproc as *const c_void) {&null::<PFNGLGETINTEGERVPROC>()} else {&self.getintegerv}})
1348			.field("getstring", unsafe{if transmute::<_, *const c_void>(self.getstring) == (dummy_pfnglgetstringproc as *const c_void) {&null::<PFNGLGETSTRINGPROC>()} else {&self.getstring}})
1349			.field("getteximage", unsafe{if transmute::<_, *const c_void>(self.getteximage) == (dummy_pfnglgetteximageproc as *const c_void) {&null::<PFNGLGETTEXIMAGEPROC>()} else {&self.getteximage}})
1350			.field("gettexparameterfv", unsafe{if transmute::<_, *const c_void>(self.gettexparameterfv) == (dummy_pfnglgettexparameterfvproc as *const c_void) {&null::<PFNGLGETTEXPARAMETERFVPROC>()} else {&self.gettexparameterfv}})
1351			.field("gettexparameteriv", unsafe{if transmute::<_, *const c_void>(self.gettexparameteriv) == (dummy_pfnglgettexparameterivproc as *const c_void) {&null::<PFNGLGETTEXPARAMETERIVPROC>()} else {&self.gettexparameteriv}})
1352			.field("gettexlevelparameterfv", unsafe{if transmute::<_, *const c_void>(self.gettexlevelparameterfv) == (dummy_pfnglgettexlevelparameterfvproc as *const c_void) {&null::<PFNGLGETTEXLEVELPARAMETERFVPROC>()} else {&self.gettexlevelparameterfv}})
1353			.field("gettexlevelparameteriv", unsafe{if transmute::<_, *const c_void>(self.gettexlevelparameteriv) == (dummy_pfnglgettexlevelparameterivproc as *const c_void) {&null::<PFNGLGETTEXLEVELPARAMETERIVPROC>()} else {&self.gettexlevelparameteriv}})
1354			.field("isenabled", unsafe{if transmute::<_, *const c_void>(self.isenabled) == (dummy_pfnglisenabledproc as *const c_void) {&null::<PFNGLISENABLEDPROC>()} else {&self.isenabled}})
1355			.field("depthrange", unsafe{if transmute::<_, *const c_void>(self.depthrange) == (dummy_pfngldepthrangeproc as *const c_void) {&null::<PFNGLDEPTHRANGEPROC>()} else {&self.depthrange}})
1356			.field("viewport", unsafe{if transmute::<_, *const c_void>(self.viewport) == (dummy_pfnglviewportproc as *const c_void) {&null::<PFNGLVIEWPORTPROC>()} else {&self.viewport}})
1357			.finish()
1358		} else {
1359			f.debug_struct("Version10")
1360			.field("available", &self.available)
1361			.finish_non_exhaustive()
1362		}
1363	}
1364}
1365pub type GLclampf = khronos_float_t;
1366pub type GLclampd = f64;
1367type PFNGLDRAWARRAYSPROC = extern "system" fn(GLenum, GLint, GLsizei);
1368type PFNGLDRAWELEMENTSPROC = extern "system" fn(GLenum, GLsizei, GLenum, *const c_void);
1369type PFNGLGETPOINTERVPROC = extern "system" fn(GLenum, *mut *mut c_void);
1370type PFNGLPOLYGONOFFSETPROC = extern "system" fn(GLfloat, GLfloat);
1371type PFNGLCOPYTEXIMAGE1DPROC = extern "system" fn(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLint);
1372type PFNGLCOPYTEXIMAGE2DPROC = extern "system" fn(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);
1373type PFNGLCOPYTEXSUBIMAGE1DPROC = extern "system" fn(GLenum, GLint, GLint, GLint, GLint, GLsizei);
1374type PFNGLCOPYTEXSUBIMAGE2DPROC = extern "system" fn(GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
1375type PFNGLTEXSUBIMAGE1DPROC = extern "system" fn(GLenum, GLint, GLint, GLsizei, GLenum, GLenum, *const c_void);
1376type PFNGLTEXSUBIMAGE2DPROC = extern "system" fn(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, *const c_void);
1377type PFNGLBINDTEXTUREPROC = extern "system" fn(GLenum, GLuint);
1378type PFNGLDELETETEXTURESPROC = extern "system" fn(GLsizei, *const GLuint);
1379type PFNGLGENTEXTURESPROC = extern "system" fn(GLsizei, *mut GLuint);
1380type PFNGLISTEXTUREPROC = extern "system" fn(GLuint) -> GLboolean;
1381extern "system" fn dummy_pfngldrawarraysproc (_: GLenum, _: GLint, _: GLsizei) {
1382	panic!("OpenGL function pointer `glDrawArrays()` is null.")
1383}
1384extern "system" fn dummy_pfngldrawelementsproc (_: GLenum, _: GLsizei, _: GLenum, _: *const c_void) {
1385	panic!("OpenGL function pointer `glDrawElements()` is null.")
1386}
1387extern "system" fn dummy_pfnglgetpointervproc (_: GLenum, _: *mut *mut c_void) {
1388	panic!("OpenGL function pointer `glGetPointerv()` is null.")
1389}
1390extern "system" fn dummy_pfnglpolygonoffsetproc (_: GLfloat, _: GLfloat) {
1391	panic!("OpenGL function pointer `glPolygonOffset()` is null.")
1392}
1393extern "system" fn dummy_pfnglcopyteximage1dproc (_: GLenum, _: GLint, _: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLint) {
1394	panic!("OpenGL function pointer `glCopyTexImage1D()` is null.")
1395}
1396extern "system" fn dummy_pfnglcopyteximage2dproc (_: GLenum, _: GLint, _: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLint) {
1397	panic!("OpenGL function pointer `glCopyTexImage2D()` is null.")
1398}
1399extern "system" fn dummy_pfnglcopytexsubimage1dproc (_: GLenum, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei) {
1400	panic!("OpenGL function pointer `glCopyTexSubImage1D()` is null.")
1401}
1402extern "system" fn dummy_pfnglcopytexsubimage2dproc (_: GLenum, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei) {
1403	panic!("OpenGL function pointer `glCopyTexSubImage2D()` is null.")
1404}
1405extern "system" fn dummy_pfngltexsubimage1dproc (_: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void) {
1406	panic!("OpenGL function pointer `glTexSubImage1D()` is null.")
1407}
1408extern "system" fn dummy_pfngltexsubimage2dproc (_: GLenum, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void) {
1409	panic!("OpenGL function pointer `glTexSubImage2D()` is null.")
1410}
1411extern "system" fn dummy_pfnglbindtextureproc (_: GLenum, _: GLuint) {
1412	panic!("OpenGL function pointer `glBindTexture()` is null.")
1413}
1414extern "system" fn dummy_pfngldeletetexturesproc (_: GLsizei, _: *const GLuint) {
1415	panic!("OpenGL function pointer `glDeleteTextures()` is null.")
1416}
1417extern "system" fn dummy_pfnglgentexturesproc (_: GLsizei, _: *mut GLuint) {
1418	panic!("OpenGL function pointer `glGenTextures()` is null.")
1419}
1420extern "system" fn dummy_pfnglistextureproc (_: GLuint) -> GLboolean {
1421	panic!("OpenGL function pointer `glIsTexture()` is null.")
1422}
1423pub const GL_COLOR_LOGIC_OP: GLenum = 0x0BF2;
1424pub const GL_POLYGON_OFFSET_UNITS: GLenum = 0x2A00;
1425pub const GL_POLYGON_OFFSET_POINT: GLenum = 0x2A01;
1426pub const GL_POLYGON_OFFSET_LINE: GLenum = 0x2A02;
1427pub const GL_POLYGON_OFFSET_FILL: GLenum = 0x8037;
1428pub const GL_POLYGON_OFFSET_FACTOR: GLenum = 0x8038;
1429pub const GL_TEXTURE_BINDING_1D: GLenum = 0x8068;
1430pub const GL_TEXTURE_BINDING_2D: GLenum = 0x8069;
1431pub const GL_TEXTURE_INTERNAL_FORMAT: GLenum = 0x1003;
1432pub const GL_TEXTURE_RED_SIZE: GLenum = 0x805C;
1433pub const GL_TEXTURE_GREEN_SIZE: GLenum = 0x805D;
1434pub const GL_TEXTURE_BLUE_SIZE: GLenum = 0x805E;
1435pub const GL_TEXTURE_ALPHA_SIZE: GLenum = 0x805F;
1436pub const GL_DOUBLE: GLenum = 0x140A;
1437pub const GL_PROXY_TEXTURE_1D: GLenum = 0x8063;
1438pub const GL_PROXY_TEXTURE_2D: GLenum = 0x8064;
1439pub const GL_R3_G3_B2: GLenum = 0x2A10;
1440pub const GL_RGB4: GLenum = 0x804F;
1441pub const GL_RGB5: GLenum = 0x8050;
1442pub const GL_RGB8: GLenum = 0x8051;
1443pub const GL_RGB10: GLenum = 0x8052;
1444pub const GL_RGB12: GLenum = 0x8053;
1445pub const GL_RGB16: GLenum = 0x8054;
1446pub const GL_RGBA2: GLenum = 0x8055;
1447pub const GL_RGBA4: GLenum = 0x8056;
1448pub const GL_RGB5_A1: GLenum = 0x8057;
1449pub const GL_RGBA8: GLenum = 0x8058;
1450pub const GL_RGB10_A2: GLenum = 0x8059;
1451pub const GL_RGBA12: GLenum = 0x805A;
1452pub const GL_RGBA16: GLenum = 0x805B;
1453pub const GL_VERTEX_ARRAY: GLenum = 0x8074;
1454
1455pub trait GL_1_1 {
1456	fn glGetError(&self) -> GLenum;
1457	fn glDrawArrays(&self, mode: GLenum, first: GLint, count: GLsizei) -> Result<()>;
1458	fn glDrawElements(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void) -> Result<()>;
1459	fn glGetPointerv(&self, pname: GLenum, params: *mut *mut c_void) -> Result<()>;
1460	fn glPolygonOffset(&self, factor: GLfloat, units: GLfloat) -> Result<()>;
1461	fn glCopyTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, border: GLint) -> Result<()>;
1462	fn glCopyTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei, border: GLint) -> Result<()>;
1463	fn glCopyTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, x: GLint, y: GLint, width: GLsizei) -> Result<()>;
1464	fn glCopyTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
1465	fn glTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
1466	fn glTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
1467	fn glBindTexture(&self, target: GLenum, texture: GLuint) -> Result<()>;
1468	fn glDeleteTextures(&self, n: GLsizei, textures: *const GLuint) -> Result<()>;
1469	fn glGenTextures(&self, n: GLsizei, textures: *mut GLuint) -> Result<()>;
1470	fn glIsTexture(&self, texture: GLuint) -> Result<GLboolean>;
1471}
1472
1473#[derive(Clone, Copy, PartialEq, Eq, Hash)]
1474pub struct Version11 {
1475	available: bool,
1476	geterror: PFNGLGETERRORPROC,
1477	drawarrays: PFNGLDRAWARRAYSPROC,
1478	drawelements: PFNGLDRAWELEMENTSPROC,
1479	getpointerv: PFNGLGETPOINTERVPROC,
1480	polygonoffset: PFNGLPOLYGONOFFSETPROC,
1481	copyteximage1d: PFNGLCOPYTEXIMAGE1DPROC,
1482	copyteximage2d: PFNGLCOPYTEXIMAGE2DPROC,
1483	copytexsubimage1d: PFNGLCOPYTEXSUBIMAGE1DPROC,
1484	copytexsubimage2d: PFNGLCOPYTEXSUBIMAGE2DPROC,
1485	texsubimage1d: PFNGLTEXSUBIMAGE1DPROC,
1486	texsubimage2d: PFNGLTEXSUBIMAGE2DPROC,
1487	bindtexture: PFNGLBINDTEXTUREPROC,
1488	deletetextures: PFNGLDELETETEXTURESPROC,
1489	gentextures: PFNGLGENTEXTURESPROC,
1490	istexture: PFNGLISTEXTUREPROC,
1491}
1492
1493impl GL_1_1 for Version11 {
1494	#[inline(always)]
1495	fn glGetError(&self) -> GLenum {
1496		(self.geterror)()
1497	}
1498	#[inline(always)]
1499	fn glDrawArrays(&self, mode: GLenum, first: GLint, count: GLsizei) -> Result<()> {
1500		let ret = process_catch("glDrawArrays", catch_unwind(||(self.drawarrays)(mode, first, count)));
1501		#[cfg(feature = "diagnose")]
1502		if let Ok(ret) = ret {
1503			return to_result("glDrawArrays", ret, self.glGetError());
1504		} else {
1505			return ret
1506		}
1507		#[cfg(not(feature = "diagnose"))]
1508		return ret;
1509	}
1510	#[inline(always)]
1511	fn glDrawElements(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void) -> Result<()> {
1512		let ret = process_catch("glDrawElements", catch_unwind(||(self.drawelements)(mode, count, type_, indices)));
1513		#[cfg(feature = "diagnose")]
1514		if let Ok(ret) = ret {
1515			return to_result("glDrawElements", ret, self.glGetError());
1516		} else {
1517			return ret
1518		}
1519		#[cfg(not(feature = "diagnose"))]
1520		return ret;
1521	}
1522	#[inline(always)]
1523	fn glGetPointerv(&self, pname: GLenum, params: *mut *mut c_void) -> Result<()> {
1524		let ret = process_catch("glGetPointerv", catch_unwind(||(self.getpointerv)(pname, params)));
1525		#[cfg(feature = "diagnose")]
1526		if let Ok(ret) = ret {
1527			return to_result("glGetPointerv", ret, self.glGetError());
1528		} else {
1529			return ret
1530		}
1531		#[cfg(not(feature = "diagnose"))]
1532		return ret;
1533	}
1534	#[inline(always)]
1535	fn glPolygonOffset(&self, factor: GLfloat, units: GLfloat) -> Result<()> {
1536		let ret = process_catch("glPolygonOffset", catch_unwind(||(self.polygonoffset)(factor, units)));
1537		#[cfg(feature = "diagnose")]
1538		if let Ok(ret) = ret {
1539			return to_result("glPolygonOffset", ret, self.glGetError());
1540		} else {
1541			return ret
1542		}
1543		#[cfg(not(feature = "diagnose"))]
1544		return ret;
1545	}
1546	#[inline(always)]
1547	fn glCopyTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, border: GLint) -> Result<()> {
1548		let ret = process_catch("glCopyTexImage1D", catch_unwind(||(self.copyteximage1d)(target, level, internalformat, x, y, width, border)));
1549		#[cfg(feature = "diagnose")]
1550		if let Ok(ret) = ret {
1551			return to_result("glCopyTexImage1D", ret, self.glGetError());
1552		} else {
1553			return ret
1554		}
1555		#[cfg(not(feature = "diagnose"))]
1556		return ret;
1557	}
1558	#[inline(always)]
1559	fn glCopyTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei, border: GLint) -> Result<()> {
1560		let ret = process_catch("glCopyTexImage2D", catch_unwind(||(self.copyteximage2d)(target, level, internalformat, x, y, width, height, border)));
1561		#[cfg(feature = "diagnose")]
1562		if let Ok(ret) = ret {
1563			return to_result("glCopyTexImage2D", ret, self.glGetError());
1564		} else {
1565			return ret
1566		}
1567		#[cfg(not(feature = "diagnose"))]
1568		return ret;
1569	}
1570	#[inline(always)]
1571	fn glCopyTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, x: GLint, y: GLint, width: GLsizei) -> Result<()> {
1572		let ret = process_catch("glCopyTexSubImage1D", catch_unwind(||(self.copytexsubimage1d)(target, level, xoffset, x, y, width)));
1573		#[cfg(feature = "diagnose")]
1574		if let Ok(ret) = ret {
1575			return to_result("glCopyTexSubImage1D", ret, self.glGetError());
1576		} else {
1577			return ret
1578		}
1579		#[cfg(not(feature = "diagnose"))]
1580		return ret;
1581	}
1582	#[inline(always)]
1583	fn glCopyTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
1584		let ret = process_catch("glCopyTexSubImage2D", catch_unwind(||(self.copytexsubimage2d)(target, level, xoffset, yoffset, x, y, width, height)));
1585		#[cfg(feature = "diagnose")]
1586		if let Ok(ret) = ret {
1587			return to_result("glCopyTexSubImage2D", ret, self.glGetError());
1588		} else {
1589			return ret
1590		}
1591		#[cfg(not(feature = "diagnose"))]
1592		return ret;
1593	}
1594	#[inline(always)]
1595	fn glTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
1596		let ret = process_catch("glTexSubImage1D", catch_unwind(||(self.texsubimage1d)(target, level, xoffset, width, format, type_, pixels)));
1597		#[cfg(feature = "diagnose")]
1598		if let Ok(ret) = ret {
1599			return to_result("glTexSubImage1D", ret, self.glGetError());
1600		} else {
1601			return ret
1602		}
1603		#[cfg(not(feature = "diagnose"))]
1604		return ret;
1605	}
1606	#[inline(always)]
1607	fn glTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
1608		let ret = process_catch("glTexSubImage2D", catch_unwind(||(self.texsubimage2d)(target, level, xoffset, yoffset, width, height, format, type_, pixels)));
1609		#[cfg(feature = "diagnose")]
1610		if let Ok(ret) = ret {
1611			return to_result("glTexSubImage2D", ret, self.glGetError());
1612		} else {
1613			return ret
1614		}
1615		#[cfg(not(feature = "diagnose"))]
1616		return ret;
1617	}
1618	#[inline(always)]
1619	fn glBindTexture(&self, target: GLenum, texture: GLuint) -> Result<()> {
1620		let ret = process_catch("glBindTexture", catch_unwind(||(self.bindtexture)(target, texture)));
1621		#[cfg(feature = "diagnose")]
1622		if let Ok(ret) = ret {
1623			return to_result("glBindTexture", ret, self.glGetError());
1624		} else {
1625			return ret
1626		}
1627		#[cfg(not(feature = "diagnose"))]
1628		return ret;
1629	}
1630	#[inline(always)]
1631	fn glDeleteTextures(&self, n: GLsizei, textures: *const GLuint) -> Result<()> {
1632		let ret = process_catch("glDeleteTextures", catch_unwind(||(self.deletetextures)(n, textures)));
1633		#[cfg(feature = "diagnose")]
1634		if let Ok(ret) = ret {
1635			return to_result("glDeleteTextures", ret, self.glGetError());
1636		} else {
1637			return ret
1638		}
1639		#[cfg(not(feature = "diagnose"))]
1640		return ret;
1641	}
1642	#[inline(always)]
1643	fn glGenTextures(&self, n: GLsizei, textures: *mut GLuint) -> Result<()> {
1644		let ret = process_catch("glGenTextures", catch_unwind(||(self.gentextures)(n, textures)));
1645		#[cfg(feature = "diagnose")]
1646		if let Ok(ret) = ret {
1647			return to_result("glGenTextures", ret, self.glGetError());
1648		} else {
1649			return ret
1650		}
1651		#[cfg(not(feature = "diagnose"))]
1652		return ret;
1653	}
1654	#[inline(always)]
1655	fn glIsTexture(&self, texture: GLuint) -> Result<GLboolean> {
1656		let ret = process_catch("glIsTexture", catch_unwind(||(self.istexture)(texture)));
1657		#[cfg(feature = "diagnose")]
1658		if let Ok(ret) = ret {
1659			return to_result("glIsTexture", ret, self.glGetError());
1660		} else {
1661			return ret
1662		}
1663		#[cfg(not(feature = "diagnose"))]
1664		return ret;
1665	}
1666}
1667
1668impl Version11 {
1669	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
1670		let (_spec, major, minor, release) = base.get_version();
1671		if (major, minor, release) < (1, 1, 0) {
1672			return Self::default();
1673		}
1674		Self {
1675			available: true,
1676			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
1677			drawarrays: {let proc = get_proc_address("glDrawArrays"); if proc == null() {dummy_pfngldrawarraysproc} else {unsafe{transmute(proc)}}},
1678			drawelements: {let proc = get_proc_address("glDrawElements"); if proc == null() {dummy_pfngldrawelementsproc} else {unsafe{transmute(proc)}}},
1679			getpointerv: {let proc = get_proc_address("glGetPointerv"); if proc == null() {dummy_pfnglgetpointervproc} else {unsafe{transmute(proc)}}},
1680			polygonoffset: {let proc = get_proc_address("glPolygonOffset"); if proc == null() {dummy_pfnglpolygonoffsetproc} else {unsafe{transmute(proc)}}},
1681			copyteximage1d: {let proc = get_proc_address("glCopyTexImage1D"); if proc == null() {dummy_pfnglcopyteximage1dproc} else {unsafe{transmute(proc)}}},
1682			copyteximage2d: {let proc = get_proc_address("glCopyTexImage2D"); if proc == null() {dummy_pfnglcopyteximage2dproc} else {unsafe{transmute(proc)}}},
1683			copytexsubimage1d: {let proc = get_proc_address("glCopyTexSubImage1D"); if proc == null() {dummy_pfnglcopytexsubimage1dproc} else {unsafe{transmute(proc)}}},
1684			copytexsubimage2d: {let proc = get_proc_address("glCopyTexSubImage2D"); if proc == null() {dummy_pfnglcopytexsubimage2dproc} else {unsafe{transmute(proc)}}},
1685			texsubimage1d: {let proc = get_proc_address("glTexSubImage1D"); if proc == null() {dummy_pfngltexsubimage1dproc} else {unsafe{transmute(proc)}}},
1686			texsubimage2d: {let proc = get_proc_address("glTexSubImage2D"); if proc == null() {dummy_pfngltexsubimage2dproc} else {unsafe{transmute(proc)}}},
1687			bindtexture: {let proc = get_proc_address("glBindTexture"); if proc == null() {dummy_pfnglbindtextureproc} else {unsafe{transmute(proc)}}},
1688			deletetextures: {let proc = get_proc_address("glDeleteTextures"); if proc == null() {dummy_pfngldeletetexturesproc} else {unsafe{transmute(proc)}}},
1689			gentextures: {let proc = get_proc_address("glGenTextures"); if proc == null() {dummy_pfnglgentexturesproc} else {unsafe{transmute(proc)}}},
1690			istexture: {let proc = get_proc_address("glIsTexture"); if proc == null() {dummy_pfnglistextureproc} else {unsafe{transmute(proc)}}},
1691		}
1692	}
1693	#[inline(always)]
1694	pub fn get_available(&self) -> bool {
1695		self.available
1696	}
1697}
1698
1699impl Default for Version11 {
1700	fn default() -> Self {
1701		Self {
1702			available: false,
1703			geterror: dummy_pfnglgeterrorproc,
1704			drawarrays: dummy_pfngldrawarraysproc,
1705			drawelements: dummy_pfngldrawelementsproc,
1706			getpointerv: dummy_pfnglgetpointervproc,
1707			polygonoffset: dummy_pfnglpolygonoffsetproc,
1708			copyteximage1d: dummy_pfnglcopyteximage1dproc,
1709			copyteximage2d: dummy_pfnglcopyteximage2dproc,
1710			copytexsubimage1d: dummy_pfnglcopytexsubimage1dproc,
1711			copytexsubimage2d: dummy_pfnglcopytexsubimage2dproc,
1712			texsubimage1d: dummy_pfngltexsubimage1dproc,
1713			texsubimage2d: dummy_pfngltexsubimage2dproc,
1714			bindtexture: dummy_pfnglbindtextureproc,
1715			deletetextures: dummy_pfngldeletetexturesproc,
1716			gentextures: dummy_pfnglgentexturesproc,
1717			istexture: dummy_pfnglistextureproc,
1718		}
1719	}
1720}
1721impl Debug for Version11 {
1722	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
1723		if self.available {
1724			f.debug_struct("Version11")
1725			.field("available", &self.available)
1726			.field("drawarrays", unsafe{if transmute::<_, *const c_void>(self.drawarrays) == (dummy_pfngldrawarraysproc as *const c_void) {&null::<PFNGLDRAWARRAYSPROC>()} else {&self.drawarrays}})
1727			.field("drawelements", unsafe{if transmute::<_, *const c_void>(self.drawelements) == (dummy_pfngldrawelementsproc as *const c_void) {&null::<PFNGLDRAWELEMENTSPROC>()} else {&self.drawelements}})
1728			.field("getpointerv", unsafe{if transmute::<_, *const c_void>(self.getpointerv) == (dummy_pfnglgetpointervproc as *const c_void) {&null::<PFNGLGETPOINTERVPROC>()} else {&self.getpointerv}})
1729			.field("polygonoffset", unsafe{if transmute::<_, *const c_void>(self.polygonoffset) == (dummy_pfnglpolygonoffsetproc as *const c_void) {&null::<PFNGLPOLYGONOFFSETPROC>()} else {&self.polygonoffset}})
1730			.field("copyteximage1d", unsafe{if transmute::<_, *const c_void>(self.copyteximage1d) == (dummy_pfnglcopyteximage1dproc as *const c_void) {&null::<PFNGLCOPYTEXIMAGE1DPROC>()} else {&self.copyteximage1d}})
1731			.field("copyteximage2d", unsafe{if transmute::<_, *const c_void>(self.copyteximage2d) == (dummy_pfnglcopyteximage2dproc as *const c_void) {&null::<PFNGLCOPYTEXIMAGE2DPROC>()} else {&self.copyteximage2d}})
1732			.field("copytexsubimage1d", unsafe{if transmute::<_, *const c_void>(self.copytexsubimage1d) == (dummy_pfnglcopytexsubimage1dproc as *const c_void) {&null::<PFNGLCOPYTEXSUBIMAGE1DPROC>()} else {&self.copytexsubimage1d}})
1733			.field("copytexsubimage2d", unsafe{if transmute::<_, *const c_void>(self.copytexsubimage2d) == (dummy_pfnglcopytexsubimage2dproc as *const c_void) {&null::<PFNGLCOPYTEXSUBIMAGE2DPROC>()} else {&self.copytexsubimage2d}})
1734			.field("texsubimage1d", unsafe{if transmute::<_, *const c_void>(self.texsubimage1d) == (dummy_pfngltexsubimage1dproc as *const c_void) {&null::<PFNGLTEXSUBIMAGE1DPROC>()} else {&self.texsubimage1d}})
1735			.field("texsubimage2d", unsafe{if transmute::<_, *const c_void>(self.texsubimage2d) == (dummy_pfngltexsubimage2dproc as *const c_void) {&null::<PFNGLTEXSUBIMAGE2DPROC>()} else {&self.texsubimage2d}})
1736			.field("bindtexture", unsafe{if transmute::<_, *const c_void>(self.bindtexture) == (dummy_pfnglbindtextureproc as *const c_void) {&null::<PFNGLBINDTEXTUREPROC>()} else {&self.bindtexture}})
1737			.field("deletetextures", unsafe{if transmute::<_, *const c_void>(self.deletetextures) == (dummy_pfngldeletetexturesproc as *const c_void) {&null::<PFNGLDELETETEXTURESPROC>()} else {&self.deletetextures}})
1738			.field("gentextures", unsafe{if transmute::<_, *const c_void>(self.gentextures) == (dummy_pfnglgentexturesproc as *const c_void) {&null::<PFNGLGENTEXTURESPROC>()} else {&self.gentextures}})
1739			.field("istexture", unsafe{if transmute::<_, *const c_void>(self.istexture) == (dummy_pfnglistextureproc as *const c_void) {&null::<PFNGLISTEXTUREPROC>()} else {&self.istexture}})
1740			.finish()
1741		} else {
1742			f.debug_struct("Version11")
1743			.field("available", &self.available)
1744			.finish_non_exhaustive()
1745		}
1746	}
1747}
1748type PFNGLDRAWRANGEELEMENTSPROC = extern "system" fn(GLenum, GLuint, GLuint, GLsizei, GLenum, *const c_void);
1749type PFNGLTEXIMAGE3DPROC = extern "system" fn(GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, *const c_void);
1750type PFNGLTEXSUBIMAGE3DPROC = extern "system" fn(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, *const c_void);
1751type PFNGLCOPYTEXSUBIMAGE3DPROC = extern "system" fn(GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
1752extern "system" fn dummy_pfngldrawrangeelementsproc (_: GLenum, _: GLuint, _: GLuint, _: GLsizei, _: GLenum, _: *const c_void) {
1753	panic!("OpenGL function pointer `glDrawRangeElements()` is null.")
1754}
1755extern "system" fn dummy_pfnglteximage3dproc (_: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLint, _: GLenum, _: GLenum, _: *const c_void) {
1756	panic!("OpenGL function pointer `glTexImage3D()` is null.")
1757}
1758extern "system" fn dummy_pfngltexsubimage3dproc (_: GLenum, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void) {
1759	panic!("OpenGL function pointer `glTexSubImage3D()` is null.")
1760}
1761extern "system" fn dummy_pfnglcopytexsubimage3dproc (_: GLenum, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei) {
1762	panic!("OpenGL function pointer `glCopyTexSubImage3D()` is null.")
1763}
1764pub const GL_UNSIGNED_BYTE_3_3_2: GLenum = 0x8032;
1765pub const GL_UNSIGNED_SHORT_4_4_4_4: GLenum = 0x8033;
1766pub const GL_UNSIGNED_SHORT_5_5_5_1: GLenum = 0x8034;
1767pub const GL_UNSIGNED_INT_8_8_8_8: GLenum = 0x8035;
1768pub const GL_UNSIGNED_INT_10_10_10_2: GLenum = 0x8036;
1769pub const GL_TEXTURE_BINDING_3D: GLenum = 0x806A;
1770pub const GL_PACK_SKIP_IMAGES: GLenum = 0x806B;
1771pub const GL_PACK_IMAGE_HEIGHT: GLenum = 0x806C;
1772pub const GL_UNPACK_SKIP_IMAGES: GLenum = 0x806D;
1773pub const GL_UNPACK_IMAGE_HEIGHT: GLenum = 0x806E;
1774pub const GL_TEXTURE_3D: GLenum = 0x806F;
1775pub const GL_PROXY_TEXTURE_3D: GLenum = 0x8070;
1776pub const GL_TEXTURE_DEPTH: GLenum = 0x8071;
1777pub const GL_TEXTURE_WRAP_R: GLenum = 0x8072;
1778pub const GL_MAX_3D_TEXTURE_SIZE: GLenum = 0x8073;
1779pub const GL_UNSIGNED_BYTE_2_3_3_REV: GLenum = 0x8362;
1780pub const GL_UNSIGNED_SHORT_5_6_5: GLenum = 0x8363;
1781pub const GL_UNSIGNED_SHORT_5_6_5_REV: GLenum = 0x8364;
1782pub const GL_UNSIGNED_SHORT_4_4_4_4_REV: GLenum = 0x8365;
1783pub const GL_UNSIGNED_SHORT_1_5_5_5_REV: GLenum = 0x8366;
1784pub const GL_UNSIGNED_INT_8_8_8_8_REV: GLenum = 0x8367;
1785pub const GL_UNSIGNED_INT_2_10_10_10_REV: GLenum = 0x8368;
1786pub const GL_BGR: GLenum = 0x80E0;
1787pub const GL_BGRA: GLenum = 0x80E1;
1788pub const GL_MAX_ELEMENTS_VERTICES: GLenum = 0x80E8;
1789pub const GL_MAX_ELEMENTS_INDICES: GLenum = 0x80E9;
1790pub const GL_CLAMP_TO_EDGE: GLint = 0x812F;
1791pub const GL_TEXTURE_MIN_LOD: GLenum = 0x813A;
1792pub const GL_TEXTURE_MAX_LOD: GLenum = 0x813B;
1793pub const GL_TEXTURE_BASE_LEVEL: GLenum = 0x813C;
1794pub const GL_TEXTURE_MAX_LEVEL: GLenum = 0x813D;
1795pub const GL_SMOOTH_POINT_SIZE_RANGE: GLenum = 0x0B12;
1796pub const GL_SMOOTH_POINT_SIZE_GRANULARITY: GLenum = 0x0B13;
1797pub const GL_SMOOTH_LINE_WIDTH_RANGE: GLenum = 0x0B22;
1798pub const GL_SMOOTH_LINE_WIDTH_GRANULARITY: GLenum = 0x0B23;
1799pub const GL_ALIASED_LINE_WIDTH_RANGE: GLenum = 0x846E;
1800pub const GL_RESCALE_NORMAL: GLenum = 0x803A;
1801pub const GL_LIGHT_MODEL_COLOR_CONTROL: GLenum = 0x81F8;
1802pub const GL_SINGLE_COLOR: GLenum = 0x81F9;
1803pub const GL_SEPARATE_SPECULAR_COLOR: GLenum = 0x81FA;
1804pub const GL_ALIASED_POINT_SIZE_RANGE: GLenum = 0x846D;
1805
1806pub trait GL_1_2 {
1807	fn glGetError(&self) -> GLenum;
1808	fn glDrawRangeElements(&self, mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type_: GLenum, indices: *const c_void) -> Result<()>;
1809	fn glTexImage3D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
1810	fn glTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
1811	fn glCopyTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
1812}
1813
1814#[derive(Clone, Copy, PartialEq, Eq, Hash)]
1815pub struct Version12 {
1816	available: bool,
1817	geterror: PFNGLGETERRORPROC,
1818	drawrangeelements: PFNGLDRAWRANGEELEMENTSPROC,
1819	teximage3d: PFNGLTEXIMAGE3DPROC,
1820	texsubimage3d: PFNGLTEXSUBIMAGE3DPROC,
1821	copytexsubimage3d: PFNGLCOPYTEXSUBIMAGE3DPROC,
1822}
1823
1824impl GL_1_2 for Version12 {
1825	#[inline(always)]
1826	fn glGetError(&self) -> GLenum {
1827		(self.geterror)()
1828	}
1829	#[inline(always)]
1830	fn glDrawRangeElements(&self, mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type_: GLenum, indices: *const c_void) -> Result<()> {
1831		let ret = process_catch("glDrawRangeElements", catch_unwind(||(self.drawrangeelements)(mode, start, end, count, type_, indices)));
1832		#[cfg(feature = "diagnose")]
1833		if let Ok(ret) = ret {
1834			return to_result("glDrawRangeElements", ret, self.glGetError());
1835		} else {
1836			return ret
1837		}
1838		#[cfg(not(feature = "diagnose"))]
1839		return ret;
1840	}
1841	#[inline(always)]
1842	fn glTexImage3D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
1843		let ret = process_catch("glTexImage3D", catch_unwind(||(self.teximage3d)(target, level, internalformat, width, height, depth, border, format, type_, pixels)));
1844		#[cfg(feature = "diagnose")]
1845		if let Ok(ret) = ret {
1846			return to_result("glTexImage3D", ret, self.glGetError());
1847		} else {
1848			return ret
1849		}
1850		#[cfg(not(feature = "diagnose"))]
1851		return ret;
1852	}
1853	#[inline(always)]
1854	fn glTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
1855		let ret = process_catch("glTexSubImage3D", catch_unwind(||(self.texsubimage3d)(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, pixels)));
1856		#[cfg(feature = "diagnose")]
1857		if let Ok(ret) = ret {
1858			return to_result("glTexSubImage3D", ret, self.glGetError());
1859		} else {
1860			return ret
1861		}
1862		#[cfg(not(feature = "diagnose"))]
1863		return ret;
1864	}
1865	#[inline(always)]
1866	fn glCopyTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
1867		let ret = process_catch("glCopyTexSubImage3D", catch_unwind(||(self.copytexsubimage3d)(target, level, xoffset, yoffset, zoffset, x, y, width, height)));
1868		#[cfg(feature = "diagnose")]
1869		if let Ok(ret) = ret {
1870			return to_result("glCopyTexSubImage3D", ret, self.glGetError());
1871		} else {
1872			return ret
1873		}
1874		#[cfg(not(feature = "diagnose"))]
1875		return ret;
1876	}
1877}
1878
1879impl Version12 {
1880	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
1881		let (_spec, major, minor, release) = base.get_version();
1882		if (major, minor, release) < (1, 2, 0) {
1883			return Self::default();
1884		}
1885		Self {
1886			available: true,
1887			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
1888			drawrangeelements: {let proc = get_proc_address("glDrawRangeElements"); if proc == null() {dummy_pfngldrawrangeelementsproc} else {unsafe{transmute(proc)}}},
1889			teximage3d: {let proc = get_proc_address("glTexImage3D"); if proc == null() {dummy_pfnglteximage3dproc} else {unsafe{transmute(proc)}}},
1890			texsubimage3d: {let proc = get_proc_address("glTexSubImage3D"); if proc == null() {dummy_pfngltexsubimage3dproc} else {unsafe{transmute(proc)}}},
1891			copytexsubimage3d: {let proc = get_proc_address("glCopyTexSubImage3D"); if proc == null() {dummy_pfnglcopytexsubimage3dproc} else {unsafe{transmute(proc)}}},
1892		}
1893	}
1894	#[inline(always)]
1895	pub fn get_available(&self) -> bool {
1896		self.available
1897	}
1898}
1899
1900impl Default for Version12 {
1901	fn default() -> Self {
1902		Self {
1903			available: false,
1904			geterror: dummy_pfnglgeterrorproc,
1905			drawrangeelements: dummy_pfngldrawrangeelementsproc,
1906			teximage3d: dummy_pfnglteximage3dproc,
1907			texsubimage3d: dummy_pfngltexsubimage3dproc,
1908			copytexsubimage3d: dummy_pfnglcopytexsubimage3dproc,
1909		}
1910	}
1911}
1912impl Debug for Version12 {
1913	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
1914		if self.available {
1915			f.debug_struct("Version12")
1916			.field("available", &self.available)
1917			.field("drawrangeelements", unsafe{if transmute::<_, *const c_void>(self.drawrangeelements) == (dummy_pfngldrawrangeelementsproc as *const c_void) {&null::<PFNGLDRAWRANGEELEMENTSPROC>()} else {&self.drawrangeelements}})
1918			.field("teximage3d", unsafe{if transmute::<_, *const c_void>(self.teximage3d) == (dummy_pfnglteximage3dproc as *const c_void) {&null::<PFNGLTEXIMAGE3DPROC>()} else {&self.teximage3d}})
1919			.field("texsubimage3d", unsafe{if transmute::<_, *const c_void>(self.texsubimage3d) == (dummy_pfngltexsubimage3dproc as *const c_void) {&null::<PFNGLTEXSUBIMAGE3DPROC>()} else {&self.texsubimage3d}})
1920			.field("copytexsubimage3d", unsafe{if transmute::<_, *const c_void>(self.copytexsubimage3d) == (dummy_pfnglcopytexsubimage3dproc as *const c_void) {&null::<PFNGLCOPYTEXSUBIMAGE3DPROC>()} else {&self.copytexsubimage3d}})
1921			.finish()
1922		} else {
1923			f.debug_struct("Version12")
1924			.field("available", &self.available)
1925			.finish_non_exhaustive()
1926		}
1927	}
1928}
1929type PFNGLACTIVETEXTUREPROC = extern "system" fn(GLenum);
1930type PFNGLSAMPLECOVERAGEPROC = extern "system" fn(GLfloat, GLboolean);
1931type PFNGLCOMPRESSEDTEXIMAGE3DPROC = extern "system" fn(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, *const c_void);
1932type PFNGLCOMPRESSEDTEXIMAGE2DPROC = extern "system" fn(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, *const c_void);
1933type PFNGLCOMPRESSEDTEXIMAGE1DPROC = extern "system" fn(GLenum, GLint, GLenum, GLsizei, GLint, GLsizei, *const c_void);
1934type PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC = extern "system" fn(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, *const c_void);
1935type PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC = extern "system" fn(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, *const c_void);
1936type PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC = extern "system" fn(GLenum, GLint, GLint, GLsizei, GLenum, GLsizei, *const c_void);
1937type PFNGLGETCOMPRESSEDTEXIMAGEPROC = extern "system" fn(GLenum, GLint, *mut c_void);
1938type PFNGLCLIENTACTIVETEXTUREPROC = extern "system" fn(GLenum);
1939type PFNGLMULTITEXCOORD1DPROC = extern "system" fn(GLenum, GLdouble);
1940type PFNGLMULTITEXCOORD1DVPROC = extern "system" fn(GLenum, *const GLdouble);
1941type PFNGLMULTITEXCOORD1FPROC = extern "system" fn(GLenum, GLfloat);
1942type PFNGLMULTITEXCOORD1FVPROC = extern "system" fn(GLenum, *const GLfloat);
1943type PFNGLMULTITEXCOORD1IPROC = extern "system" fn(GLenum, GLint);
1944type PFNGLMULTITEXCOORD1IVPROC = extern "system" fn(GLenum, *const GLint);
1945type PFNGLMULTITEXCOORD1SPROC = extern "system" fn(GLenum, GLshort);
1946type PFNGLMULTITEXCOORD1SVPROC = extern "system" fn(GLenum, *const GLshort);
1947type PFNGLMULTITEXCOORD2DPROC = extern "system" fn(GLenum, GLdouble, GLdouble);
1948type PFNGLMULTITEXCOORD2DVPROC = extern "system" fn(GLenum, *const GLdouble);
1949type PFNGLMULTITEXCOORD2FPROC = extern "system" fn(GLenum, GLfloat, GLfloat);
1950type PFNGLMULTITEXCOORD2FVPROC = extern "system" fn(GLenum, *const GLfloat);
1951type PFNGLMULTITEXCOORD2IPROC = extern "system" fn(GLenum, GLint, GLint);
1952type PFNGLMULTITEXCOORD2IVPROC = extern "system" fn(GLenum, *const GLint);
1953type PFNGLMULTITEXCOORD2SPROC = extern "system" fn(GLenum, GLshort, GLshort);
1954type PFNGLMULTITEXCOORD2SVPROC = extern "system" fn(GLenum, *const GLshort);
1955type PFNGLMULTITEXCOORD3DPROC = extern "system" fn(GLenum, GLdouble, GLdouble, GLdouble);
1956type PFNGLMULTITEXCOORD3DVPROC = extern "system" fn(GLenum, *const GLdouble);
1957type PFNGLMULTITEXCOORD3FPROC = extern "system" fn(GLenum, GLfloat, GLfloat, GLfloat);
1958type PFNGLMULTITEXCOORD3FVPROC = extern "system" fn(GLenum, *const GLfloat);
1959type PFNGLMULTITEXCOORD3IPROC = extern "system" fn(GLenum, GLint, GLint, GLint);
1960type PFNGLMULTITEXCOORD3IVPROC = extern "system" fn(GLenum, *const GLint);
1961type PFNGLMULTITEXCOORD3SPROC = extern "system" fn(GLenum, GLshort, GLshort, GLshort);
1962type PFNGLMULTITEXCOORD3SVPROC = extern "system" fn(GLenum, *const GLshort);
1963type PFNGLMULTITEXCOORD4DPROC = extern "system" fn(GLenum, GLdouble, GLdouble, GLdouble, GLdouble);
1964type PFNGLMULTITEXCOORD4DVPROC = extern "system" fn(GLenum, *const GLdouble);
1965type PFNGLMULTITEXCOORD4FPROC = extern "system" fn(GLenum, GLfloat, GLfloat, GLfloat, GLfloat);
1966type PFNGLMULTITEXCOORD4FVPROC = extern "system" fn(GLenum, *const GLfloat);
1967type PFNGLMULTITEXCOORD4IPROC = extern "system" fn(GLenum, GLint, GLint, GLint, GLint);
1968type PFNGLMULTITEXCOORD4IVPROC = extern "system" fn(GLenum, *const GLint);
1969type PFNGLMULTITEXCOORD4SPROC = extern "system" fn(GLenum, GLshort, GLshort, GLshort, GLshort);
1970type PFNGLMULTITEXCOORD4SVPROC = extern "system" fn(GLenum, *const GLshort);
1971type PFNGLLOADTRANSPOSEMATRIXFPROC = extern "system" fn(*const GLfloat);
1972type PFNGLLOADTRANSPOSEMATRIXDPROC = extern "system" fn(*const GLdouble);
1973type PFNGLMULTTRANSPOSEMATRIXFPROC = extern "system" fn(*const GLfloat);
1974type PFNGLMULTTRANSPOSEMATRIXDPROC = extern "system" fn(*const GLdouble);
1975extern "system" fn dummy_pfnglactivetextureproc (_: GLenum) {
1976	panic!("OpenGL function pointer `glActiveTexture()` is null.")
1977}
1978extern "system" fn dummy_pfnglsamplecoverageproc (_: GLfloat, _: GLboolean) {
1979	panic!("OpenGL function pointer `glSampleCoverage()` is null.")
1980}
1981extern "system" fn dummy_pfnglcompressedteximage3dproc (_: GLenum, _: GLint, _: GLenum, _: GLsizei, _: GLsizei, _: GLsizei, _: GLint, _: GLsizei, _: *const c_void) {
1982	panic!("OpenGL function pointer `glCompressedTexImage3D()` is null.")
1983}
1984extern "system" fn dummy_pfnglcompressedteximage2dproc (_: GLenum, _: GLint, _: GLenum, _: GLsizei, _: GLsizei, _: GLint, _: GLsizei, _: *const c_void) {
1985	panic!("OpenGL function pointer `glCompressedTexImage2D()` is null.")
1986}
1987extern "system" fn dummy_pfnglcompressedteximage1dproc (_: GLenum, _: GLint, _: GLenum, _: GLsizei, _: GLint, _: GLsizei, _: *const c_void) {
1988	panic!("OpenGL function pointer `glCompressedTexImage1D()` is null.")
1989}
1990extern "system" fn dummy_pfnglcompressedtexsubimage3dproc (_: GLenum, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLenum, _: GLsizei, _: *const c_void) {
1991	panic!("OpenGL function pointer `glCompressedTexSubImage3D()` is null.")
1992}
1993extern "system" fn dummy_pfnglcompressedtexsubimage2dproc (_: GLenum, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLenum, _: GLsizei, _: *const c_void) {
1994	panic!("OpenGL function pointer `glCompressedTexSubImage2D()` is null.")
1995}
1996extern "system" fn dummy_pfnglcompressedtexsubimage1dproc (_: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLenum, _: GLsizei, _: *const c_void) {
1997	panic!("OpenGL function pointer `glCompressedTexSubImage1D()` is null.")
1998}
1999extern "system" fn dummy_pfnglgetcompressedteximageproc (_: GLenum, _: GLint, _: *mut c_void) {
2000	panic!("OpenGL function pointer `glGetCompressedTexImage()` is null.")
2001}
2002extern "system" fn dummy_pfnglclientactivetextureproc (_: GLenum) {
2003	panic!("OpenGL function pointer `glClientActiveTexture()` is null.")
2004}
2005extern "system" fn dummy_pfnglmultitexcoord1dproc (_: GLenum, _: GLdouble) {
2006	panic!("OpenGL function pointer `glMultiTexCoord1d()` is null.")
2007}
2008extern "system" fn dummy_pfnglmultitexcoord1dvproc (_: GLenum, _: *const GLdouble) {
2009	panic!("OpenGL function pointer `glMultiTexCoord1dv()` is null.")
2010}
2011extern "system" fn dummy_pfnglmultitexcoord1fproc (_: GLenum, _: GLfloat) {
2012	panic!("OpenGL function pointer `glMultiTexCoord1f()` is null.")
2013}
2014extern "system" fn dummy_pfnglmultitexcoord1fvproc (_: GLenum, _: *const GLfloat) {
2015	panic!("OpenGL function pointer `glMultiTexCoord1fv()` is null.")
2016}
2017extern "system" fn dummy_pfnglmultitexcoord1iproc (_: GLenum, _: GLint) {
2018	panic!("OpenGL function pointer `glMultiTexCoord1i()` is null.")
2019}
2020extern "system" fn dummy_pfnglmultitexcoord1ivproc (_: GLenum, _: *const GLint) {
2021	panic!("OpenGL function pointer `glMultiTexCoord1iv()` is null.")
2022}
2023extern "system" fn dummy_pfnglmultitexcoord1sproc (_: GLenum, _: GLshort) {
2024	panic!("OpenGL function pointer `glMultiTexCoord1s()` is null.")
2025}
2026extern "system" fn dummy_pfnglmultitexcoord1svproc (_: GLenum, _: *const GLshort) {
2027	panic!("OpenGL function pointer `glMultiTexCoord1sv()` is null.")
2028}
2029extern "system" fn dummy_pfnglmultitexcoord2dproc (_: GLenum, _: GLdouble, _: GLdouble) {
2030	panic!("OpenGL function pointer `glMultiTexCoord2d()` is null.")
2031}
2032extern "system" fn dummy_pfnglmultitexcoord2dvproc (_: GLenum, _: *const GLdouble) {
2033	panic!("OpenGL function pointer `glMultiTexCoord2dv()` is null.")
2034}
2035extern "system" fn dummy_pfnglmultitexcoord2fproc (_: GLenum, _: GLfloat, _: GLfloat) {
2036	panic!("OpenGL function pointer `glMultiTexCoord2f()` is null.")
2037}
2038extern "system" fn dummy_pfnglmultitexcoord2fvproc (_: GLenum, _: *const GLfloat) {
2039	panic!("OpenGL function pointer `glMultiTexCoord2fv()` is null.")
2040}
2041extern "system" fn dummy_pfnglmultitexcoord2iproc (_: GLenum, _: GLint, _: GLint) {
2042	panic!("OpenGL function pointer `glMultiTexCoord2i()` is null.")
2043}
2044extern "system" fn dummy_pfnglmultitexcoord2ivproc (_: GLenum, _: *const GLint) {
2045	panic!("OpenGL function pointer `glMultiTexCoord2iv()` is null.")
2046}
2047extern "system" fn dummy_pfnglmultitexcoord2sproc (_: GLenum, _: GLshort, _: GLshort) {
2048	panic!("OpenGL function pointer `glMultiTexCoord2s()` is null.")
2049}
2050extern "system" fn dummy_pfnglmultitexcoord2svproc (_: GLenum, _: *const GLshort) {
2051	panic!("OpenGL function pointer `glMultiTexCoord2sv()` is null.")
2052}
2053extern "system" fn dummy_pfnglmultitexcoord3dproc (_: GLenum, _: GLdouble, _: GLdouble, _: GLdouble) {
2054	panic!("OpenGL function pointer `glMultiTexCoord3d()` is null.")
2055}
2056extern "system" fn dummy_pfnglmultitexcoord3dvproc (_: GLenum, _: *const GLdouble) {
2057	panic!("OpenGL function pointer `glMultiTexCoord3dv()` is null.")
2058}
2059extern "system" fn dummy_pfnglmultitexcoord3fproc (_: GLenum, _: GLfloat, _: GLfloat, _: GLfloat) {
2060	panic!("OpenGL function pointer `glMultiTexCoord3f()` is null.")
2061}
2062extern "system" fn dummy_pfnglmultitexcoord3fvproc (_: GLenum, _: *const GLfloat) {
2063	panic!("OpenGL function pointer `glMultiTexCoord3fv()` is null.")
2064}
2065extern "system" fn dummy_pfnglmultitexcoord3iproc (_: GLenum, _: GLint, _: GLint, _: GLint) {
2066	panic!("OpenGL function pointer `glMultiTexCoord3i()` is null.")
2067}
2068extern "system" fn dummy_pfnglmultitexcoord3ivproc (_: GLenum, _: *const GLint) {
2069	panic!("OpenGL function pointer `glMultiTexCoord3iv()` is null.")
2070}
2071extern "system" fn dummy_pfnglmultitexcoord3sproc (_: GLenum, _: GLshort, _: GLshort, _: GLshort) {
2072	panic!("OpenGL function pointer `glMultiTexCoord3s()` is null.")
2073}
2074extern "system" fn dummy_pfnglmultitexcoord3svproc (_: GLenum, _: *const GLshort) {
2075	panic!("OpenGL function pointer `glMultiTexCoord3sv()` is null.")
2076}
2077extern "system" fn dummy_pfnglmultitexcoord4dproc (_: GLenum, _: GLdouble, _: GLdouble, _: GLdouble, _: GLdouble) {
2078	panic!("OpenGL function pointer `glMultiTexCoord4d()` is null.")
2079}
2080extern "system" fn dummy_pfnglmultitexcoord4dvproc (_: GLenum, _: *const GLdouble) {
2081	panic!("OpenGL function pointer `glMultiTexCoord4dv()` is null.")
2082}
2083extern "system" fn dummy_pfnglmultitexcoord4fproc (_: GLenum, _: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat) {
2084	panic!("OpenGL function pointer `glMultiTexCoord4f()` is null.")
2085}
2086extern "system" fn dummy_pfnglmultitexcoord4fvproc (_: GLenum, _: *const GLfloat) {
2087	panic!("OpenGL function pointer `glMultiTexCoord4fv()` is null.")
2088}
2089extern "system" fn dummy_pfnglmultitexcoord4iproc (_: GLenum, _: GLint, _: GLint, _: GLint, _: GLint) {
2090	panic!("OpenGL function pointer `glMultiTexCoord4i()` is null.")
2091}
2092extern "system" fn dummy_pfnglmultitexcoord4ivproc (_: GLenum, _: *const GLint) {
2093	panic!("OpenGL function pointer `glMultiTexCoord4iv()` is null.")
2094}
2095extern "system" fn dummy_pfnglmultitexcoord4sproc (_: GLenum, _: GLshort, _: GLshort, _: GLshort, _: GLshort) {
2096	panic!("OpenGL function pointer `glMultiTexCoord4s()` is null.")
2097}
2098extern "system" fn dummy_pfnglmultitexcoord4svproc (_: GLenum, _: *const GLshort) {
2099	panic!("OpenGL function pointer `glMultiTexCoord4sv()` is null.")
2100}
2101extern "system" fn dummy_pfnglloadtransposematrixfproc (_: *const GLfloat) {
2102	panic!("OpenGL function pointer `glLoadTransposeMatrixf()` is null.")
2103}
2104extern "system" fn dummy_pfnglloadtransposematrixdproc (_: *const GLdouble) {
2105	panic!("OpenGL function pointer `glLoadTransposeMatrixd()` is null.")
2106}
2107extern "system" fn dummy_pfnglmulttransposematrixfproc (_: *const GLfloat) {
2108	panic!("OpenGL function pointer `glMultTransposeMatrixf()` is null.")
2109}
2110extern "system" fn dummy_pfnglmulttransposematrixdproc (_: *const GLdouble) {
2111	panic!("OpenGL function pointer `glMultTransposeMatrixd()` is null.")
2112}
2113pub const GL_TEXTURE0: GLenum = 0x84C0;
2114pub const GL_TEXTURE1: GLenum = 0x84C1;
2115pub const GL_TEXTURE2: GLenum = 0x84C2;
2116pub const GL_TEXTURE3: GLenum = 0x84C3;
2117pub const GL_TEXTURE4: GLenum = 0x84C4;
2118pub const GL_TEXTURE5: GLenum = 0x84C5;
2119pub const GL_TEXTURE6: GLenum = 0x84C6;
2120pub const GL_TEXTURE7: GLenum = 0x84C7;
2121pub const GL_TEXTURE8: GLenum = 0x84C8;
2122pub const GL_TEXTURE9: GLenum = 0x84C9;
2123pub const GL_TEXTURE10: GLenum = 0x84CA;
2124pub const GL_TEXTURE11: GLenum = 0x84CB;
2125pub const GL_TEXTURE12: GLenum = 0x84CC;
2126pub const GL_TEXTURE13: GLenum = 0x84CD;
2127pub const GL_TEXTURE14: GLenum = 0x84CE;
2128pub const GL_TEXTURE15: GLenum = 0x84CF;
2129pub const GL_TEXTURE16: GLenum = 0x84D0;
2130pub const GL_TEXTURE17: GLenum = 0x84D1;
2131pub const GL_TEXTURE18: GLenum = 0x84D2;
2132pub const GL_TEXTURE19: GLenum = 0x84D3;
2133pub const GL_TEXTURE20: GLenum = 0x84D4;
2134pub const GL_TEXTURE21: GLenum = 0x84D5;
2135pub const GL_TEXTURE22: GLenum = 0x84D6;
2136pub const GL_TEXTURE23: GLenum = 0x84D7;
2137pub const GL_TEXTURE24: GLenum = 0x84D8;
2138pub const GL_TEXTURE25: GLenum = 0x84D9;
2139pub const GL_TEXTURE26: GLenum = 0x84DA;
2140pub const GL_TEXTURE27: GLenum = 0x84DB;
2141pub const GL_TEXTURE28: GLenum = 0x84DC;
2142pub const GL_TEXTURE29: GLenum = 0x84DD;
2143pub const GL_TEXTURE30: GLenum = 0x84DE;
2144pub const GL_TEXTURE31: GLenum = 0x84DF;
2145pub const GL_ACTIVE_TEXTURE: GLenum = 0x84E0;
2146pub const GL_MULTISAMPLE: GLenum = 0x809D;
2147pub const GL_SAMPLE_ALPHA_TO_COVERAGE: GLenum = 0x809E;
2148pub const GL_SAMPLE_ALPHA_TO_ONE: GLenum = 0x809F;
2149pub const GL_SAMPLE_COVERAGE: GLenum = 0x80A0;
2150pub const GL_SAMPLE_BUFFERS: GLenum = 0x80A8;
2151pub const GL_SAMPLES: GLenum = 0x80A9;
2152pub const GL_SAMPLE_COVERAGE_VALUE: GLenum = 0x80AA;
2153pub const GL_SAMPLE_COVERAGE_INVERT: GLenum = 0x80AB;
2154pub const GL_TEXTURE_CUBE_MAP: GLenum = 0x8513;
2155pub const GL_TEXTURE_BINDING_CUBE_MAP: GLenum = 0x8514;
2156pub const GL_TEXTURE_CUBE_MAP_POSITIVE_X: GLenum = 0x8515;
2157pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_X: GLenum = 0x8516;
2158pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Y: GLenum = 0x8517;
2159pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Y: GLenum = 0x8518;
2160pub const GL_TEXTURE_CUBE_MAP_POSITIVE_Z: GLenum = 0x8519;
2161pub const GL_TEXTURE_CUBE_MAP_NEGATIVE_Z: GLenum = 0x851A;
2162pub const GL_PROXY_TEXTURE_CUBE_MAP: GLenum = 0x851B;
2163pub const GL_MAX_CUBE_MAP_TEXTURE_SIZE: GLenum = 0x851C;
2164pub const GL_COMPRESSED_RGB: GLenum = 0x84ED;
2165pub const GL_COMPRESSED_RGBA: GLenum = 0x84EE;
2166pub const GL_TEXTURE_COMPRESSION_HINT: GLenum = 0x84EF;
2167pub const GL_TEXTURE_COMPRESSED_IMAGE_SIZE: GLenum = 0x86A0;
2168pub const GL_TEXTURE_COMPRESSED: GLenum = 0x86A1;
2169pub const GL_NUM_COMPRESSED_TEXTURE_FORMATS: GLenum = 0x86A2;
2170pub const GL_COMPRESSED_TEXTURE_FORMATS: GLenum = 0x86A3;
2171pub const GL_CLAMP_TO_BORDER: GLint = 0x812D;
2172pub const GL_CLIENT_ACTIVE_TEXTURE: GLenum = 0x84E1;
2173pub const GL_MAX_TEXTURE_UNITS: GLenum = 0x84E2;
2174pub const GL_TRANSPOSE_MODELVIEW_MATRIX: GLenum = 0x84E3;
2175pub const GL_TRANSPOSE_PROJECTION_MATRIX: GLenum = 0x84E4;
2176pub const GL_TRANSPOSE_TEXTURE_MATRIX: GLenum = 0x84E5;
2177pub const GL_TRANSPOSE_COLOR_MATRIX: GLenum = 0x84E6;
2178pub const GL_MULTISAMPLE_BIT: GLbitfield = 0x20000000;
2179pub const GL_NORMAL_MAP: GLenum = 0x8511;
2180pub const GL_REFLECTION_MAP: GLenum = 0x8512;
2181pub const GL_COMPRESSED_ALPHA: GLenum = 0x84E9;
2182pub const GL_COMPRESSED_LUMINANCE: GLenum = 0x84EA;
2183pub const GL_COMPRESSED_LUMINANCE_ALPHA: GLenum = 0x84EB;
2184pub const GL_COMPRESSED_INTENSITY: GLenum = 0x84EC;
2185pub const GL_COMBINE: GLenum = 0x8570;
2186pub const GL_COMBINE_RGB: GLenum = 0x8571;
2187pub const GL_COMBINE_ALPHA: GLenum = 0x8572;
2188pub const GL_SOURCE0_RGB: GLenum = 0x8580;
2189pub const GL_SOURCE1_RGB: GLenum = 0x8581;
2190pub const GL_SOURCE2_RGB: GLenum = 0x8582;
2191pub const GL_SOURCE0_ALPHA: GLenum = 0x8588;
2192pub const GL_SOURCE1_ALPHA: GLenum = 0x8589;
2193pub const GL_SOURCE2_ALPHA: GLenum = 0x858A;
2194pub const GL_OPERAND0_RGB: GLenum = 0x8590;
2195pub const GL_OPERAND1_RGB: GLenum = 0x8591;
2196pub const GL_OPERAND2_RGB: GLenum = 0x8592;
2197pub const GL_OPERAND0_ALPHA: GLenum = 0x8598;
2198pub const GL_OPERAND1_ALPHA: GLenum = 0x8599;
2199pub const GL_OPERAND2_ALPHA: GLenum = 0x859A;
2200pub const GL_RGB_SCALE: GLenum = 0x8573;
2201pub const GL_ADD_SIGNED: GLenum = 0x8574;
2202pub const GL_INTERPOLATE: GLenum = 0x8575;
2203pub const GL_SUBTRACT: GLenum = 0x84E7;
2204pub const GL_CONSTANT: GLenum = 0x8576;
2205pub const GL_PRIMARY_COLOR: GLenum = 0x8577;
2206pub const GL_PREVIOUS: GLenum = 0x8578;
2207pub const GL_DOT3_RGB: GLenum = 0x86AE;
2208pub const GL_DOT3_RGBA: GLenum = 0x86AF;
2209
2210pub trait GL_1_3 {
2211	fn glGetError(&self) -> GLenum;
2212	fn glActiveTexture(&self, texture: GLenum) -> Result<()>;
2213	fn glSampleCoverage(&self, value: GLfloat, invert: GLboolean) -> Result<()>;
2214	fn glCompressedTexImage3D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()>;
2215	fn glCompressedTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()>;
2216	fn glCompressedTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()>;
2217	fn glCompressedTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()>;
2218	fn glCompressedTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()>;
2219	fn glCompressedTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()>;
2220	fn glGetCompressedTexImage(&self, target: GLenum, level: GLint, img: *mut c_void) -> Result<()>;
2221	fn glClientActiveTexture(&self, texture: GLenum) -> Result<()>;
2222	fn glMultiTexCoord1d(&self, target: GLenum, s: GLdouble) -> Result<()>;
2223	fn glMultiTexCoord1dv(&self, target: GLenum, v: *const GLdouble) -> Result<()>;
2224	fn glMultiTexCoord1f(&self, target: GLenum, s: GLfloat) -> Result<()>;
2225	fn glMultiTexCoord1fv(&self, target: GLenum, v: *const GLfloat) -> Result<()>;
2226	fn glMultiTexCoord1i(&self, target: GLenum, s: GLint) -> Result<()>;
2227	fn glMultiTexCoord1iv(&self, target: GLenum, v: *const GLint) -> Result<()>;
2228	fn glMultiTexCoord1s(&self, target: GLenum, s: GLshort) -> Result<()>;
2229	fn glMultiTexCoord1sv(&self, target: GLenum, v: *const GLshort) -> Result<()>;
2230	fn glMultiTexCoord2d(&self, target: GLenum, s: GLdouble, t: GLdouble) -> Result<()>;
2231	fn glMultiTexCoord2dv(&self, target: GLenum, v: *const GLdouble) -> Result<()>;
2232	fn glMultiTexCoord2f(&self, target: GLenum, s: GLfloat, t: GLfloat) -> Result<()>;
2233	fn glMultiTexCoord2fv(&self, target: GLenum, v: *const GLfloat) -> Result<()>;
2234	fn glMultiTexCoord2i(&self, target: GLenum, s: GLint, t: GLint) -> Result<()>;
2235	fn glMultiTexCoord2iv(&self, target: GLenum, v: *const GLint) -> Result<()>;
2236	fn glMultiTexCoord2s(&self, target: GLenum, s: GLshort, t: GLshort) -> Result<()>;
2237	fn glMultiTexCoord2sv(&self, target: GLenum, v: *const GLshort) -> Result<()>;
2238	fn glMultiTexCoord3d(&self, target: GLenum, s: GLdouble, t: GLdouble, r: GLdouble) -> Result<()>;
2239	fn glMultiTexCoord3dv(&self, target: GLenum, v: *const GLdouble) -> Result<()>;
2240	fn glMultiTexCoord3f(&self, target: GLenum, s: GLfloat, t: GLfloat, r: GLfloat) -> Result<()>;
2241	fn glMultiTexCoord3fv(&self, target: GLenum, v: *const GLfloat) -> Result<()>;
2242	fn glMultiTexCoord3i(&self, target: GLenum, s: GLint, t: GLint, r: GLint) -> Result<()>;
2243	fn glMultiTexCoord3iv(&self, target: GLenum, v: *const GLint) -> Result<()>;
2244	fn glMultiTexCoord3s(&self, target: GLenum, s: GLshort, t: GLshort, r: GLshort) -> Result<()>;
2245	fn glMultiTexCoord3sv(&self, target: GLenum, v: *const GLshort) -> Result<()>;
2246	fn glMultiTexCoord4d(&self, target: GLenum, s: GLdouble, t: GLdouble, r: GLdouble, q: GLdouble) -> Result<()>;
2247	fn glMultiTexCoord4dv(&self, target: GLenum, v: *const GLdouble) -> Result<()>;
2248	fn glMultiTexCoord4f(&self, target: GLenum, s: GLfloat, t: GLfloat, r: GLfloat, q: GLfloat) -> Result<()>;
2249	fn glMultiTexCoord4fv(&self, target: GLenum, v: *const GLfloat) -> Result<()>;
2250	fn glMultiTexCoord4i(&self, target: GLenum, s: GLint, t: GLint, r: GLint, q: GLint) -> Result<()>;
2251	fn glMultiTexCoord4iv(&self, target: GLenum, v: *const GLint) -> Result<()>;
2252	fn glMultiTexCoord4s(&self, target: GLenum, s: GLshort, t: GLshort, r: GLshort, q: GLshort) -> Result<()>;
2253	fn glMultiTexCoord4sv(&self, target: GLenum, v: *const GLshort) -> Result<()>;
2254	fn glLoadTransposeMatrixf(&self, m: *const GLfloat) -> Result<()>;
2255	fn glLoadTransposeMatrixd(&self, m: *const GLdouble) -> Result<()>;
2256	fn glMultTransposeMatrixf(&self, m: *const GLfloat) -> Result<()>;
2257	fn glMultTransposeMatrixd(&self, m: *const GLdouble) -> Result<()>;
2258}
2259
2260#[derive(Clone, Copy, PartialEq, Eq, Hash)]
2261pub struct Version13 {
2262	available: bool,
2263	geterror: PFNGLGETERRORPROC,
2264	activetexture: PFNGLACTIVETEXTUREPROC,
2265	samplecoverage: PFNGLSAMPLECOVERAGEPROC,
2266	compressedteximage3d: PFNGLCOMPRESSEDTEXIMAGE3DPROC,
2267	compressedteximage2d: PFNGLCOMPRESSEDTEXIMAGE2DPROC,
2268	compressedteximage1d: PFNGLCOMPRESSEDTEXIMAGE1DPROC,
2269	compressedtexsubimage3d: PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC,
2270	compressedtexsubimage2d: PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC,
2271	compressedtexsubimage1d: PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC,
2272	getcompressedteximage: PFNGLGETCOMPRESSEDTEXIMAGEPROC,
2273	clientactivetexture: PFNGLCLIENTACTIVETEXTUREPROC,
2274	multitexcoord1d: PFNGLMULTITEXCOORD1DPROC,
2275	multitexcoord1dv: PFNGLMULTITEXCOORD1DVPROC,
2276	multitexcoord1f: PFNGLMULTITEXCOORD1FPROC,
2277	multitexcoord1fv: PFNGLMULTITEXCOORD1FVPROC,
2278	multitexcoord1i: PFNGLMULTITEXCOORD1IPROC,
2279	multitexcoord1iv: PFNGLMULTITEXCOORD1IVPROC,
2280	multitexcoord1s: PFNGLMULTITEXCOORD1SPROC,
2281	multitexcoord1sv: PFNGLMULTITEXCOORD1SVPROC,
2282	multitexcoord2d: PFNGLMULTITEXCOORD2DPROC,
2283	multitexcoord2dv: PFNGLMULTITEXCOORD2DVPROC,
2284	multitexcoord2f: PFNGLMULTITEXCOORD2FPROC,
2285	multitexcoord2fv: PFNGLMULTITEXCOORD2FVPROC,
2286	multitexcoord2i: PFNGLMULTITEXCOORD2IPROC,
2287	multitexcoord2iv: PFNGLMULTITEXCOORD2IVPROC,
2288	multitexcoord2s: PFNGLMULTITEXCOORD2SPROC,
2289	multitexcoord2sv: PFNGLMULTITEXCOORD2SVPROC,
2290	multitexcoord3d: PFNGLMULTITEXCOORD3DPROC,
2291	multitexcoord3dv: PFNGLMULTITEXCOORD3DVPROC,
2292	multitexcoord3f: PFNGLMULTITEXCOORD3FPROC,
2293	multitexcoord3fv: PFNGLMULTITEXCOORD3FVPROC,
2294	multitexcoord3i: PFNGLMULTITEXCOORD3IPROC,
2295	multitexcoord3iv: PFNGLMULTITEXCOORD3IVPROC,
2296	multitexcoord3s: PFNGLMULTITEXCOORD3SPROC,
2297	multitexcoord3sv: PFNGLMULTITEXCOORD3SVPROC,
2298	multitexcoord4d: PFNGLMULTITEXCOORD4DPROC,
2299	multitexcoord4dv: PFNGLMULTITEXCOORD4DVPROC,
2300	multitexcoord4f: PFNGLMULTITEXCOORD4FPROC,
2301	multitexcoord4fv: PFNGLMULTITEXCOORD4FVPROC,
2302	multitexcoord4i: PFNGLMULTITEXCOORD4IPROC,
2303	multitexcoord4iv: PFNGLMULTITEXCOORD4IVPROC,
2304	multitexcoord4s: PFNGLMULTITEXCOORD4SPROC,
2305	multitexcoord4sv: PFNGLMULTITEXCOORD4SVPROC,
2306	loadtransposematrixf: PFNGLLOADTRANSPOSEMATRIXFPROC,
2307	loadtransposematrixd: PFNGLLOADTRANSPOSEMATRIXDPROC,
2308	multtransposematrixf: PFNGLMULTTRANSPOSEMATRIXFPROC,
2309	multtransposematrixd: PFNGLMULTTRANSPOSEMATRIXDPROC,
2310}
2311
2312impl GL_1_3 for Version13 {
2313	#[inline(always)]
2314	fn glGetError(&self) -> GLenum {
2315		(self.geterror)()
2316	}
2317	#[inline(always)]
2318	fn glActiveTexture(&self, texture: GLenum) -> Result<()> {
2319		let ret = process_catch("glActiveTexture", catch_unwind(||(self.activetexture)(texture)));
2320		#[cfg(feature = "diagnose")]
2321		if let Ok(ret) = ret {
2322			return to_result("glActiveTexture", ret, self.glGetError());
2323		} else {
2324			return ret
2325		}
2326		#[cfg(not(feature = "diagnose"))]
2327		return ret;
2328	}
2329	#[inline(always)]
2330	fn glSampleCoverage(&self, value: GLfloat, invert: GLboolean) -> Result<()> {
2331		let ret = process_catch("glSampleCoverage", catch_unwind(||(self.samplecoverage)(value, invert)));
2332		#[cfg(feature = "diagnose")]
2333		if let Ok(ret) = ret {
2334			return to_result("glSampleCoverage", ret, self.glGetError());
2335		} else {
2336			return ret
2337		}
2338		#[cfg(not(feature = "diagnose"))]
2339		return ret;
2340	}
2341	#[inline(always)]
2342	fn glCompressedTexImage3D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()> {
2343		let ret = process_catch("glCompressedTexImage3D", catch_unwind(||(self.compressedteximage3d)(target, level, internalformat, width, height, depth, border, imageSize, data)));
2344		#[cfg(feature = "diagnose")]
2345		if let Ok(ret) = ret {
2346			return to_result("glCompressedTexImage3D", ret, self.glGetError());
2347		} else {
2348			return ret
2349		}
2350		#[cfg(not(feature = "diagnose"))]
2351		return ret;
2352	}
2353	#[inline(always)]
2354	fn glCompressedTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()> {
2355		let ret = process_catch("glCompressedTexImage2D", catch_unwind(||(self.compressedteximage2d)(target, level, internalformat, width, height, border, imageSize, data)));
2356		#[cfg(feature = "diagnose")]
2357		if let Ok(ret) = ret {
2358			return to_result("glCompressedTexImage2D", ret, self.glGetError());
2359		} else {
2360			return ret
2361		}
2362		#[cfg(not(feature = "diagnose"))]
2363		return ret;
2364	}
2365	#[inline(always)]
2366	fn glCompressedTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()> {
2367		let ret = process_catch("glCompressedTexImage1D", catch_unwind(||(self.compressedteximage1d)(target, level, internalformat, width, border, imageSize, data)));
2368		#[cfg(feature = "diagnose")]
2369		if let Ok(ret) = ret {
2370			return to_result("glCompressedTexImage1D", ret, self.glGetError());
2371		} else {
2372			return ret
2373		}
2374		#[cfg(not(feature = "diagnose"))]
2375		return ret;
2376	}
2377	#[inline(always)]
2378	fn glCompressedTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
2379		let ret = process_catch("glCompressedTexSubImage3D", catch_unwind(||(self.compressedtexsubimage3d)(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)));
2380		#[cfg(feature = "diagnose")]
2381		if let Ok(ret) = ret {
2382			return to_result("glCompressedTexSubImage3D", ret, self.glGetError());
2383		} else {
2384			return ret
2385		}
2386		#[cfg(not(feature = "diagnose"))]
2387		return ret;
2388	}
2389	#[inline(always)]
2390	fn glCompressedTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
2391		let ret = process_catch("glCompressedTexSubImage2D", catch_unwind(||(self.compressedtexsubimage2d)(target, level, xoffset, yoffset, width, height, format, imageSize, data)));
2392		#[cfg(feature = "diagnose")]
2393		if let Ok(ret) = ret {
2394			return to_result("glCompressedTexSubImage2D", ret, self.glGetError());
2395		} else {
2396			return ret
2397		}
2398		#[cfg(not(feature = "diagnose"))]
2399		return ret;
2400	}
2401	#[inline(always)]
2402	fn glCompressedTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
2403		let ret = process_catch("glCompressedTexSubImage1D", catch_unwind(||(self.compressedtexsubimage1d)(target, level, xoffset, width, format, imageSize, data)));
2404		#[cfg(feature = "diagnose")]
2405		if let Ok(ret) = ret {
2406			return to_result("glCompressedTexSubImage1D", ret, self.glGetError());
2407		} else {
2408			return ret
2409		}
2410		#[cfg(not(feature = "diagnose"))]
2411		return ret;
2412	}
2413	#[inline(always)]
2414	fn glGetCompressedTexImage(&self, target: GLenum, level: GLint, img: *mut c_void) -> Result<()> {
2415		let ret = process_catch("glGetCompressedTexImage", catch_unwind(||(self.getcompressedteximage)(target, level, img)));
2416		#[cfg(feature = "diagnose")]
2417		if let Ok(ret) = ret {
2418			return to_result("glGetCompressedTexImage", ret, self.glGetError());
2419		} else {
2420			return ret
2421		}
2422		#[cfg(not(feature = "diagnose"))]
2423		return ret;
2424	}
2425	#[inline(always)]
2426	fn glClientActiveTexture(&self, texture: GLenum) -> Result<()> {
2427		let ret = process_catch("glClientActiveTexture", catch_unwind(||(self.clientactivetexture)(texture)));
2428		#[cfg(feature = "diagnose")]
2429		if let Ok(ret) = ret {
2430			return to_result("glClientActiveTexture", ret, self.glGetError());
2431		} else {
2432			return ret
2433		}
2434		#[cfg(not(feature = "diagnose"))]
2435		return ret;
2436	}
2437	#[inline(always)]
2438	fn glMultiTexCoord1d(&self, target: GLenum, s: GLdouble) -> Result<()> {
2439		let ret = process_catch("glMultiTexCoord1d", catch_unwind(||(self.multitexcoord1d)(target, s)));
2440		#[cfg(feature = "diagnose")]
2441		if let Ok(ret) = ret {
2442			return to_result("glMultiTexCoord1d", ret, self.glGetError());
2443		} else {
2444			return ret
2445		}
2446		#[cfg(not(feature = "diagnose"))]
2447		return ret;
2448	}
2449	#[inline(always)]
2450	fn glMultiTexCoord1dv(&self, target: GLenum, v: *const GLdouble) -> Result<()> {
2451		let ret = process_catch("glMultiTexCoord1dv", catch_unwind(||(self.multitexcoord1dv)(target, v)));
2452		#[cfg(feature = "diagnose")]
2453		if let Ok(ret) = ret {
2454			return to_result("glMultiTexCoord1dv", ret, self.glGetError());
2455		} else {
2456			return ret
2457		}
2458		#[cfg(not(feature = "diagnose"))]
2459		return ret;
2460	}
2461	#[inline(always)]
2462	fn glMultiTexCoord1f(&self, target: GLenum, s: GLfloat) -> Result<()> {
2463		let ret = process_catch("glMultiTexCoord1f", catch_unwind(||(self.multitexcoord1f)(target, s)));
2464		#[cfg(feature = "diagnose")]
2465		if let Ok(ret) = ret {
2466			return to_result("glMultiTexCoord1f", ret, self.glGetError());
2467		} else {
2468			return ret
2469		}
2470		#[cfg(not(feature = "diagnose"))]
2471		return ret;
2472	}
2473	#[inline(always)]
2474	fn glMultiTexCoord1fv(&self, target: GLenum, v: *const GLfloat) -> Result<()> {
2475		let ret = process_catch("glMultiTexCoord1fv", catch_unwind(||(self.multitexcoord1fv)(target, v)));
2476		#[cfg(feature = "diagnose")]
2477		if let Ok(ret) = ret {
2478			return to_result("glMultiTexCoord1fv", ret, self.glGetError());
2479		} else {
2480			return ret
2481		}
2482		#[cfg(not(feature = "diagnose"))]
2483		return ret;
2484	}
2485	#[inline(always)]
2486	fn glMultiTexCoord1i(&self, target: GLenum, s: GLint) -> Result<()> {
2487		let ret = process_catch("glMultiTexCoord1i", catch_unwind(||(self.multitexcoord1i)(target, s)));
2488		#[cfg(feature = "diagnose")]
2489		if let Ok(ret) = ret {
2490			return to_result("glMultiTexCoord1i", ret, self.glGetError());
2491		} else {
2492			return ret
2493		}
2494		#[cfg(not(feature = "diagnose"))]
2495		return ret;
2496	}
2497	#[inline(always)]
2498	fn glMultiTexCoord1iv(&self, target: GLenum, v: *const GLint) -> Result<()> {
2499		let ret = process_catch("glMultiTexCoord1iv", catch_unwind(||(self.multitexcoord1iv)(target, v)));
2500		#[cfg(feature = "diagnose")]
2501		if let Ok(ret) = ret {
2502			return to_result("glMultiTexCoord1iv", ret, self.glGetError());
2503		} else {
2504			return ret
2505		}
2506		#[cfg(not(feature = "diagnose"))]
2507		return ret;
2508	}
2509	#[inline(always)]
2510	fn glMultiTexCoord1s(&self, target: GLenum, s: GLshort) -> Result<()> {
2511		let ret = process_catch("glMultiTexCoord1s", catch_unwind(||(self.multitexcoord1s)(target, s)));
2512		#[cfg(feature = "diagnose")]
2513		if let Ok(ret) = ret {
2514			return to_result("glMultiTexCoord1s", ret, self.glGetError());
2515		} else {
2516			return ret
2517		}
2518		#[cfg(not(feature = "diagnose"))]
2519		return ret;
2520	}
2521	#[inline(always)]
2522	fn glMultiTexCoord1sv(&self, target: GLenum, v: *const GLshort) -> Result<()> {
2523		let ret = process_catch("glMultiTexCoord1sv", catch_unwind(||(self.multitexcoord1sv)(target, v)));
2524		#[cfg(feature = "diagnose")]
2525		if let Ok(ret) = ret {
2526			return to_result("glMultiTexCoord1sv", ret, self.glGetError());
2527		} else {
2528			return ret
2529		}
2530		#[cfg(not(feature = "diagnose"))]
2531		return ret;
2532	}
2533	#[inline(always)]
2534	fn glMultiTexCoord2d(&self, target: GLenum, s: GLdouble, t: GLdouble) -> Result<()> {
2535		let ret = process_catch("glMultiTexCoord2d", catch_unwind(||(self.multitexcoord2d)(target, s, t)));
2536		#[cfg(feature = "diagnose")]
2537		if let Ok(ret) = ret {
2538			return to_result("glMultiTexCoord2d", ret, self.glGetError());
2539		} else {
2540			return ret
2541		}
2542		#[cfg(not(feature = "diagnose"))]
2543		return ret;
2544	}
2545	#[inline(always)]
2546	fn glMultiTexCoord2dv(&self, target: GLenum, v: *const GLdouble) -> Result<()> {
2547		let ret = process_catch("glMultiTexCoord2dv", catch_unwind(||(self.multitexcoord2dv)(target, v)));
2548		#[cfg(feature = "diagnose")]
2549		if let Ok(ret) = ret {
2550			return to_result("glMultiTexCoord2dv", ret, self.glGetError());
2551		} else {
2552			return ret
2553		}
2554		#[cfg(not(feature = "diagnose"))]
2555		return ret;
2556	}
2557	#[inline(always)]
2558	fn glMultiTexCoord2f(&self, target: GLenum, s: GLfloat, t: GLfloat) -> Result<()> {
2559		let ret = process_catch("glMultiTexCoord2f", catch_unwind(||(self.multitexcoord2f)(target, s, t)));
2560		#[cfg(feature = "diagnose")]
2561		if let Ok(ret) = ret {
2562			return to_result("glMultiTexCoord2f", ret, self.glGetError());
2563		} else {
2564			return ret
2565		}
2566		#[cfg(not(feature = "diagnose"))]
2567		return ret;
2568	}
2569	#[inline(always)]
2570	fn glMultiTexCoord2fv(&self, target: GLenum, v: *const GLfloat) -> Result<()> {
2571		let ret = process_catch("glMultiTexCoord2fv", catch_unwind(||(self.multitexcoord2fv)(target, v)));
2572		#[cfg(feature = "diagnose")]
2573		if let Ok(ret) = ret {
2574			return to_result("glMultiTexCoord2fv", ret, self.glGetError());
2575		} else {
2576			return ret
2577		}
2578		#[cfg(not(feature = "diagnose"))]
2579		return ret;
2580	}
2581	#[inline(always)]
2582	fn glMultiTexCoord2i(&self, target: GLenum, s: GLint, t: GLint) -> Result<()> {
2583		let ret = process_catch("glMultiTexCoord2i", catch_unwind(||(self.multitexcoord2i)(target, s, t)));
2584		#[cfg(feature = "diagnose")]
2585		if let Ok(ret) = ret {
2586			return to_result("glMultiTexCoord2i", ret, self.glGetError());
2587		} else {
2588			return ret
2589		}
2590		#[cfg(not(feature = "diagnose"))]
2591		return ret;
2592	}
2593	#[inline(always)]
2594	fn glMultiTexCoord2iv(&self, target: GLenum, v: *const GLint) -> Result<()> {
2595		let ret = process_catch("glMultiTexCoord2iv", catch_unwind(||(self.multitexcoord2iv)(target, v)));
2596		#[cfg(feature = "diagnose")]
2597		if let Ok(ret) = ret {
2598			return to_result("glMultiTexCoord2iv", ret, self.glGetError());
2599		} else {
2600			return ret
2601		}
2602		#[cfg(not(feature = "diagnose"))]
2603		return ret;
2604	}
2605	#[inline(always)]
2606	fn glMultiTexCoord2s(&self, target: GLenum, s: GLshort, t: GLshort) -> Result<()> {
2607		let ret = process_catch("glMultiTexCoord2s", catch_unwind(||(self.multitexcoord2s)(target, s, t)));
2608		#[cfg(feature = "diagnose")]
2609		if let Ok(ret) = ret {
2610			return to_result("glMultiTexCoord2s", ret, self.glGetError());
2611		} else {
2612			return ret
2613		}
2614		#[cfg(not(feature = "diagnose"))]
2615		return ret;
2616	}
2617	#[inline(always)]
2618	fn glMultiTexCoord2sv(&self, target: GLenum, v: *const GLshort) -> Result<()> {
2619		let ret = process_catch("glMultiTexCoord2sv", catch_unwind(||(self.multitexcoord2sv)(target, v)));
2620		#[cfg(feature = "diagnose")]
2621		if let Ok(ret) = ret {
2622			return to_result("glMultiTexCoord2sv", ret, self.glGetError());
2623		} else {
2624			return ret
2625		}
2626		#[cfg(not(feature = "diagnose"))]
2627		return ret;
2628	}
2629	#[inline(always)]
2630	fn glMultiTexCoord3d(&self, target: GLenum, s: GLdouble, t: GLdouble, r: GLdouble) -> Result<()> {
2631		let ret = process_catch("glMultiTexCoord3d", catch_unwind(||(self.multitexcoord3d)(target, s, t, r)));
2632		#[cfg(feature = "diagnose")]
2633		if let Ok(ret) = ret {
2634			return to_result("glMultiTexCoord3d", ret, self.glGetError());
2635		} else {
2636			return ret
2637		}
2638		#[cfg(not(feature = "diagnose"))]
2639		return ret;
2640	}
2641	#[inline(always)]
2642	fn glMultiTexCoord3dv(&self, target: GLenum, v: *const GLdouble) -> Result<()> {
2643		let ret = process_catch("glMultiTexCoord3dv", catch_unwind(||(self.multitexcoord3dv)(target, v)));
2644		#[cfg(feature = "diagnose")]
2645		if let Ok(ret) = ret {
2646			return to_result("glMultiTexCoord3dv", ret, self.glGetError());
2647		} else {
2648			return ret
2649		}
2650		#[cfg(not(feature = "diagnose"))]
2651		return ret;
2652	}
2653	#[inline(always)]
2654	fn glMultiTexCoord3f(&self, target: GLenum, s: GLfloat, t: GLfloat, r: GLfloat) -> Result<()> {
2655		let ret = process_catch("glMultiTexCoord3f", catch_unwind(||(self.multitexcoord3f)(target, s, t, r)));
2656		#[cfg(feature = "diagnose")]
2657		if let Ok(ret) = ret {
2658			return to_result("glMultiTexCoord3f", ret, self.glGetError());
2659		} else {
2660			return ret
2661		}
2662		#[cfg(not(feature = "diagnose"))]
2663		return ret;
2664	}
2665	#[inline(always)]
2666	fn glMultiTexCoord3fv(&self, target: GLenum, v: *const GLfloat) -> Result<()> {
2667		let ret = process_catch("glMultiTexCoord3fv", catch_unwind(||(self.multitexcoord3fv)(target, v)));
2668		#[cfg(feature = "diagnose")]
2669		if let Ok(ret) = ret {
2670			return to_result("glMultiTexCoord3fv", ret, self.glGetError());
2671		} else {
2672			return ret
2673		}
2674		#[cfg(not(feature = "diagnose"))]
2675		return ret;
2676	}
2677	#[inline(always)]
2678	fn glMultiTexCoord3i(&self, target: GLenum, s: GLint, t: GLint, r: GLint) -> Result<()> {
2679		let ret = process_catch("glMultiTexCoord3i", catch_unwind(||(self.multitexcoord3i)(target, s, t, r)));
2680		#[cfg(feature = "diagnose")]
2681		if let Ok(ret) = ret {
2682			return to_result("glMultiTexCoord3i", ret, self.glGetError());
2683		} else {
2684			return ret
2685		}
2686		#[cfg(not(feature = "diagnose"))]
2687		return ret;
2688	}
2689	#[inline(always)]
2690	fn glMultiTexCoord3iv(&self, target: GLenum, v: *const GLint) -> Result<()> {
2691		let ret = process_catch("glMultiTexCoord3iv", catch_unwind(||(self.multitexcoord3iv)(target, v)));
2692		#[cfg(feature = "diagnose")]
2693		if let Ok(ret) = ret {
2694			return to_result("glMultiTexCoord3iv", ret, self.glGetError());
2695		} else {
2696			return ret
2697		}
2698		#[cfg(not(feature = "diagnose"))]
2699		return ret;
2700	}
2701	#[inline(always)]
2702	fn glMultiTexCoord3s(&self, target: GLenum, s: GLshort, t: GLshort, r: GLshort) -> Result<()> {
2703		let ret = process_catch("glMultiTexCoord3s", catch_unwind(||(self.multitexcoord3s)(target, s, t, r)));
2704		#[cfg(feature = "diagnose")]
2705		if let Ok(ret) = ret {
2706			return to_result("glMultiTexCoord3s", ret, self.glGetError());
2707		} else {
2708			return ret
2709		}
2710		#[cfg(not(feature = "diagnose"))]
2711		return ret;
2712	}
2713	#[inline(always)]
2714	fn glMultiTexCoord3sv(&self, target: GLenum, v: *const GLshort) -> Result<()> {
2715		let ret = process_catch("glMultiTexCoord3sv", catch_unwind(||(self.multitexcoord3sv)(target, v)));
2716		#[cfg(feature = "diagnose")]
2717		if let Ok(ret) = ret {
2718			return to_result("glMultiTexCoord3sv", ret, self.glGetError());
2719		} else {
2720			return ret
2721		}
2722		#[cfg(not(feature = "diagnose"))]
2723		return ret;
2724	}
2725	#[inline(always)]
2726	fn glMultiTexCoord4d(&self, target: GLenum, s: GLdouble, t: GLdouble, r: GLdouble, q: GLdouble) -> Result<()> {
2727		let ret = process_catch("glMultiTexCoord4d", catch_unwind(||(self.multitexcoord4d)(target, s, t, r, q)));
2728		#[cfg(feature = "diagnose")]
2729		if let Ok(ret) = ret {
2730			return to_result("glMultiTexCoord4d", ret, self.glGetError());
2731		} else {
2732			return ret
2733		}
2734		#[cfg(not(feature = "diagnose"))]
2735		return ret;
2736	}
2737	#[inline(always)]
2738	fn glMultiTexCoord4dv(&self, target: GLenum, v: *const GLdouble) -> Result<()> {
2739		let ret = process_catch("glMultiTexCoord4dv", catch_unwind(||(self.multitexcoord4dv)(target, v)));
2740		#[cfg(feature = "diagnose")]
2741		if let Ok(ret) = ret {
2742			return to_result("glMultiTexCoord4dv", ret, self.glGetError());
2743		} else {
2744			return ret
2745		}
2746		#[cfg(not(feature = "diagnose"))]
2747		return ret;
2748	}
2749	#[inline(always)]
2750	fn glMultiTexCoord4f(&self, target: GLenum, s: GLfloat, t: GLfloat, r: GLfloat, q: GLfloat) -> Result<()> {
2751		let ret = process_catch("glMultiTexCoord4f", catch_unwind(||(self.multitexcoord4f)(target, s, t, r, q)));
2752		#[cfg(feature = "diagnose")]
2753		if let Ok(ret) = ret {
2754			return to_result("glMultiTexCoord4f", ret, self.glGetError());
2755		} else {
2756			return ret
2757		}
2758		#[cfg(not(feature = "diagnose"))]
2759		return ret;
2760	}
2761	#[inline(always)]
2762	fn glMultiTexCoord4fv(&self, target: GLenum, v: *const GLfloat) -> Result<()> {
2763		let ret = process_catch("glMultiTexCoord4fv", catch_unwind(||(self.multitexcoord4fv)(target, v)));
2764		#[cfg(feature = "diagnose")]
2765		if let Ok(ret) = ret {
2766			return to_result("glMultiTexCoord4fv", ret, self.glGetError());
2767		} else {
2768			return ret
2769		}
2770		#[cfg(not(feature = "diagnose"))]
2771		return ret;
2772	}
2773	#[inline(always)]
2774	fn glMultiTexCoord4i(&self, target: GLenum, s: GLint, t: GLint, r: GLint, q: GLint) -> Result<()> {
2775		let ret = process_catch("glMultiTexCoord4i", catch_unwind(||(self.multitexcoord4i)(target, s, t, r, q)));
2776		#[cfg(feature = "diagnose")]
2777		if let Ok(ret) = ret {
2778			return to_result("glMultiTexCoord4i", ret, self.glGetError());
2779		} else {
2780			return ret
2781		}
2782		#[cfg(not(feature = "diagnose"))]
2783		return ret;
2784	}
2785	#[inline(always)]
2786	fn glMultiTexCoord4iv(&self, target: GLenum, v: *const GLint) -> Result<()> {
2787		let ret = process_catch("glMultiTexCoord4iv", catch_unwind(||(self.multitexcoord4iv)(target, v)));
2788		#[cfg(feature = "diagnose")]
2789		if let Ok(ret) = ret {
2790			return to_result("glMultiTexCoord4iv", ret, self.glGetError());
2791		} else {
2792			return ret
2793		}
2794		#[cfg(not(feature = "diagnose"))]
2795		return ret;
2796	}
2797	#[inline(always)]
2798	fn glMultiTexCoord4s(&self, target: GLenum, s: GLshort, t: GLshort, r: GLshort, q: GLshort) -> Result<()> {
2799		let ret = process_catch("glMultiTexCoord4s", catch_unwind(||(self.multitexcoord4s)(target, s, t, r, q)));
2800		#[cfg(feature = "diagnose")]
2801		if let Ok(ret) = ret {
2802			return to_result("glMultiTexCoord4s", ret, self.glGetError());
2803		} else {
2804			return ret
2805		}
2806		#[cfg(not(feature = "diagnose"))]
2807		return ret;
2808	}
2809	#[inline(always)]
2810	fn glMultiTexCoord4sv(&self, target: GLenum, v: *const GLshort) -> Result<()> {
2811		let ret = process_catch("glMultiTexCoord4sv", catch_unwind(||(self.multitexcoord4sv)(target, v)));
2812		#[cfg(feature = "diagnose")]
2813		if let Ok(ret) = ret {
2814			return to_result("glMultiTexCoord4sv", ret, self.glGetError());
2815		} else {
2816			return ret
2817		}
2818		#[cfg(not(feature = "diagnose"))]
2819		return ret;
2820	}
2821	#[inline(always)]
2822	fn glLoadTransposeMatrixf(&self, m: *const GLfloat) -> Result<()> {
2823		let ret = process_catch("glLoadTransposeMatrixf", catch_unwind(||(self.loadtransposematrixf)(m)));
2824		#[cfg(feature = "diagnose")]
2825		if let Ok(ret) = ret {
2826			return to_result("glLoadTransposeMatrixf", ret, self.glGetError());
2827		} else {
2828			return ret
2829		}
2830		#[cfg(not(feature = "diagnose"))]
2831		return ret;
2832	}
2833	#[inline(always)]
2834	fn glLoadTransposeMatrixd(&self, m: *const GLdouble) -> Result<()> {
2835		let ret = process_catch("glLoadTransposeMatrixd", catch_unwind(||(self.loadtransposematrixd)(m)));
2836		#[cfg(feature = "diagnose")]
2837		if let Ok(ret) = ret {
2838			return to_result("glLoadTransposeMatrixd", ret, self.glGetError());
2839		} else {
2840			return ret
2841		}
2842		#[cfg(not(feature = "diagnose"))]
2843		return ret;
2844	}
2845	#[inline(always)]
2846	fn glMultTransposeMatrixf(&self, m: *const GLfloat) -> Result<()> {
2847		let ret = process_catch("glMultTransposeMatrixf", catch_unwind(||(self.multtransposematrixf)(m)));
2848		#[cfg(feature = "diagnose")]
2849		if let Ok(ret) = ret {
2850			return to_result("glMultTransposeMatrixf", ret, self.glGetError());
2851		} else {
2852			return ret
2853		}
2854		#[cfg(not(feature = "diagnose"))]
2855		return ret;
2856	}
2857	#[inline(always)]
2858	fn glMultTransposeMatrixd(&self, m: *const GLdouble) -> Result<()> {
2859		let ret = process_catch("glMultTransposeMatrixd", catch_unwind(||(self.multtransposematrixd)(m)));
2860		#[cfg(feature = "diagnose")]
2861		if let Ok(ret) = ret {
2862			return to_result("glMultTransposeMatrixd", ret, self.glGetError());
2863		} else {
2864			return ret
2865		}
2866		#[cfg(not(feature = "diagnose"))]
2867		return ret;
2868	}
2869}
2870
2871impl Version13 {
2872	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
2873		let (_spec, major, minor, release) = base.get_version();
2874		if (major, minor, release) < (1, 3, 0) {
2875			return Self::default();
2876		}
2877		Self {
2878			available: true,
2879			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
2880			activetexture: {let proc = get_proc_address("glActiveTexture"); if proc == null() {dummy_pfnglactivetextureproc} else {unsafe{transmute(proc)}}},
2881			samplecoverage: {let proc = get_proc_address("glSampleCoverage"); if proc == null() {dummy_pfnglsamplecoverageproc} else {unsafe{transmute(proc)}}},
2882			compressedteximage3d: {let proc = get_proc_address("glCompressedTexImage3D"); if proc == null() {dummy_pfnglcompressedteximage3dproc} else {unsafe{transmute(proc)}}},
2883			compressedteximage2d: {let proc = get_proc_address("glCompressedTexImage2D"); if proc == null() {dummy_pfnglcompressedteximage2dproc} else {unsafe{transmute(proc)}}},
2884			compressedteximage1d: {let proc = get_proc_address("glCompressedTexImage1D"); if proc == null() {dummy_pfnglcompressedteximage1dproc} else {unsafe{transmute(proc)}}},
2885			compressedtexsubimage3d: {let proc = get_proc_address("glCompressedTexSubImage3D"); if proc == null() {dummy_pfnglcompressedtexsubimage3dproc} else {unsafe{transmute(proc)}}},
2886			compressedtexsubimage2d: {let proc = get_proc_address("glCompressedTexSubImage2D"); if proc == null() {dummy_pfnglcompressedtexsubimage2dproc} else {unsafe{transmute(proc)}}},
2887			compressedtexsubimage1d: {let proc = get_proc_address("glCompressedTexSubImage1D"); if proc == null() {dummy_pfnglcompressedtexsubimage1dproc} else {unsafe{transmute(proc)}}},
2888			getcompressedteximage: {let proc = get_proc_address("glGetCompressedTexImage"); if proc == null() {dummy_pfnglgetcompressedteximageproc} else {unsafe{transmute(proc)}}},
2889			clientactivetexture: {let proc = get_proc_address("glClientActiveTexture"); if proc == null() {dummy_pfnglclientactivetextureproc} else {unsafe{transmute(proc)}}},
2890			multitexcoord1d: {let proc = get_proc_address("glMultiTexCoord1d"); if proc == null() {dummy_pfnglmultitexcoord1dproc} else {unsafe{transmute(proc)}}},
2891			multitexcoord1dv: {let proc = get_proc_address("glMultiTexCoord1dv"); if proc == null() {dummy_pfnglmultitexcoord1dvproc} else {unsafe{transmute(proc)}}},
2892			multitexcoord1f: {let proc = get_proc_address("glMultiTexCoord1f"); if proc == null() {dummy_pfnglmultitexcoord1fproc} else {unsafe{transmute(proc)}}},
2893			multitexcoord1fv: {let proc = get_proc_address("glMultiTexCoord1fv"); if proc == null() {dummy_pfnglmultitexcoord1fvproc} else {unsafe{transmute(proc)}}},
2894			multitexcoord1i: {let proc = get_proc_address("glMultiTexCoord1i"); if proc == null() {dummy_pfnglmultitexcoord1iproc} else {unsafe{transmute(proc)}}},
2895			multitexcoord1iv: {let proc = get_proc_address("glMultiTexCoord1iv"); if proc == null() {dummy_pfnglmultitexcoord1ivproc} else {unsafe{transmute(proc)}}},
2896			multitexcoord1s: {let proc = get_proc_address("glMultiTexCoord1s"); if proc == null() {dummy_pfnglmultitexcoord1sproc} else {unsafe{transmute(proc)}}},
2897			multitexcoord1sv: {let proc = get_proc_address("glMultiTexCoord1sv"); if proc == null() {dummy_pfnglmultitexcoord1svproc} else {unsafe{transmute(proc)}}},
2898			multitexcoord2d: {let proc = get_proc_address("glMultiTexCoord2d"); if proc == null() {dummy_pfnglmultitexcoord2dproc} else {unsafe{transmute(proc)}}},
2899			multitexcoord2dv: {let proc = get_proc_address("glMultiTexCoord2dv"); if proc == null() {dummy_pfnglmultitexcoord2dvproc} else {unsafe{transmute(proc)}}},
2900			multitexcoord2f: {let proc = get_proc_address("glMultiTexCoord2f"); if proc == null() {dummy_pfnglmultitexcoord2fproc} else {unsafe{transmute(proc)}}},
2901			multitexcoord2fv: {let proc = get_proc_address("glMultiTexCoord2fv"); if proc == null() {dummy_pfnglmultitexcoord2fvproc} else {unsafe{transmute(proc)}}},
2902			multitexcoord2i: {let proc = get_proc_address("glMultiTexCoord2i"); if proc == null() {dummy_pfnglmultitexcoord2iproc} else {unsafe{transmute(proc)}}},
2903			multitexcoord2iv: {let proc = get_proc_address("glMultiTexCoord2iv"); if proc == null() {dummy_pfnglmultitexcoord2ivproc} else {unsafe{transmute(proc)}}},
2904			multitexcoord2s: {let proc = get_proc_address("glMultiTexCoord2s"); if proc == null() {dummy_pfnglmultitexcoord2sproc} else {unsafe{transmute(proc)}}},
2905			multitexcoord2sv: {let proc = get_proc_address("glMultiTexCoord2sv"); if proc == null() {dummy_pfnglmultitexcoord2svproc} else {unsafe{transmute(proc)}}},
2906			multitexcoord3d: {let proc = get_proc_address("glMultiTexCoord3d"); if proc == null() {dummy_pfnglmultitexcoord3dproc} else {unsafe{transmute(proc)}}},
2907			multitexcoord3dv: {let proc = get_proc_address("glMultiTexCoord3dv"); if proc == null() {dummy_pfnglmultitexcoord3dvproc} else {unsafe{transmute(proc)}}},
2908			multitexcoord3f: {let proc = get_proc_address("glMultiTexCoord3f"); if proc == null() {dummy_pfnglmultitexcoord3fproc} else {unsafe{transmute(proc)}}},
2909			multitexcoord3fv: {let proc = get_proc_address("glMultiTexCoord3fv"); if proc == null() {dummy_pfnglmultitexcoord3fvproc} else {unsafe{transmute(proc)}}},
2910			multitexcoord3i: {let proc = get_proc_address("glMultiTexCoord3i"); if proc == null() {dummy_pfnglmultitexcoord3iproc} else {unsafe{transmute(proc)}}},
2911			multitexcoord3iv: {let proc = get_proc_address("glMultiTexCoord3iv"); if proc == null() {dummy_pfnglmultitexcoord3ivproc} else {unsafe{transmute(proc)}}},
2912			multitexcoord3s: {let proc = get_proc_address("glMultiTexCoord3s"); if proc == null() {dummy_pfnglmultitexcoord3sproc} else {unsafe{transmute(proc)}}},
2913			multitexcoord3sv: {let proc = get_proc_address("glMultiTexCoord3sv"); if proc == null() {dummy_pfnglmultitexcoord3svproc} else {unsafe{transmute(proc)}}},
2914			multitexcoord4d: {let proc = get_proc_address("glMultiTexCoord4d"); if proc == null() {dummy_pfnglmultitexcoord4dproc} else {unsafe{transmute(proc)}}},
2915			multitexcoord4dv: {let proc = get_proc_address("glMultiTexCoord4dv"); if proc == null() {dummy_pfnglmultitexcoord4dvproc} else {unsafe{transmute(proc)}}},
2916			multitexcoord4f: {let proc = get_proc_address("glMultiTexCoord4f"); if proc == null() {dummy_pfnglmultitexcoord4fproc} else {unsafe{transmute(proc)}}},
2917			multitexcoord4fv: {let proc = get_proc_address("glMultiTexCoord4fv"); if proc == null() {dummy_pfnglmultitexcoord4fvproc} else {unsafe{transmute(proc)}}},
2918			multitexcoord4i: {let proc = get_proc_address("glMultiTexCoord4i"); if proc == null() {dummy_pfnglmultitexcoord4iproc} else {unsafe{transmute(proc)}}},
2919			multitexcoord4iv: {let proc = get_proc_address("glMultiTexCoord4iv"); if proc == null() {dummy_pfnglmultitexcoord4ivproc} else {unsafe{transmute(proc)}}},
2920			multitexcoord4s: {let proc = get_proc_address("glMultiTexCoord4s"); if proc == null() {dummy_pfnglmultitexcoord4sproc} else {unsafe{transmute(proc)}}},
2921			multitexcoord4sv: {let proc = get_proc_address("glMultiTexCoord4sv"); if proc == null() {dummy_pfnglmultitexcoord4svproc} else {unsafe{transmute(proc)}}},
2922			loadtransposematrixf: {let proc = get_proc_address("glLoadTransposeMatrixf"); if proc == null() {dummy_pfnglloadtransposematrixfproc} else {unsafe{transmute(proc)}}},
2923			loadtransposematrixd: {let proc = get_proc_address("glLoadTransposeMatrixd"); if proc == null() {dummy_pfnglloadtransposematrixdproc} else {unsafe{transmute(proc)}}},
2924			multtransposematrixf: {let proc = get_proc_address("glMultTransposeMatrixf"); if proc == null() {dummy_pfnglmulttransposematrixfproc} else {unsafe{transmute(proc)}}},
2925			multtransposematrixd: {let proc = get_proc_address("glMultTransposeMatrixd"); if proc == null() {dummy_pfnglmulttransposematrixdproc} else {unsafe{transmute(proc)}}},
2926		}
2927	}
2928	#[inline(always)]
2929	pub fn get_available(&self) -> bool {
2930		self.available
2931	}
2932}
2933
2934impl Default for Version13 {
2935	fn default() -> Self {
2936		Self {
2937			available: false,
2938			geterror: dummy_pfnglgeterrorproc,
2939			activetexture: dummy_pfnglactivetextureproc,
2940			samplecoverage: dummy_pfnglsamplecoverageproc,
2941			compressedteximage3d: dummy_pfnglcompressedteximage3dproc,
2942			compressedteximage2d: dummy_pfnglcompressedteximage2dproc,
2943			compressedteximage1d: dummy_pfnglcompressedteximage1dproc,
2944			compressedtexsubimage3d: dummy_pfnglcompressedtexsubimage3dproc,
2945			compressedtexsubimage2d: dummy_pfnglcompressedtexsubimage2dproc,
2946			compressedtexsubimage1d: dummy_pfnglcompressedtexsubimage1dproc,
2947			getcompressedteximage: dummy_pfnglgetcompressedteximageproc,
2948			clientactivetexture: dummy_pfnglclientactivetextureproc,
2949			multitexcoord1d: dummy_pfnglmultitexcoord1dproc,
2950			multitexcoord1dv: dummy_pfnglmultitexcoord1dvproc,
2951			multitexcoord1f: dummy_pfnglmultitexcoord1fproc,
2952			multitexcoord1fv: dummy_pfnglmultitexcoord1fvproc,
2953			multitexcoord1i: dummy_pfnglmultitexcoord1iproc,
2954			multitexcoord1iv: dummy_pfnglmultitexcoord1ivproc,
2955			multitexcoord1s: dummy_pfnglmultitexcoord1sproc,
2956			multitexcoord1sv: dummy_pfnglmultitexcoord1svproc,
2957			multitexcoord2d: dummy_pfnglmultitexcoord2dproc,
2958			multitexcoord2dv: dummy_pfnglmultitexcoord2dvproc,
2959			multitexcoord2f: dummy_pfnglmultitexcoord2fproc,
2960			multitexcoord2fv: dummy_pfnglmultitexcoord2fvproc,
2961			multitexcoord2i: dummy_pfnglmultitexcoord2iproc,
2962			multitexcoord2iv: dummy_pfnglmultitexcoord2ivproc,
2963			multitexcoord2s: dummy_pfnglmultitexcoord2sproc,
2964			multitexcoord2sv: dummy_pfnglmultitexcoord2svproc,
2965			multitexcoord3d: dummy_pfnglmultitexcoord3dproc,
2966			multitexcoord3dv: dummy_pfnglmultitexcoord3dvproc,
2967			multitexcoord3f: dummy_pfnglmultitexcoord3fproc,
2968			multitexcoord3fv: dummy_pfnglmultitexcoord3fvproc,
2969			multitexcoord3i: dummy_pfnglmultitexcoord3iproc,
2970			multitexcoord3iv: dummy_pfnglmultitexcoord3ivproc,
2971			multitexcoord3s: dummy_pfnglmultitexcoord3sproc,
2972			multitexcoord3sv: dummy_pfnglmultitexcoord3svproc,
2973			multitexcoord4d: dummy_pfnglmultitexcoord4dproc,
2974			multitexcoord4dv: dummy_pfnglmultitexcoord4dvproc,
2975			multitexcoord4f: dummy_pfnglmultitexcoord4fproc,
2976			multitexcoord4fv: dummy_pfnglmultitexcoord4fvproc,
2977			multitexcoord4i: dummy_pfnglmultitexcoord4iproc,
2978			multitexcoord4iv: dummy_pfnglmultitexcoord4ivproc,
2979			multitexcoord4s: dummy_pfnglmultitexcoord4sproc,
2980			multitexcoord4sv: dummy_pfnglmultitexcoord4svproc,
2981			loadtransposematrixf: dummy_pfnglloadtransposematrixfproc,
2982			loadtransposematrixd: dummy_pfnglloadtransposematrixdproc,
2983			multtransposematrixf: dummy_pfnglmulttransposematrixfproc,
2984			multtransposematrixd: dummy_pfnglmulttransposematrixdproc,
2985		}
2986	}
2987}
2988impl Debug for Version13 {
2989	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
2990		if self.available {
2991			f.debug_struct("Version13")
2992			.field("available", &self.available)
2993			.field("activetexture", unsafe{if transmute::<_, *const c_void>(self.activetexture) == (dummy_pfnglactivetextureproc as *const c_void) {&null::<PFNGLACTIVETEXTUREPROC>()} else {&self.activetexture}})
2994			.field("samplecoverage", unsafe{if transmute::<_, *const c_void>(self.samplecoverage) == (dummy_pfnglsamplecoverageproc as *const c_void) {&null::<PFNGLSAMPLECOVERAGEPROC>()} else {&self.samplecoverage}})
2995			.field("compressedteximage3d", unsafe{if transmute::<_, *const c_void>(self.compressedteximage3d) == (dummy_pfnglcompressedteximage3dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXIMAGE3DPROC>()} else {&self.compressedteximage3d}})
2996			.field("compressedteximage2d", unsafe{if transmute::<_, *const c_void>(self.compressedteximage2d) == (dummy_pfnglcompressedteximage2dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXIMAGE2DPROC>()} else {&self.compressedteximage2d}})
2997			.field("compressedteximage1d", unsafe{if transmute::<_, *const c_void>(self.compressedteximage1d) == (dummy_pfnglcompressedteximage1dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXIMAGE1DPROC>()} else {&self.compressedteximage1d}})
2998			.field("compressedtexsubimage3d", unsafe{if transmute::<_, *const c_void>(self.compressedtexsubimage3d) == (dummy_pfnglcompressedtexsubimage3dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXSUBIMAGE3DPROC>()} else {&self.compressedtexsubimage3d}})
2999			.field("compressedtexsubimage2d", unsafe{if transmute::<_, *const c_void>(self.compressedtexsubimage2d) == (dummy_pfnglcompressedtexsubimage2dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXSUBIMAGE2DPROC>()} else {&self.compressedtexsubimage2d}})
3000			.field("compressedtexsubimage1d", unsafe{if transmute::<_, *const c_void>(self.compressedtexsubimage1d) == (dummy_pfnglcompressedtexsubimage1dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXSUBIMAGE1DPROC>()} else {&self.compressedtexsubimage1d}})
3001			.field("getcompressedteximage", unsafe{if transmute::<_, *const c_void>(self.getcompressedteximage) == (dummy_pfnglgetcompressedteximageproc as *const c_void) {&null::<PFNGLGETCOMPRESSEDTEXIMAGEPROC>()} else {&self.getcompressedteximage}})
3002			.field("clientactivetexture", unsafe{if transmute::<_, *const c_void>(self.clientactivetexture) == (dummy_pfnglclientactivetextureproc as *const c_void) {&null::<PFNGLCLIENTACTIVETEXTUREPROC>()} else {&self.clientactivetexture}})
3003			.field("multitexcoord1d", unsafe{if transmute::<_, *const c_void>(self.multitexcoord1d) == (dummy_pfnglmultitexcoord1dproc as *const c_void) {&null::<PFNGLMULTITEXCOORD1DPROC>()} else {&self.multitexcoord1d}})
3004			.field("multitexcoord1dv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord1dv) == (dummy_pfnglmultitexcoord1dvproc as *const c_void) {&null::<PFNGLMULTITEXCOORD1DVPROC>()} else {&self.multitexcoord1dv}})
3005			.field("multitexcoord1f", unsafe{if transmute::<_, *const c_void>(self.multitexcoord1f) == (dummy_pfnglmultitexcoord1fproc as *const c_void) {&null::<PFNGLMULTITEXCOORD1FPROC>()} else {&self.multitexcoord1f}})
3006			.field("multitexcoord1fv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord1fv) == (dummy_pfnglmultitexcoord1fvproc as *const c_void) {&null::<PFNGLMULTITEXCOORD1FVPROC>()} else {&self.multitexcoord1fv}})
3007			.field("multitexcoord1i", unsafe{if transmute::<_, *const c_void>(self.multitexcoord1i) == (dummy_pfnglmultitexcoord1iproc as *const c_void) {&null::<PFNGLMULTITEXCOORD1IPROC>()} else {&self.multitexcoord1i}})
3008			.field("multitexcoord1iv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord1iv) == (dummy_pfnglmultitexcoord1ivproc as *const c_void) {&null::<PFNGLMULTITEXCOORD1IVPROC>()} else {&self.multitexcoord1iv}})
3009			.field("multitexcoord1s", unsafe{if transmute::<_, *const c_void>(self.multitexcoord1s) == (dummy_pfnglmultitexcoord1sproc as *const c_void) {&null::<PFNGLMULTITEXCOORD1SPROC>()} else {&self.multitexcoord1s}})
3010			.field("multitexcoord1sv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord1sv) == (dummy_pfnglmultitexcoord1svproc as *const c_void) {&null::<PFNGLMULTITEXCOORD1SVPROC>()} else {&self.multitexcoord1sv}})
3011			.field("multitexcoord2d", unsafe{if transmute::<_, *const c_void>(self.multitexcoord2d) == (dummy_pfnglmultitexcoord2dproc as *const c_void) {&null::<PFNGLMULTITEXCOORD2DPROC>()} else {&self.multitexcoord2d}})
3012			.field("multitexcoord2dv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord2dv) == (dummy_pfnglmultitexcoord2dvproc as *const c_void) {&null::<PFNGLMULTITEXCOORD2DVPROC>()} else {&self.multitexcoord2dv}})
3013			.field("multitexcoord2f", unsafe{if transmute::<_, *const c_void>(self.multitexcoord2f) == (dummy_pfnglmultitexcoord2fproc as *const c_void) {&null::<PFNGLMULTITEXCOORD2FPROC>()} else {&self.multitexcoord2f}})
3014			.field("multitexcoord2fv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord2fv) == (dummy_pfnglmultitexcoord2fvproc as *const c_void) {&null::<PFNGLMULTITEXCOORD2FVPROC>()} else {&self.multitexcoord2fv}})
3015			.field("multitexcoord2i", unsafe{if transmute::<_, *const c_void>(self.multitexcoord2i) == (dummy_pfnglmultitexcoord2iproc as *const c_void) {&null::<PFNGLMULTITEXCOORD2IPROC>()} else {&self.multitexcoord2i}})
3016			.field("multitexcoord2iv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord2iv) == (dummy_pfnglmultitexcoord2ivproc as *const c_void) {&null::<PFNGLMULTITEXCOORD2IVPROC>()} else {&self.multitexcoord2iv}})
3017			.field("multitexcoord2s", unsafe{if transmute::<_, *const c_void>(self.multitexcoord2s) == (dummy_pfnglmultitexcoord2sproc as *const c_void) {&null::<PFNGLMULTITEXCOORD2SPROC>()} else {&self.multitexcoord2s}})
3018			.field("multitexcoord2sv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord2sv) == (dummy_pfnglmultitexcoord2svproc as *const c_void) {&null::<PFNGLMULTITEXCOORD2SVPROC>()} else {&self.multitexcoord2sv}})
3019			.field("multitexcoord3d", unsafe{if transmute::<_, *const c_void>(self.multitexcoord3d) == (dummy_pfnglmultitexcoord3dproc as *const c_void) {&null::<PFNGLMULTITEXCOORD3DPROC>()} else {&self.multitexcoord3d}})
3020			.field("multitexcoord3dv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord3dv) == (dummy_pfnglmultitexcoord3dvproc as *const c_void) {&null::<PFNGLMULTITEXCOORD3DVPROC>()} else {&self.multitexcoord3dv}})
3021			.field("multitexcoord3f", unsafe{if transmute::<_, *const c_void>(self.multitexcoord3f) == (dummy_pfnglmultitexcoord3fproc as *const c_void) {&null::<PFNGLMULTITEXCOORD3FPROC>()} else {&self.multitexcoord3f}})
3022			.field("multitexcoord3fv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord3fv) == (dummy_pfnglmultitexcoord3fvproc as *const c_void) {&null::<PFNGLMULTITEXCOORD3FVPROC>()} else {&self.multitexcoord3fv}})
3023			.field("multitexcoord3i", unsafe{if transmute::<_, *const c_void>(self.multitexcoord3i) == (dummy_pfnglmultitexcoord3iproc as *const c_void) {&null::<PFNGLMULTITEXCOORD3IPROC>()} else {&self.multitexcoord3i}})
3024			.field("multitexcoord3iv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord3iv) == (dummy_pfnglmultitexcoord3ivproc as *const c_void) {&null::<PFNGLMULTITEXCOORD3IVPROC>()} else {&self.multitexcoord3iv}})
3025			.field("multitexcoord3s", unsafe{if transmute::<_, *const c_void>(self.multitexcoord3s) == (dummy_pfnglmultitexcoord3sproc as *const c_void) {&null::<PFNGLMULTITEXCOORD3SPROC>()} else {&self.multitexcoord3s}})
3026			.field("multitexcoord3sv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord3sv) == (dummy_pfnglmultitexcoord3svproc as *const c_void) {&null::<PFNGLMULTITEXCOORD3SVPROC>()} else {&self.multitexcoord3sv}})
3027			.field("multitexcoord4d", unsafe{if transmute::<_, *const c_void>(self.multitexcoord4d) == (dummy_pfnglmultitexcoord4dproc as *const c_void) {&null::<PFNGLMULTITEXCOORD4DPROC>()} else {&self.multitexcoord4d}})
3028			.field("multitexcoord4dv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord4dv) == (dummy_pfnglmultitexcoord4dvproc as *const c_void) {&null::<PFNGLMULTITEXCOORD4DVPROC>()} else {&self.multitexcoord4dv}})
3029			.field("multitexcoord4f", unsafe{if transmute::<_, *const c_void>(self.multitexcoord4f) == (dummy_pfnglmultitexcoord4fproc as *const c_void) {&null::<PFNGLMULTITEXCOORD4FPROC>()} else {&self.multitexcoord4f}})
3030			.field("multitexcoord4fv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord4fv) == (dummy_pfnglmultitexcoord4fvproc as *const c_void) {&null::<PFNGLMULTITEXCOORD4FVPROC>()} else {&self.multitexcoord4fv}})
3031			.field("multitexcoord4i", unsafe{if transmute::<_, *const c_void>(self.multitexcoord4i) == (dummy_pfnglmultitexcoord4iproc as *const c_void) {&null::<PFNGLMULTITEXCOORD4IPROC>()} else {&self.multitexcoord4i}})
3032			.field("multitexcoord4iv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord4iv) == (dummy_pfnglmultitexcoord4ivproc as *const c_void) {&null::<PFNGLMULTITEXCOORD4IVPROC>()} else {&self.multitexcoord4iv}})
3033			.field("multitexcoord4s", unsafe{if transmute::<_, *const c_void>(self.multitexcoord4s) == (dummy_pfnglmultitexcoord4sproc as *const c_void) {&null::<PFNGLMULTITEXCOORD4SPROC>()} else {&self.multitexcoord4s}})
3034			.field("multitexcoord4sv", unsafe{if transmute::<_, *const c_void>(self.multitexcoord4sv) == (dummy_pfnglmultitexcoord4svproc as *const c_void) {&null::<PFNGLMULTITEXCOORD4SVPROC>()} else {&self.multitexcoord4sv}})
3035			.field("loadtransposematrixf", unsafe{if transmute::<_, *const c_void>(self.loadtransposematrixf) == (dummy_pfnglloadtransposematrixfproc as *const c_void) {&null::<PFNGLLOADTRANSPOSEMATRIXFPROC>()} else {&self.loadtransposematrixf}})
3036			.field("loadtransposematrixd", unsafe{if transmute::<_, *const c_void>(self.loadtransposematrixd) == (dummy_pfnglloadtransposematrixdproc as *const c_void) {&null::<PFNGLLOADTRANSPOSEMATRIXDPROC>()} else {&self.loadtransposematrixd}})
3037			.field("multtransposematrixf", unsafe{if transmute::<_, *const c_void>(self.multtransposematrixf) == (dummy_pfnglmulttransposematrixfproc as *const c_void) {&null::<PFNGLMULTTRANSPOSEMATRIXFPROC>()} else {&self.multtransposematrixf}})
3038			.field("multtransposematrixd", unsafe{if transmute::<_, *const c_void>(self.multtransposematrixd) == (dummy_pfnglmulttransposematrixdproc as *const c_void) {&null::<PFNGLMULTTRANSPOSEMATRIXDPROC>()} else {&self.multtransposematrixd}})
3039			.finish()
3040		} else {
3041			f.debug_struct("Version13")
3042			.field("available", &self.available)
3043			.finish_non_exhaustive()
3044		}
3045	}
3046}
3047type PFNGLBLENDFUNCSEPARATEPROC = extern "system" fn(GLenum, GLenum, GLenum, GLenum);
3048type PFNGLMULTIDRAWARRAYSPROC = extern "system" fn(GLenum, *const GLint, *const GLsizei, GLsizei);
3049type PFNGLMULTIDRAWELEMENTSPROC = extern "system" fn(GLenum, *const GLsizei, GLenum, *const *const c_void, GLsizei);
3050type PFNGLPOINTPARAMETERFPROC = extern "system" fn(GLenum, GLfloat);
3051type PFNGLPOINTPARAMETERFVPROC = extern "system" fn(GLenum, *const GLfloat);
3052type PFNGLPOINTPARAMETERIPROC = extern "system" fn(GLenum, GLint);
3053type PFNGLPOINTPARAMETERIVPROC = extern "system" fn(GLenum, *const GLint);
3054type PFNGLFOGCOORDFPROC = extern "system" fn(GLfloat);
3055type PFNGLFOGCOORDFVPROC = extern "system" fn(*const GLfloat);
3056type PFNGLFOGCOORDDPROC = extern "system" fn(GLdouble);
3057type PFNGLFOGCOORDDVPROC = extern "system" fn(*const GLdouble);
3058type PFNGLFOGCOORDPOINTERPROC = extern "system" fn(GLenum, GLsizei, *const c_void);
3059type PFNGLSECONDARYCOLOR3BPROC = extern "system" fn(GLbyte, GLbyte, GLbyte);
3060type PFNGLSECONDARYCOLOR3BVPROC = extern "system" fn(*const GLbyte);
3061type PFNGLSECONDARYCOLOR3DPROC = extern "system" fn(GLdouble, GLdouble, GLdouble);
3062type PFNGLSECONDARYCOLOR3DVPROC = extern "system" fn(*const GLdouble);
3063type PFNGLSECONDARYCOLOR3FPROC = extern "system" fn(GLfloat, GLfloat, GLfloat);
3064type PFNGLSECONDARYCOLOR3FVPROC = extern "system" fn(*const GLfloat);
3065type PFNGLSECONDARYCOLOR3IPROC = extern "system" fn(GLint, GLint, GLint);
3066type PFNGLSECONDARYCOLOR3IVPROC = extern "system" fn(*const GLint);
3067type PFNGLSECONDARYCOLOR3SPROC = extern "system" fn(GLshort, GLshort, GLshort);
3068type PFNGLSECONDARYCOLOR3SVPROC = extern "system" fn(*const GLshort);
3069type PFNGLSECONDARYCOLOR3UBPROC = extern "system" fn(GLubyte, GLubyte, GLubyte);
3070type PFNGLSECONDARYCOLOR3UBVPROC = extern "system" fn(*const GLubyte);
3071type PFNGLSECONDARYCOLOR3UIPROC = extern "system" fn(GLuint, GLuint, GLuint);
3072type PFNGLSECONDARYCOLOR3UIVPROC = extern "system" fn(*const GLuint);
3073type PFNGLSECONDARYCOLOR3USPROC = extern "system" fn(GLushort, GLushort, GLushort);
3074type PFNGLSECONDARYCOLOR3USVPROC = extern "system" fn(*const GLushort);
3075type PFNGLSECONDARYCOLORPOINTERPROC = extern "system" fn(GLint, GLenum, GLsizei, *const c_void);
3076type PFNGLWINDOWPOS2DPROC = extern "system" fn(GLdouble, GLdouble);
3077type PFNGLWINDOWPOS2DVPROC = extern "system" fn(*const GLdouble);
3078type PFNGLWINDOWPOS2FPROC = extern "system" fn(GLfloat, GLfloat);
3079type PFNGLWINDOWPOS2FVPROC = extern "system" fn(*const GLfloat);
3080type PFNGLWINDOWPOS2IPROC = extern "system" fn(GLint, GLint);
3081type PFNGLWINDOWPOS2IVPROC = extern "system" fn(*const GLint);
3082type PFNGLWINDOWPOS2SPROC = extern "system" fn(GLshort, GLshort);
3083type PFNGLWINDOWPOS2SVPROC = extern "system" fn(*const GLshort);
3084type PFNGLWINDOWPOS3DPROC = extern "system" fn(GLdouble, GLdouble, GLdouble);
3085type PFNGLWINDOWPOS3DVPROC = extern "system" fn(*const GLdouble);
3086type PFNGLWINDOWPOS3FPROC = extern "system" fn(GLfloat, GLfloat, GLfloat);
3087type PFNGLWINDOWPOS3FVPROC = extern "system" fn(*const GLfloat);
3088type PFNGLWINDOWPOS3IPROC = extern "system" fn(GLint, GLint, GLint);
3089type PFNGLWINDOWPOS3IVPROC = extern "system" fn(*const GLint);
3090type PFNGLWINDOWPOS3SPROC = extern "system" fn(GLshort, GLshort, GLshort);
3091type PFNGLWINDOWPOS3SVPROC = extern "system" fn(*const GLshort);
3092type PFNGLBLENDCOLORPROC = extern "system" fn(GLfloat, GLfloat, GLfloat, GLfloat);
3093type PFNGLBLENDEQUATIONPROC = extern "system" fn(GLenum);
3094extern "system" fn dummy_pfnglblendfuncseparateproc (_: GLenum, _: GLenum, _: GLenum, _: GLenum) {
3095	panic!("OpenGL function pointer `glBlendFuncSeparate()` is null.")
3096}
3097extern "system" fn dummy_pfnglmultidrawarraysproc (_: GLenum, _: *const GLint, _: *const GLsizei, _: GLsizei) {
3098	panic!("OpenGL function pointer `glMultiDrawArrays()` is null.")
3099}
3100extern "system" fn dummy_pfnglmultidrawelementsproc (_: GLenum, _: *const GLsizei, _: GLenum, _: *const *const c_void, _: GLsizei) {
3101	panic!("OpenGL function pointer `glMultiDrawElements()` is null.")
3102}
3103extern "system" fn dummy_pfnglpointparameterfproc (_: GLenum, _: GLfloat) {
3104	panic!("OpenGL function pointer `glPointParameterf()` is null.")
3105}
3106extern "system" fn dummy_pfnglpointparameterfvproc (_: GLenum, _: *const GLfloat) {
3107	panic!("OpenGL function pointer `glPointParameterfv()` is null.")
3108}
3109extern "system" fn dummy_pfnglpointparameteriproc (_: GLenum, _: GLint) {
3110	panic!("OpenGL function pointer `glPointParameteri()` is null.")
3111}
3112extern "system" fn dummy_pfnglpointparameterivproc (_: GLenum, _: *const GLint) {
3113	panic!("OpenGL function pointer `glPointParameteriv()` is null.")
3114}
3115extern "system" fn dummy_pfnglfogcoordfproc (_: GLfloat) {
3116	panic!("OpenGL function pointer `glFogCoordf()` is null.")
3117}
3118extern "system" fn dummy_pfnglfogcoordfvproc (_: *const GLfloat) {
3119	panic!("OpenGL function pointer `glFogCoordfv()` is null.")
3120}
3121extern "system" fn dummy_pfnglfogcoorddproc (_: GLdouble) {
3122	panic!("OpenGL function pointer `glFogCoordd()` is null.")
3123}
3124extern "system" fn dummy_pfnglfogcoorddvproc (_: *const GLdouble) {
3125	panic!("OpenGL function pointer `glFogCoorddv()` is null.")
3126}
3127extern "system" fn dummy_pfnglfogcoordpointerproc (_: GLenum, _: GLsizei, _: *const c_void) {
3128	panic!("OpenGL function pointer `glFogCoordPointer()` is null.")
3129}
3130extern "system" fn dummy_pfnglsecondarycolor3bproc (_: GLbyte, _: GLbyte, _: GLbyte) {
3131	panic!("OpenGL function pointer `glSecondaryColor3b()` is null.")
3132}
3133extern "system" fn dummy_pfnglsecondarycolor3bvproc (_: *const GLbyte) {
3134	panic!("OpenGL function pointer `glSecondaryColor3bv()` is null.")
3135}
3136extern "system" fn dummy_pfnglsecondarycolor3dproc (_: GLdouble, _: GLdouble, _: GLdouble) {
3137	panic!("OpenGL function pointer `glSecondaryColor3d()` is null.")
3138}
3139extern "system" fn dummy_pfnglsecondarycolor3dvproc (_: *const GLdouble) {
3140	panic!("OpenGL function pointer `glSecondaryColor3dv()` is null.")
3141}
3142extern "system" fn dummy_pfnglsecondarycolor3fproc (_: GLfloat, _: GLfloat, _: GLfloat) {
3143	panic!("OpenGL function pointer `glSecondaryColor3f()` is null.")
3144}
3145extern "system" fn dummy_pfnglsecondarycolor3fvproc (_: *const GLfloat) {
3146	panic!("OpenGL function pointer `glSecondaryColor3fv()` is null.")
3147}
3148extern "system" fn dummy_pfnglsecondarycolor3iproc (_: GLint, _: GLint, _: GLint) {
3149	panic!("OpenGL function pointer `glSecondaryColor3i()` is null.")
3150}
3151extern "system" fn dummy_pfnglsecondarycolor3ivproc (_: *const GLint) {
3152	panic!("OpenGL function pointer `glSecondaryColor3iv()` is null.")
3153}
3154extern "system" fn dummy_pfnglsecondarycolor3sproc (_: GLshort, _: GLshort, _: GLshort) {
3155	panic!("OpenGL function pointer `glSecondaryColor3s()` is null.")
3156}
3157extern "system" fn dummy_pfnglsecondarycolor3svproc (_: *const GLshort) {
3158	panic!("OpenGL function pointer `glSecondaryColor3sv()` is null.")
3159}
3160extern "system" fn dummy_pfnglsecondarycolor3ubproc (_: GLubyte, _: GLubyte, _: GLubyte) {
3161	panic!("OpenGL function pointer `glSecondaryColor3ub()` is null.")
3162}
3163extern "system" fn dummy_pfnglsecondarycolor3ubvproc (_: *const GLubyte) {
3164	panic!("OpenGL function pointer `glSecondaryColor3ubv()` is null.")
3165}
3166extern "system" fn dummy_pfnglsecondarycolor3uiproc (_: GLuint, _: GLuint, _: GLuint) {
3167	panic!("OpenGL function pointer `glSecondaryColor3ui()` is null.")
3168}
3169extern "system" fn dummy_pfnglsecondarycolor3uivproc (_: *const GLuint) {
3170	panic!("OpenGL function pointer `glSecondaryColor3uiv()` is null.")
3171}
3172extern "system" fn dummy_pfnglsecondarycolor3usproc (_: GLushort, _: GLushort, _: GLushort) {
3173	panic!("OpenGL function pointer `glSecondaryColor3us()` is null.")
3174}
3175extern "system" fn dummy_pfnglsecondarycolor3usvproc (_: *const GLushort) {
3176	panic!("OpenGL function pointer `glSecondaryColor3usv()` is null.")
3177}
3178extern "system" fn dummy_pfnglsecondarycolorpointerproc (_: GLint, _: GLenum, _: GLsizei, _: *const c_void) {
3179	panic!("OpenGL function pointer `glSecondaryColorPointer()` is null.")
3180}
3181extern "system" fn dummy_pfnglwindowpos2dproc (_: GLdouble, _: GLdouble) {
3182	panic!("OpenGL function pointer `glWindowPos2d()` is null.")
3183}
3184extern "system" fn dummy_pfnglwindowpos2dvproc (_: *const GLdouble) {
3185	panic!("OpenGL function pointer `glWindowPos2dv()` is null.")
3186}
3187extern "system" fn dummy_pfnglwindowpos2fproc (_: GLfloat, _: GLfloat) {
3188	panic!("OpenGL function pointer `glWindowPos2f()` is null.")
3189}
3190extern "system" fn dummy_pfnglwindowpos2fvproc (_: *const GLfloat) {
3191	panic!("OpenGL function pointer `glWindowPos2fv()` is null.")
3192}
3193extern "system" fn dummy_pfnglwindowpos2iproc (_: GLint, _: GLint) {
3194	panic!("OpenGL function pointer `glWindowPos2i()` is null.")
3195}
3196extern "system" fn dummy_pfnglwindowpos2ivproc (_: *const GLint) {
3197	panic!("OpenGL function pointer `glWindowPos2iv()` is null.")
3198}
3199extern "system" fn dummy_pfnglwindowpos2sproc (_: GLshort, _: GLshort) {
3200	panic!("OpenGL function pointer `glWindowPos2s()` is null.")
3201}
3202extern "system" fn dummy_pfnglwindowpos2svproc (_: *const GLshort) {
3203	panic!("OpenGL function pointer `glWindowPos2sv()` is null.")
3204}
3205extern "system" fn dummy_pfnglwindowpos3dproc (_: GLdouble, _: GLdouble, _: GLdouble) {
3206	panic!("OpenGL function pointer `glWindowPos3d()` is null.")
3207}
3208extern "system" fn dummy_pfnglwindowpos3dvproc (_: *const GLdouble) {
3209	panic!("OpenGL function pointer `glWindowPos3dv()` is null.")
3210}
3211extern "system" fn dummy_pfnglwindowpos3fproc (_: GLfloat, _: GLfloat, _: GLfloat) {
3212	panic!("OpenGL function pointer `glWindowPos3f()` is null.")
3213}
3214extern "system" fn dummy_pfnglwindowpos3fvproc (_: *const GLfloat) {
3215	panic!("OpenGL function pointer `glWindowPos3fv()` is null.")
3216}
3217extern "system" fn dummy_pfnglwindowpos3iproc (_: GLint, _: GLint, _: GLint) {
3218	panic!("OpenGL function pointer `glWindowPos3i()` is null.")
3219}
3220extern "system" fn dummy_pfnglwindowpos3ivproc (_: *const GLint) {
3221	panic!("OpenGL function pointer `glWindowPos3iv()` is null.")
3222}
3223extern "system" fn dummy_pfnglwindowpos3sproc (_: GLshort, _: GLshort, _: GLshort) {
3224	panic!("OpenGL function pointer `glWindowPos3s()` is null.")
3225}
3226extern "system" fn dummy_pfnglwindowpos3svproc (_: *const GLshort) {
3227	panic!("OpenGL function pointer `glWindowPos3sv()` is null.")
3228}
3229extern "system" fn dummy_pfnglblendcolorproc (_: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat) {
3230	panic!("OpenGL function pointer `glBlendColor()` is null.")
3231}
3232extern "system" fn dummy_pfnglblendequationproc (_: GLenum) {
3233	panic!("OpenGL function pointer `glBlendEquation()` is null.")
3234}
3235pub const GL_BLEND_DST_RGB: GLenum = 0x80C8;
3236pub const GL_BLEND_SRC_RGB: GLenum = 0x80C9;
3237pub const GL_BLEND_DST_ALPHA: GLenum = 0x80CA;
3238pub const GL_BLEND_SRC_ALPHA: GLenum = 0x80CB;
3239pub const GL_POINT_FADE_THRESHOLD_SIZE: GLenum = 0x8128;
3240pub const GL_DEPTH_COMPONENT16: GLenum = 0x81A5;
3241pub const GL_DEPTH_COMPONENT24: GLenum = 0x81A6;
3242pub const GL_DEPTH_COMPONENT32: GLenum = 0x81A7;
3243pub const GL_MIRRORED_REPEAT: GLint = 0x8370;
3244pub const GL_MAX_TEXTURE_LOD_BIAS: GLenum = 0x84FD;
3245pub const GL_TEXTURE_LOD_BIAS: GLenum = 0x8501;
3246pub const GL_INCR_WRAP: GLenum = 0x8507;
3247pub const GL_DECR_WRAP: GLenum = 0x8508;
3248pub const GL_TEXTURE_DEPTH_SIZE: GLenum = 0x884A;
3249pub const GL_TEXTURE_COMPARE_MODE: GLenum = 0x884C;
3250pub const GL_TEXTURE_COMPARE_FUNC: GLenum = 0x884D;
3251pub const GL_POINT_SIZE_MIN: GLenum = 0x8126;
3252pub const GL_POINT_SIZE_MAX: GLenum = 0x8127;
3253pub const GL_POINT_DISTANCE_ATTENUATION: GLenum = 0x8129;
3254pub const GL_GENERATE_MIPMAP: GLenum = 0x8191;
3255pub const GL_GENERATE_MIPMAP_HINT: GLenum = 0x8192;
3256pub const GL_FOG_COORDINATE_SOURCE: GLenum = 0x8450;
3257pub const GL_FOG_COORDINATE: GLenum = 0x8451;
3258pub const GL_FRAGMENT_DEPTH: GLenum = 0x8452;
3259pub const GL_CURRENT_FOG_COORDINATE: GLenum = 0x8453;
3260pub const GL_FOG_COORDINATE_ARRAY_TYPE: GLenum = 0x8454;
3261pub const GL_FOG_COORDINATE_ARRAY_STRIDE: GLenum = 0x8455;
3262pub const GL_FOG_COORDINATE_ARRAY_POINTER: GLenum = 0x8456;
3263pub const GL_FOG_COORDINATE_ARRAY: GLenum = 0x8457;
3264pub const GL_COLOR_SUM: GLenum = 0x8458;
3265pub const GL_CURRENT_SECONDARY_COLOR: GLenum = 0x8459;
3266pub const GL_SECONDARY_COLOR_ARRAY_SIZE: GLenum = 0x845A;
3267pub const GL_SECONDARY_COLOR_ARRAY_TYPE: GLenum = 0x845B;
3268pub const GL_SECONDARY_COLOR_ARRAY_STRIDE: GLenum = 0x845C;
3269pub const GL_SECONDARY_COLOR_ARRAY_POINTER: GLenum = 0x845D;
3270pub const GL_SECONDARY_COLOR_ARRAY: GLenum = 0x845E;
3271pub const GL_TEXTURE_FILTER_CONTROL: GLenum = 0x8500;
3272pub const GL_DEPTH_TEXTURE_MODE: GLenum = 0x884B;
3273pub const GL_COMPARE_R_TO_TEXTURE: GLenum = 0x884E;
3274pub const GL_BLEND_COLOR: GLenum = 0x8005;
3275pub const GL_BLEND_EQUATION: GLenum = 0x8009;
3276pub const GL_CONSTANT_COLOR: GLenum = 0x8001;
3277pub const GL_ONE_MINUS_CONSTANT_COLOR: GLenum = 0x8002;
3278pub const GL_CONSTANT_ALPHA: GLenum = 0x8003;
3279pub const GL_ONE_MINUS_CONSTANT_ALPHA: GLenum = 0x8004;
3280pub const GL_FUNC_ADD: GLenum = 0x8006;
3281pub const GL_FUNC_REVERSE_SUBTRACT: GLenum = 0x800B;
3282pub const GL_FUNC_SUBTRACT: GLenum = 0x800A;
3283pub const GL_MIN: GLenum = 0x8007;
3284pub const GL_MAX: GLenum = 0x8008;
3285
3286pub trait GL_1_4 {
3287	fn glGetError(&self) -> GLenum;
3288	fn glBlendFuncSeparate(&self, sfactorRGB: GLenum, dfactorRGB: GLenum, sfactorAlpha: GLenum, dfactorAlpha: GLenum) -> Result<()>;
3289	fn glMultiDrawArrays(&self, mode: GLenum, first: *const GLint, count: *const GLsizei, drawcount: GLsizei) -> Result<()>;
3290	fn glMultiDrawElements(&self, mode: GLenum, count: *const GLsizei, type_: GLenum, indices: *const *const c_void, drawcount: GLsizei) -> Result<()>;
3291	fn glPointParameterf(&self, pname: GLenum, param: GLfloat) -> Result<()>;
3292	fn glPointParameterfv(&self, pname: GLenum, params: *const GLfloat) -> Result<()>;
3293	fn glPointParameteri(&self, pname: GLenum, param: GLint) -> Result<()>;
3294	fn glPointParameteriv(&self, pname: GLenum, params: *const GLint) -> Result<()>;
3295	fn glFogCoordf(&self, coord: GLfloat) -> Result<()>;
3296	fn glFogCoordfv(&self, coord: *const GLfloat) -> Result<()>;
3297	fn glFogCoordd(&self, coord: GLdouble) -> Result<()>;
3298	fn glFogCoorddv(&self, coord: *const GLdouble) -> Result<()>;
3299	fn glFogCoordPointer(&self, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()>;
3300	fn glSecondaryColor3b(&self, red: GLbyte, green: GLbyte, blue: GLbyte) -> Result<()>;
3301	fn glSecondaryColor3bv(&self, v: *const GLbyte) -> Result<()>;
3302	fn glSecondaryColor3d(&self, red: GLdouble, green: GLdouble, blue: GLdouble) -> Result<()>;
3303	fn glSecondaryColor3dv(&self, v: *const GLdouble) -> Result<()>;
3304	fn glSecondaryColor3f(&self, red: GLfloat, green: GLfloat, blue: GLfloat) -> Result<()>;
3305	fn glSecondaryColor3fv(&self, v: *const GLfloat) -> Result<()>;
3306	fn glSecondaryColor3i(&self, red: GLint, green: GLint, blue: GLint) -> Result<()>;
3307	fn glSecondaryColor3iv(&self, v: *const GLint) -> Result<()>;
3308	fn glSecondaryColor3s(&self, red: GLshort, green: GLshort, blue: GLshort) -> Result<()>;
3309	fn glSecondaryColor3sv(&self, v: *const GLshort) -> Result<()>;
3310	fn glSecondaryColor3ub(&self, red: GLubyte, green: GLubyte, blue: GLubyte) -> Result<()>;
3311	fn glSecondaryColor3ubv(&self, v: *const GLubyte) -> Result<()>;
3312	fn glSecondaryColor3ui(&self, red: GLuint, green: GLuint, blue: GLuint) -> Result<()>;
3313	fn glSecondaryColor3uiv(&self, v: *const GLuint) -> Result<()>;
3314	fn glSecondaryColor3us(&self, red: GLushort, green: GLushort, blue: GLushort) -> Result<()>;
3315	fn glSecondaryColor3usv(&self, v: *const GLushort) -> Result<()>;
3316	fn glSecondaryColorPointer(&self, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()>;
3317	fn glWindowPos2d(&self, x: GLdouble, y: GLdouble) -> Result<()>;
3318	fn glWindowPos2dv(&self, v: *const GLdouble) -> Result<()>;
3319	fn glWindowPos2f(&self, x: GLfloat, y: GLfloat) -> Result<()>;
3320	fn glWindowPos2fv(&self, v: *const GLfloat) -> Result<()>;
3321	fn glWindowPos2i(&self, x: GLint, y: GLint) -> Result<()>;
3322	fn glWindowPos2iv(&self, v: *const GLint) -> Result<()>;
3323	fn glWindowPos2s(&self, x: GLshort, y: GLshort) -> Result<()>;
3324	fn glWindowPos2sv(&self, v: *const GLshort) -> Result<()>;
3325	fn glWindowPos3d(&self, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()>;
3326	fn glWindowPos3dv(&self, v: *const GLdouble) -> Result<()>;
3327	fn glWindowPos3f(&self, x: GLfloat, y: GLfloat, z: GLfloat) -> Result<()>;
3328	fn glWindowPos3fv(&self, v: *const GLfloat) -> Result<()>;
3329	fn glWindowPos3i(&self, x: GLint, y: GLint, z: GLint) -> Result<()>;
3330	fn glWindowPos3iv(&self, v: *const GLint) -> Result<()>;
3331	fn glWindowPos3s(&self, x: GLshort, y: GLshort, z: GLshort) -> Result<()>;
3332	fn glWindowPos3sv(&self, v: *const GLshort) -> Result<()>;
3333	fn glBlendColor(&self, red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat) -> Result<()>;
3334	fn glBlendEquation(&self, mode: GLenum) -> Result<()>;
3335}
3336
3337#[derive(Clone, Copy, PartialEq, Eq, Hash)]
3338pub struct Version14 {
3339	available: bool,
3340	geterror: PFNGLGETERRORPROC,
3341	blendfuncseparate: PFNGLBLENDFUNCSEPARATEPROC,
3342	multidrawarrays: PFNGLMULTIDRAWARRAYSPROC,
3343	multidrawelements: PFNGLMULTIDRAWELEMENTSPROC,
3344	pointparameterf: PFNGLPOINTPARAMETERFPROC,
3345	pointparameterfv: PFNGLPOINTPARAMETERFVPROC,
3346	pointparameteri: PFNGLPOINTPARAMETERIPROC,
3347	pointparameteriv: PFNGLPOINTPARAMETERIVPROC,
3348	fogcoordf: PFNGLFOGCOORDFPROC,
3349	fogcoordfv: PFNGLFOGCOORDFVPROC,
3350	fogcoordd: PFNGLFOGCOORDDPROC,
3351	fogcoorddv: PFNGLFOGCOORDDVPROC,
3352	fogcoordpointer: PFNGLFOGCOORDPOINTERPROC,
3353	secondarycolor3b: PFNGLSECONDARYCOLOR3BPROC,
3354	secondarycolor3bv: PFNGLSECONDARYCOLOR3BVPROC,
3355	secondarycolor3d: PFNGLSECONDARYCOLOR3DPROC,
3356	secondarycolor3dv: PFNGLSECONDARYCOLOR3DVPROC,
3357	secondarycolor3f: PFNGLSECONDARYCOLOR3FPROC,
3358	secondarycolor3fv: PFNGLSECONDARYCOLOR3FVPROC,
3359	secondarycolor3i: PFNGLSECONDARYCOLOR3IPROC,
3360	secondarycolor3iv: PFNGLSECONDARYCOLOR3IVPROC,
3361	secondarycolor3s: PFNGLSECONDARYCOLOR3SPROC,
3362	secondarycolor3sv: PFNGLSECONDARYCOLOR3SVPROC,
3363	secondarycolor3ub: PFNGLSECONDARYCOLOR3UBPROC,
3364	secondarycolor3ubv: PFNGLSECONDARYCOLOR3UBVPROC,
3365	secondarycolor3ui: PFNGLSECONDARYCOLOR3UIPROC,
3366	secondarycolor3uiv: PFNGLSECONDARYCOLOR3UIVPROC,
3367	secondarycolor3us: PFNGLSECONDARYCOLOR3USPROC,
3368	secondarycolor3usv: PFNGLSECONDARYCOLOR3USVPROC,
3369	secondarycolorpointer: PFNGLSECONDARYCOLORPOINTERPROC,
3370	windowpos2d: PFNGLWINDOWPOS2DPROC,
3371	windowpos2dv: PFNGLWINDOWPOS2DVPROC,
3372	windowpos2f: PFNGLWINDOWPOS2FPROC,
3373	windowpos2fv: PFNGLWINDOWPOS2FVPROC,
3374	windowpos2i: PFNGLWINDOWPOS2IPROC,
3375	windowpos2iv: PFNGLWINDOWPOS2IVPROC,
3376	windowpos2s: PFNGLWINDOWPOS2SPROC,
3377	windowpos2sv: PFNGLWINDOWPOS2SVPROC,
3378	windowpos3d: PFNGLWINDOWPOS3DPROC,
3379	windowpos3dv: PFNGLWINDOWPOS3DVPROC,
3380	windowpos3f: PFNGLWINDOWPOS3FPROC,
3381	windowpos3fv: PFNGLWINDOWPOS3FVPROC,
3382	windowpos3i: PFNGLWINDOWPOS3IPROC,
3383	windowpos3iv: PFNGLWINDOWPOS3IVPROC,
3384	windowpos3s: PFNGLWINDOWPOS3SPROC,
3385	windowpos3sv: PFNGLWINDOWPOS3SVPROC,
3386	blendcolor: PFNGLBLENDCOLORPROC,
3387	blendequation: PFNGLBLENDEQUATIONPROC,
3388}
3389
3390impl GL_1_4 for Version14 {
3391	#[inline(always)]
3392	fn glGetError(&self) -> GLenum {
3393		(self.geterror)()
3394	}
3395	#[inline(always)]
3396	fn glBlendFuncSeparate(&self, sfactorRGB: GLenum, dfactorRGB: GLenum, sfactorAlpha: GLenum, dfactorAlpha: GLenum) -> Result<()> {
3397		let ret = process_catch("glBlendFuncSeparate", catch_unwind(||(self.blendfuncseparate)(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)));
3398		#[cfg(feature = "diagnose")]
3399		if let Ok(ret) = ret {
3400			return to_result("glBlendFuncSeparate", ret, self.glGetError());
3401		} else {
3402			return ret
3403		}
3404		#[cfg(not(feature = "diagnose"))]
3405		return ret;
3406	}
3407	#[inline(always)]
3408	fn glMultiDrawArrays(&self, mode: GLenum, first: *const GLint, count: *const GLsizei, drawcount: GLsizei) -> Result<()> {
3409		let ret = process_catch("glMultiDrawArrays", catch_unwind(||(self.multidrawarrays)(mode, first, count, drawcount)));
3410		#[cfg(feature = "diagnose")]
3411		if let Ok(ret) = ret {
3412			return to_result("glMultiDrawArrays", ret, self.glGetError());
3413		} else {
3414			return ret
3415		}
3416		#[cfg(not(feature = "diagnose"))]
3417		return ret;
3418	}
3419	#[inline(always)]
3420	fn glMultiDrawElements(&self, mode: GLenum, count: *const GLsizei, type_: GLenum, indices: *const *const c_void, drawcount: GLsizei) -> Result<()> {
3421		let ret = process_catch("glMultiDrawElements", catch_unwind(||(self.multidrawelements)(mode, count, type_, indices, drawcount)));
3422		#[cfg(feature = "diagnose")]
3423		if let Ok(ret) = ret {
3424			return to_result("glMultiDrawElements", ret, self.glGetError());
3425		} else {
3426			return ret
3427		}
3428		#[cfg(not(feature = "diagnose"))]
3429		return ret;
3430	}
3431	#[inline(always)]
3432	fn glPointParameterf(&self, pname: GLenum, param: GLfloat) -> Result<()> {
3433		let ret = process_catch("glPointParameterf", catch_unwind(||(self.pointparameterf)(pname, param)));
3434		#[cfg(feature = "diagnose")]
3435		if let Ok(ret) = ret {
3436			return to_result("glPointParameterf", ret, self.glGetError());
3437		} else {
3438			return ret
3439		}
3440		#[cfg(not(feature = "diagnose"))]
3441		return ret;
3442	}
3443	#[inline(always)]
3444	fn glPointParameterfv(&self, pname: GLenum, params: *const GLfloat) -> Result<()> {
3445		let ret = process_catch("glPointParameterfv", catch_unwind(||(self.pointparameterfv)(pname, params)));
3446		#[cfg(feature = "diagnose")]
3447		if let Ok(ret) = ret {
3448			return to_result("glPointParameterfv", ret, self.glGetError());
3449		} else {
3450			return ret
3451		}
3452		#[cfg(not(feature = "diagnose"))]
3453		return ret;
3454	}
3455	#[inline(always)]
3456	fn glPointParameteri(&self, pname: GLenum, param: GLint) -> Result<()> {
3457		let ret = process_catch("glPointParameteri", catch_unwind(||(self.pointparameteri)(pname, param)));
3458		#[cfg(feature = "diagnose")]
3459		if let Ok(ret) = ret {
3460			return to_result("glPointParameteri", ret, self.glGetError());
3461		} else {
3462			return ret
3463		}
3464		#[cfg(not(feature = "diagnose"))]
3465		return ret;
3466	}
3467	#[inline(always)]
3468	fn glPointParameteriv(&self, pname: GLenum, params: *const GLint) -> Result<()> {
3469		let ret = process_catch("glPointParameteriv", catch_unwind(||(self.pointparameteriv)(pname, params)));
3470		#[cfg(feature = "diagnose")]
3471		if let Ok(ret) = ret {
3472			return to_result("glPointParameteriv", ret, self.glGetError());
3473		} else {
3474			return ret
3475		}
3476		#[cfg(not(feature = "diagnose"))]
3477		return ret;
3478	}
3479	#[inline(always)]
3480	fn glFogCoordf(&self, coord: GLfloat) -> Result<()> {
3481		let ret = process_catch("glFogCoordf", catch_unwind(||(self.fogcoordf)(coord)));
3482		#[cfg(feature = "diagnose")]
3483		if let Ok(ret) = ret {
3484			return to_result("glFogCoordf", ret, self.glGetError());
3485		} else {
3486			return ret
3487		}
3488		#[cfg(not(feature = "diagnose"))]
3489		return ret;
3490	}
3491	#[inline(always)]
3492	fn glFogCoordfv(&self, coord: *const GLfloat) -> Result<()> {
3493		let ret = process_catch("glFogCoordfv", catch_unwind(||(self.fogcoordfv)(coord)));
3494		#[cfg(feature = "diagnose")]
3495		if let Ok(ret) = ret {
3496			return to_result("glFogCoordfv", ret, self.glGetError());
3497		} else {
3498			return ret
3499		}
3500		#[cfg(not(feature = "diagnose"))]
3501		return ret;
3502	}
3503	#[inline(always)]
3504	fn glFogCoordd(&self, coord: GLdouble) -> Result<()> {
3505		let ret = process_catch("glFogCoordd", catch_unwind(||(self.fogcoordd)(coord)));
3506		#[cfg(feature = "diagnose")]
3507		if let Ok(ret) = ret {
3508			return to_result("glFogCoordd", ret, self.glGetError());
3509		} else {
3510			return ret
3511		}
3512		#[cfg(not(feature = "diagnose"))]
3513		return ret;
3514	}
3515	#[inline(always)]
3516	fn glFogCoorddv(&self, coord: *const GLdouble) -> Result<()> {
3517		let ret = process_catch("glFogCoorddv", catch_unwind(||(self.fogcoorddv)(coord)));
3518		#[cfg(feature = "diagnose")]
3519		if let Ok(ret) = ret {
3520			return to_result("glFogCoorddv", ret, self.glGetError());
3521		} else {
3522			return ret
3523		}
3524		#[cfg(not(feature = "diagnose"))]
3525		return ret;
3526	}
3527	#[inline(always)]
3528	fn glFogCoordPointer(&self, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()> {
3529		let ret = process_catch("glFogCoordPointer", catch_unwind(||(self.fogcoordpointer)(type_, stride, pointer)));
3530		#[cfg(feature = "diagnose")]
3531		if let Ok(ret) = ret {
3532			return to_result("glFogCoordPointer", ret, self.glGetError());
3533		} else {
3534			return ret
3535		}
3536		#[cfg(not(feature = "diagnose"))]
3537		return ret;
3538	}
3539	#[inline(always)]
3540	fn glSecondaryColor3b(&self, red: GLbyte, green: GLbyte, blue: GLbyte) -> Result<()> {
3541		let ret = process_catch("glSecondaryColor3b", catch_unwind(||(self.secondarycolor3b)(red, green, blue)));
3542		#[cfg(feature = "diagnose")]
3543		if let Ok(ret) = ret {
3544			return to_result("glSecondaryColor3b", ret, self.glGetError());
3545		} else {
3546			return ret
3547		}
3548		#[cfg(not(feature = "diagnose"))]
3549		return ret;
3550	}
3551	#[inline(always)]
3552	fn glSecondaryColor3bv(&self, v: *const GLbyte) -> Result<()> {
3553		let ret = process_catch("glSecondaryColor3bv", catch_unwind(||(self.secondarycolor3bv)(v)));
3554		#[cfg(feature = "diagnose")]
3555		if let Ok(ret) = ret {
3556			return to_result("glSecondaryColor3bv", ret, self.glGetError());
3557		} else {
3558			return ret
3559		}
3560		#[cfg(not(feature = "diagnose"))]
3561		return ret;
3562	}
3563	#[inline(always)]
3564	fn glSecondaryColor3d(&self, red: GLdouble, green: GLdouble, blue: GLdouble) -> Result<()> {
3565		let ret = process_catch("glSecondaryColor3d", catch_unwind(||(self.secondarycolor3d)(red, green, blue)));
3566		#[cfg(feature = "diagnose")]
3567		if let Ok(ret) = ret {
3568			return to_result("glSecondaryColor3d", ret, self.glGetError());
3569		} else {
3570			return ret
3571		}
3572		#[cfg(not(feature = "diagnose"))]
3573		return ret;
3574	}
3575	#[inline(always)]
3576	fn glSecondaryColor3dv(&self, v: *const GLdouble) -> Result<()> {
3577		let ret = process_catch("glSecondaryColor3dv", catch_unwind(||(self.secondarycolor3dv)(v)));
3578		#[cfg(feature = "diagnose")]
3579		if let Ok(ret) = ret {
3580			return to_result("glSecondaryColor3dv", ret, self.glGetError());
3581		} else {
3582			return ret
3583		}
3584		#[cfg(not(feature = "diagnose"))]
3585		return ret;
3586	}
3587	#[inline(always)]
3588	fn glSecondaryColor3f(&self, red: GLfloat, green: GLfloat, blue: GLfloat) -> Result<()> {
3589		let ret = process_catch("glSecondaryColor3f", catch_unwind(||(self.secondarycolor3f)(red, green, blue)));
3590		#[cfg(feature = "diagnose")]
3591		if let Ok(ret) = ret {
3592			return to_result("glSecondaryColor3f", ret, self.glGetError());
3593		} else {
3594			return ret
3595		}
3596		#[cfg(not(feature = "diagnose"))]
3597		return ret;
3598	}
3599	#[inline(always)]
3600	fn glSecondaryColor3fv(&self, v: *const GLfloat) -> Result<()> {
3601		let ret = process_catch("glSecondaryColor3fv", catch_unwind(||(self.secondarycolor3fv)(v)));
3602		#[cfg(feature = "diagnose")]
3603		if let Ok(ret) = ret {
3604			return to_result("glSecondaryColor3fv", ret, self.glGetError());
3605		} else {
3606			return ret
3607		}
3608		#[cfg(not(feature = "diagnose"))]
3609		return ret;
3610	}
3611	#[inline(always)]
3612	fn glSecondaryColor3i(&self, red: GLint, green: GLint, blue: GLint) -> Result<()> {
3613		let ret = process_catch("glSecondaryColor3i", catch_unwind(||(self.secondarycolor3i)(red, green, blue)));
3614		#[cfg(feature = "diagnose")]
3615		if let Ok(ret) = ret {
3616			return to_result("glSecondaryColor3i", ret, self.glGetError());
3617		} else {
3618			return ret
3619		}
3620		#[cfg(not(feature = "diagnose"))]
3621		return ret;
3622	}
3623	#[inline(always)]
3624	fn glSecondaryColor3iv(&self, v: *const GLint) -> Result<()> {
3625		let ret = process_catch("glSecondaryColor3iv", catch_unwind(||(self.secondarycolor3iv)(v)));
3626		#[cfg(feature = "diagnose")]
3627		if let Ok(ret) = ret {
3628			return to_result("glSecondaryColor3iv", ret, self.glGetError());
3629		} else {
3630			return ret
3631		}
3632		#[cfg(not(feature = "diagnose"))]
3633		return ret;
3634	}
3635	#[inline(always)]
3636	fn glSecondaryColor3s(&self, red: GLshort, green: GLshort, blue: GLshort) -> Result<()> {
3637		let ret = process_catch("glSecondaryColor3s", catch_unwind(||(self.secondarycolor3s)(red, green, blue)));
3638		#[cfg(feature = "diagnose")]
3639		if let Ok(ret) = ret {
3640			return to_result("glSecondaryColor3s", ret, self.glGetError());
3641		} else {
3642			return ret
3643		}
3644		#[cfg(not(feature = "diagnose"))]
3645		return ret;
3646	}
3647	#[inline(always)]
3648	fn glSecondaryColor3sv(&self, v: *const GLshort) -> Result<()> {
3649		let ret = process_catch("glSecondaryColor3sv", catch_unwind(||(self.secondarycolor3sv)(v)));
3650		#[cfg(feature = "diagnose")]
3651		if let Ok(ret) = ret {
3652			return to_result("glSecondaryColor3sv", ret, self.glGetError());
3653		} else {
3654			return ret
3655		}
3656		#[cfg(not(feature = "diagnose"))]
3657		return ret;
3658	}
3659	#[inline(always)]
3660	fn glSecondaryColor3ub(&self, red: GLubyte, green: GLubyte, blue: GLubyte) -> Result<()> {
3661		let ret = process_catch("glSecondaryColor3ub", catch_unwind(||(self.secondarycolor3ub)(red, green, blue)));
3662		#[cfg(feature = "diagnose")]
3663		if let Ok(ret) = ret {
3664			return to_result("glSecondaryColor3ub", ret, self.glGetError());
3665		} else {
3666			return ret
3667		}
3668		#[cfg(not(feature = "diagnose"))]
3669		return ret;
3670	}
3671	#[inline(always)]
3672	fn glSecondaryColor3ubv(&self, v: *const GLubyte) -> Result<()> {
3673		let ret = process_catch("glSecondaryColor3ubv", catch_unwind(||(self.secondarycolor3ubv)(v)));
3674		#[cfg(feature = "diagnose")]
3675		if let Ok(ret) = ret {
3676			return to_result("glSecondaryColor3ubv", ret, self.glGetError());
3677		} else {
3678			return ret
3679		}
3680		#[cfg(not(feature = "diagnose"))]
3681		return ret;
3682	}
3683	#[inline(always)]
3684	fn glSecondaryColor3ui(&self, red: GLuint, green: GLuint, blue: GLuint) -> Result<()> {
3685		let ret = process_catch("glSecondaryColor3ui", catch_unwind(||(self.secondarycolor3ui)(red, green, blue)));
3686		#[cfg(feature = "diagnose")]
3687		if let Ok(ret) = ret {
3688			return to_result("glSecondaryColor3ui", ret, self.glGetError());
3689		} else {
3690			return ret
3691		}
3692		#[cfg(not(feature = "diagnose"))]
3693		return ret;
3694	}
3695	#[inline(always)]
3696	fn glSecondaryColor3uiv(&self, v: *const GLuint) -> Result<()> {
3697		let ret = process_catch("glSecondaryColor3uiv", catch_unwind(||(self.secondarycolor3uiv)(v)));
3698		#[cfg(feature = "diagnose")]
3699		if let Ok(ret) = ret {
3700			return to_result("glSecondaryColor3uiv", ret, self.glGetError());
3701		} else {
3702			return ret
3703		}
3704		#[cfg(not(feature = "diagnose"))]
3705		return ret;
3706	}
3707	#[inline(always)]
3708	fn glSecondaryColor3us(&self, red: GLushort, green: GLushort, blue: GLushort) -> Result<()> {
3709		let ret = process_catch("glSecondaryColor3us", catch_unwind(||(self.secondarycolor3us)(red, green, blue)));
3710		#[cfg(feature = "diagnose")]
3711		if let Ok(ret) = ret {
3712			return to_result("glSecondaryColor3us", ret, self.glGetError());
3713		} else {
3714			return ret
3715		}
3716		#[cfg(not(feature = "diagnose"))]
3717		return ret;
3718	}
3719	#[inline(always)]
3720	fn glSecondaryColor3usv(&self, v: *const GLushort) -> Result<()> {
3721		let ret = process_catch("glSecondaryColor3usv", catch_unwind(||(self.secondarycolor3usv)(v)));
3722		#[cfg(feature = "diagnose")]
3723		if let Ok(ret) = ret {
3724			return to_result("glSecondaryColor3usv", ret, self.glGetError());
3725		} else {
3726			return ret
3727		}
3728		#[cfg(not(feature = "diagnose"))]
3729		return ret;
3730	}
3731	#[inline(always)]
3732	fn glSecondaryColorPointer(&self, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()> {
3733		let ret = process_catch("glSecondaryColorPointer", catch_unwind(||(self.secondarycolorpointer)(size, type_, stride, pointer)));
3734		#[cfg(feature = "diagnose")]
3735		if let Ok(ret) = ret {
3736			return to_result("glSecondaryColorPointer", ret, self.glGetError());
3737		} else {
3738			return ret
3739		}
3740		#[cfg(not(feature = "diagnose"))]
3741		return ret;
3742	}
3743	#[inline(always)]
3744	fn glWindowPos2d(&self, x: GLdouble, y: GLdouble) -> Result<()> {
3745		let ret = process_catch("glWindowPos2d", catch_unwind(||(self.windowpos2d)(x, y)));
3746		#[cfg(feature = "diagnose")]
3747		if let Ok(ret) = ret {
3748			return to_result("glWindowPos2d", ret, self.glGetError());
3749		} else {
3750			return ret
3751		}
3752		#[cfg(not(feature = "diagnose"))]
3753		return ret;
3754	}
3755	#[inline(always)]
3756	fn glWindowPos2dv(&self, v: *const GLdouble) -> Result<()> {
3757		let ret = process_catch("glWindowPos2dv", catch_unwind(||(self.windowpos2dv)(v)));
3758		#[cfg(feature = "diagnose")]
3759		if let Ok(ret) = ret {
3760			return to_result("glWindowPos2dv", ret, self.glGetError());
3761		} else {
3762			return ret
3763		}
3764		#[cfg(not(feature = "diagnose"))]
3765		return ret;
3766	}
3767	#[inline(always)]
3768	fn glWindowPos2f(&self, x: GLfloat, y: GLfloat) -> Result<()> {
3769		let ret = process_catch("glWindowPos2f", catch_unwind(||(self.windowpos2f)(x, y)));
3770		#[cfg(feature = "diagnose")]
3771		if let Ok(ret) = ret {
3772			return to_result("glWindowPos2f", ret, self.glGetError());
3773		} else {
3774			return ret
3775		}
3776		#[cfg(not(feature = "diagnose"))]
3777		return ret;
3778	}
3779	#[inline(always)]
3780	fn glWindowPos2fv(&self, v: *const GLfloat) -> Result<()> {
3781		let ret = process_catch("glWindowPos2fv", catch_unwind(||(self.windowpos2fv)(v)));
3782		#[cfg(feature = "diagnose")]
3783		if let Ok(ret) = ret {
3784			return to_result("glWindowPos2fv", ret, self.glGetError());
3785		} else {
3786			return ret
3787		}
3788		#[cfg(not(feature = "diagnose"))]
3789		return ret;
3790	}
3791	#[inline(always)]
3792	fn glWindowPos2i(&self, x: GLint, y: GLint) -> Result<()> {
3793		let ret = process_catch("glWindowPos2i", catch_unwind(||(self.windowpos2i)(x, y)));
3794		#[cfg(feature = "diagnose")]
3795		if let Ok(ret) = ret {
3796			return to_result("glWindowPos2i", ret, self.glGetError());
3797		} else {
3798			return ret
3799		}
3800		#[cfg(not(feature = "diagnose"))]
3801		return ret;
3802	}
3803	#[inline(always)]
3804	fn glWindowPos2iv(&self, v: *const GLint) -> Result<()> {
3805		let ret = process_catch("glWindowPos2iv", catch_unwind(||(self.windowpos2iv)(v)));
3806		#[cfg(feature = "diagnose")]
3807		if let Ok(ret) = ret {
3808			return to_result("glWindowPos2iv", ret, self.glGetError());
3809		} else {
3810			return ret
3811		}
3812		#[cfg(not(feature = "diagnose"))]
3813		return ret;
3814	}
3815	#[inline(always)]
3816	fn glWindowPos2s(&self, x: GLshort, y: GLshort) -> Result<()> {
3817		let ret = process_catch("glWindowPos2s", catch_unwind(||(self.windowpos2s)(x, y)));
3818		#[cfg(feature = "diagnose")]
3819		if let Ok(ret) = ret {
3820			return to_result("glWindowPos2s", ret, self.glGetError());
3821		} else {
3822			return ret
3823		}
3824		#[cfg(not(feature = "diagnose"))]
3825		return ret;
3826	}
3827	#[inline(always)]
3828	fn glWindowPos2sv(&self, v: *const GLshort) -> Result<()> {
3829		let ret = process_catch("glWindowPos2sv", catch_unwind(||(self.windowpos2sv)(v)));
3830		#[cfg(feature = "diagnose")]
3831		if let Ok(ret) = ret {
3832			return to_result("glWindowPos2sv", ret, self.glGetError());
3833		} else {
3834			return ret
3835		}
3836		#[cfg(not(feature = "diagnose"))]
3837		return ret;
3838	}
3839	#[inline(always)]
3840	fn glWindowPos3d(&self, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()> {
3841		let ret = process_catch("glWindowPos3d", catch_unwind(||(self.windowpos3d)(x, y, z)));
3842		#[cfg(feature = "diagnose")]
3843		if let Ok(ret) = ret {
3844			return to_result("glWindowPos3d", ret, self.glGetError());
3845		} else {
3846			return ret
3847		}
3848		#[cfg(not(feature = "diagnose"))]
3849		return ret;
3850	}
3851	#[inline(always)]
3852	fn glWindowPos3dv(&self, v: *const GLdouble) -> Result<()> {
3853		let ret = process_catch("glWindowPos3dv", catch_unwind(||(self.windowpos3dv)(v)));
3854		#[cfg(feature = "diagnose")]
3855		if let Ok(ret) = ret {
3856			return to_result("glWindowPos3dv", ret, self.glGetError());
3857		} else {
3858			return ret
3859		}
3860		#[cfg(not(feature = "diagnose"))]
3861		return ret;
3862	}
3863	#[inline(always)]
3864	fn glWindowPos3f(&self, x: GLfloat, y: GLfloat, z: GLfloat) -> Result<()> {
3865		let ret = process_catch("glWindowPos3f", catch_unwind(||(self.windowpos3f)(x, y, z)));
3866		#[cfg(feature = "diagnose")]
3867		if let Ok(ret) = ret {
3868			return to_result("glWindowPos3f", ret, self.glGetError());
3869		} else {
3870			return ret
3871		}
3872		#[cfg(not(feature = "diagnose"))]
3873		return ret;
3874	}
3875	#[inline(always)]
3876	fn glWindowPos3fv(&self, v: *const GLfloat) -> Result<()> {
3877		let ret = process_catch("glWindowPos3fv", catch_unwind(||(self.windowpos3fv)(v)));
3878		#[cfg(feature = "diagnose")]
3879		if let Ok(ret) = ret {
3880			return to_result("glWindowPos3fv", ret, self.glGetError());
3881		} else {
3882			return ret
3883		}
3884		#[cfg(not(feature = "diagnose"))]
3885		return ret;
3886	}
3887	#[inline(always)]
3888	fn glWindowPos3i(&self, x: GLint, y: GLint, z: GLint) -> Result<()> {
3889		let ret = process_catch("glWindowPos3i", catch_unwind(||(self.windowpos3i)(x, y, z)));
3890		#[cfg(feature = "diagnose")]
3891		if let Ok(ret) = ret {
3892			return to_result("glWindowPos3i", ret, self.glGetError());
3893		} else {
3894			return ret
3895		}
3896		#[cfg(not(feature = "diagnose"))]
3897		return ret;
3898	}
3899	#[inline(always)]
3900	fn glWindowPos3iv(&self, v: *const GLint) -> Result<()> {
3901		let ret = process_catch("glWindowPos3iv", catch_unwind(||(self.windowpos3iv)(v)));
3902		#[cfg(feature = "diagnose")]
3903		if let Ok(ret) = ret {
3904			return to_result("glWindowPos3iv", ret, self.glGetError());
3905		} else {
3906			return ret
3907		}
3908		#[cfg(not(feature = "diagnose"))]
3909		return ret;
3910	}
3911	#[inline(always)]
3912	fn glWindowPos3s(&self, x: GLshort, y: GLshort, z: GLshort) -> Result<()> {
3913		let ret = process_catch("glWindowPos3s", catch_unwind(||(self.windowpos3s)(x, y, z)));
3914		#[cfg(feature = "diagnose")]
3915		if let Ok(ret) = ret {
3916			return to_result("glWindowPos3s", ret, self.glGetError());
3917		} else {
3918			return ret
3919		}
3920		#[cfg(not(feature = "diagnose"))]
3921		return ret;
3922	}
3923	#[inline(always)]
3924	fn glWindowPos3sv(&self, v: *const GLshort) -> Result<()> {
3925		let ret = process_catch("glWindowPos3sv", catch_unwind(||(self.windowpos3sv)(v)));
3926		#[cfg(feature = "diagnose")]
3927		if let Ok(ret) = ret {
3928			return to_result("glWindowPos3sv", ret, self.glGetError());
3929		} else {
3930			return ret
3931		}
3932		#[cfg(not(feature = "diagnose"))]
3933		return ret;
3934	}
3935	#[inline(always)]
3936	fn glBlendColor(&self, red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat) -> Result<()> {
3937		let ret = process_catch("glBlendColor", catch_unwind(||(self.blendcolor)(red, green, blue, alpha)));
3938		#[cfg(feature = "diagnose")]
3939		if let Ok(ret) = ret {
3940			return to_result("glBlendColor", ret, self.glGetError());
3941		} else {
3942			return ret
3943		}
3944		#[cfg(not(feature = "diagnose"))]
3945		return ret;
3946	}
3947	#[inline(always)]
3948	fn glBlendEquation(&self, mode: GLenum) -> Result<()> {
3949		let ret = process_catch("glBlendEquation", catch_unwind(||(self.blendequation)(mode)));
3950		#[cfg(feature = "diagnose")]
3951		if let Ok(ret) = ret {
3952			return to_result("glBlendEquation", ret, self.glGetError());
3953		} else {
3954			return ret
3955		}
3956		#[cfg(not(feature = "diagnose"))]
3957		return ret;
3958	}
3959}
3960
3961impl Version14 {
3962	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
3963		let (_spec, major, minor, release) = base.get_version();
3964		if (major, minor, release) < (1, 4, 0) {
3965			return Self::default();
3966		}
3967		Self {
3968			available: true,
3969			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
3970			blendfuncseparate: {let proc = get_proc_address("glBlendFuncSeparate"); if proc == null() {dummy_pfnglblendfuncseparateproc} else {unsafe{transmute(proc)}}},
3971			multidrawarrays: {let proc = get_proc_address("glMultiDrawArrays"); if proc == null() {dummy_pfnglmultidrawarraysproc} else {unsafe{transmute(proc)}}},
3972			multidrawelements: {let proc = get_proc_address("glMultiDrawElements"); if proc == null() {dummy_pfnglmultidrawelementsproc} else {unsafe{transmute(proc)}}},
3973			pointparameterf: {let proc = get_proc_address("glPointParameterf"); if proc == null() {dummy_pfnglpointparameterfproc} else {unsafe{transmute(proc)}}},
3974			pointparameterfv: {let proc = get_proc_address("glPointParameterfv"); if proc == null() {dummy_pfnglpointparameterfvproc} else {unsafe{transmute(proc)}}},
3975			pointparameteri: {let proc = get_proc_address("glPointParameteri"); if proc == null() {dummy_pfnglpointparameteriproc} else {unsafe{transmute(proc)}}},
3976			pointparameteriv: {let proc = get_proc_address("glPointParameteriv"); if proc == null() {dummy_pfnglpointparameterivproc} else {unsafe{transmute(proc)}}},
3977			fogcoordf: {let proc = get_proc_address("glFogCoordf"); if proc == null() {dummy_pfnglfogcoordfproc} else {unsafe{transmute(proc)}}},
3978			fogcoordfv: {let proc = get_proc_address("glFogCoordfv"); if proc == null() {dummy_pfnglfogcoordfvproc} else {unsafe{transmute(proc)}}},
3979			fogcoordd: {let proc = get_proc_address("glFogCoordd"); if proc == null() {dummy_pfnglfogcoorddproc} else {unsafe{transmute(proc)}}},
3980			fogcoorddv: {let proc = get_proc_address("glFogCoorddv"); if proc == null() {dummy_pfnglfogcoorddvproc} else {unsafe{transmute(proc)}}},
3981			fogcoordpointer: {let proc = get_proc_address("glFogCoordPointer"); if proc == null() {dummy_pfnglfogcoordpointerproc} else {unsafe{transmute(proc)}}},
3982			secondarycolor3b: {let proc = get_proc_address("glSecondaryColor3b"); if proc == null() {dummy_pfnglsecondarycolor3bproc} else {unsafe{transmute(proc)}}},
3983			secondarycolor3bv: {let proc = get_proc_address("glSecondaryColor3bv"); if proc == null() {dummy_pfnglsecondarycolor3bvproc} else {unsafe{transmute(proc)}}},
3984			secondarycolor3d: {let proc = get_proc_address("glSecondaryColor3d"); if proc == null() {dummy_pfnglsecondarycolor3dproc} else {unsafe{transmute(proc)}}},
3985			secondarycolor3dv: {let proc = get_proc_address("glSecondaryColor3dv"); if proc == null() {dummy_pfnglsecondarycolor3dvproc} else {unsafe{transmute(proc)}}},
3986			secondarycolor3f: {let proc = get_proc_address("glSecondaryColor3f"); if proc == null() {dummy_pfnglsecondarycolor3fproc} else {unsafe{transmute(proc)}}},
3987			secondarycolor3fv: {let proc = get_proc_address("glSecondaryColor3fv"); if proc == null() {dummy_pfnglsecondarycolor3fvproc} else {unsafe{transmute(proc)}}},
3988			secondarycolor3i: {let proc = get_proc_address("glSecondaryColor3i"); if proc == null() {dummy_pfnglsecondarycolor3iproc} else {unsafe{transmute(proc)}}},
3989			secondarycolor3iv: {let proc = get_proc_address("glSecondaryColor3iv"); if proc == null() {dummy_pfnglsecondarycolor3ivproc} else {unsafe{transmute(proc)}}},
3990			secondarycolor3s: {let proc = get_proc_address("glSecondaryColor3s"); if proc == null() {dummy_pfnglsecondarycolor3sproc} else {unsafe{transmute(proc)}}},
3991			secondarycolor3sv: {let proc = get_proc_address("glSecondaryColor3sv"); if proc == null() {dummy_pfnglsecondarycolor3svproc} else {unsafe{transmute(proc)}}},
3992			secondarycolor3ub: {let proc = get_proc_address("glSecondaryColor3ub"); if proc == null() {dummy_pfnglsecondarycolor3ubproc} else {unsafe{transmute(proc)}}},
3993			secondarycolor3ubv: {let proc = get_proc_address("glSecondaryColor3ubv"); if proc == null() {dummy_pfnglsecondarycolor3ubvproc} else {unsafe{transmute(proc)}}},
3994			secondarycolor3ui: {let proc = get_proc_address("glSecondaryColor3ui"); if proc == null() {dummy_pfnglsecondarycolor3uiproc} else {unsafe{transmute(proc)}}},
3995			secondarycolor3uiv: {let proc = get_proc_address("glSecondaryColor3uiv"); if proc == null() {dummy_pfnglsecondarycolor3uivproc} else {unsafe{transmute(proc)}}},
3996			secondarycolor3us: {let proc = get_proc_address("glSecondaryColor3us"); if proc == null() {dummy_pfnglsecondarycolor3usproc} else {unsafe{transmute(proc)}}},
3997			secondarycolor3usv: {let proc = get_proc_address("glSecondaryColor3usv"); if proc == null() {dummy_pfnglsecondarycolor3usvproc} else {unsafe{transmute(proc)}}},
3998			secondarycolorpointer: {let proc = get_proc_address("glSecondaryColorPointer"); if proc == null() {dummy_pfnglsecondarycolorpointerproc} else {unsafe{transmute(proc)}}},
3999			windowpos2d: {let proc = get_proc_address("glWindowPos2d"); if proc == null() {dummy_pfnglwindowpos2dproc} else {unsafe{transmute(proc)}}},
4000			windowpos2dv: {let proc = get_proc_address("glWindowPos2dv"); if proc == null() {dummy_pfnglwindowpos2dvproc} else {unsafe{transmute(proc)}}},
4001			windowpos2f: {let proc = get_proc_address("glWindowPos2f"); if proc == null() {dummy_pfnglwindowpos2fproc} else {unsafe{transmute(proc)}}},
4002			windowpos2fv: {let proc = get_proc_address("glWindowPos2fv"); if proc == null() {dummy_pfnglwindowpos2fvproc} else {unsafe{transmute(proc)}}},
4003			windowpos2i: {let proc = get_proc_address("glWindowPos2i"); if proc == null() {dummy_pfnglwindowpos2iproc} else {unsafe{transmute(proc)}}},
4004			windowpos2iv: {let proc = get_proc_address("glWindowPos2iv"); if proc == null() {dummy_pfnglwindowpos2ivproc} else {unsafe{transmute(proc)}}},
4005			windowpos2s: {let proc = get_proc_address("glWindowPos2s"); if proc == null() {dummy_pfnglwindowpos2sproc} else {unsafe{transmute(proc)}}},
4006			windowpos2sv: {let proc = get_proc_address("glWindowPos2sv"); if proc == null() {dummy_pfnglwindowpos2svproc} else {unsafe{transmute(proc)}}},
4007			windowpos3d: {let proc = get_proc_address("glWindowPos3d"); if proc == null() {dummy_pfnglwindowpos3dproc} else {unsafe{transmute(proc)}}},
4008			windowpos3dv: {let proc = get_proc_address("glWindowPos3dv"); if proc == null() {dummy_pfnglwindowpos3dvproc} else {unsafe{transmute(proc)}}},
4009			windowpos3f: {let proc = get_proc_address("glWindowPos3f"); if proc == null() {dummy_pfnglwindowpos3fproc} else {unsafe{transmute(proc)}}},
4010			windowpos3fv: {let proc = get_proc_address("glWindowPos3fv"); if proc == null() {dummy_pfnglwindowpos3fvproc} else {unsafe{transmute(proc)}}},
4011			windowpos3i: {let proc = get_proc_address("glWindowPos3i"); if proc == null() {dummy_pfnglwindowpos3iproc} else {unsafe{transmute(proc)}}},
4012			windowpos3iv: {let proc = get_proc_address("glWindowPos3iv"); if proc == null() {dummy_pfnglwindowpos3ivproc} else {unsafe{transmute(proc)}}},
4013			windowpos3s: {let proc = get_proc_address("glWindowPos3s"); if proc == null() {dummy_pfnglwindowpos3sproc} else {unsafe{transmute(proc)}}},
4014			windowpos3sv: {let proc = get_proc_address("glWindowPos3sv"); if proc == null() {dummy_pfnglwindowpos3svproc} else {unsafe{transmute(proc)}}},
4015			blendcolor: {let proc = get_proc_address("glBlendColor"); if proc == null() {dummy_pfnglblendcolorproc} else {unsafe{transmute(proc)}}},
4016			blendequation: {let proc = get_proc_address("glBlendEquation"); if proc == null() {dummy_pfnglblendequationproc} else {unsafe{transmute(proc)}}},
4017		}
4018	}
4019	#[inline(always)]
4020	pub fn get_available(&self) -> bool {
4021		self.available
4022	}
4023}
4024
4025impl Default for Version14 {
4026	fn default() -> Self {
4027		Self {
4028			available: false,
4029			geterror: dummy_pfnglgeterrorproc,
4030			blendfuncseparate: dummy_pfnglblendfuncseparateproc,
4031			multidrawarrays: dummy_pfnglmultidrawarraysproc,
4032			multidrawelements: dummy_pfnglmultidrawelementsproc,
4033			pointparameterf: dummy_pfnglpointparameterfproc,
4034			pointparameterfv: dummy_pfnglpointparameterfvproc,
4035			pointparameteri: dummy_pfnglpointparameteriproc,
4036			pointparameteriv: dummy_pfnglpointparameterivproc,
4037			fogcoordf: dummy_pfnglfogcoordfproc,
4038			fogcoordfv: dummy_pfnglfogcoordfvproc,
4039			fogcoordd: dummy_pfnglfogcoorddproc,
4040			fogcoorddv: dummy_pfnglfogcoorddvproc,
4041			fogcoordpointer: dummy_pfnglfogcoordpointerproc,
4042			secondarycolor3b: dummy_pfnglsecondarycolor3bproc,
4043			secondarycolor3bv: dummy_pfnglsecondarycolor3bvproc,
4044			secondarycolor3d: dummy_pfnglsecondarycolor3dproc,
4045			secondarycolor3dv: dummy_pfnglsecondarycolor3dvproc,
4046			secondarycolor3f: dummy_pfnglsecondarycolor3fproc,
4047			secondarycolor3fv: dummy_pfnglsecondarycolor3fvproc,
4048			secondarycolor3i: dummy_pfnglsecondarycolor3iproc,
4049			secondarycolor3iv: dummy_pfnglsecondarycolor3ivproc,
4050			secondarycolor3s: dummy_pfnglsecondarycolor3sproc,
4051			secondarycolor3sv: dummy_pfnglsecondarycolor3svproc,
4052			secondarycolor3ub: dummy_pfnglsecondarycolor3ubproc,
4053			secondarycolor3ubv: dummy_pfnglsecondarycolor3ubvproc,
4054			secondarycolor3ui: dummy_pfnglsecondarycolor3uiproc,
4055			secondarycolor3uiv: dummy_pfnglsecondarycolor3uivproc,
4056			secondarycolor3us: dummy_pfnglsecondarycolor3usproc,
4057			secondarycolor3usv: dummy_pfnglsecondarycolor3usvproc,
4058			secondarycolorpointer: dummy_pfnglsecondarycolorpointerproc,
4059			windowpos2d: dummy_pfnglwindowpos2dproc,
4060			windowpos2dv: dummy_pfnglwindowpos2dvproc,
4061			windowpos2f: dummy_pfnglwindowpos2fproc,
4062			windowpos2fv: dummy_pfnglwindowpos2fvproc,
4063			windowpos2i: dummy_pfnglwindowpos2iproc,
4064			windowpos2iv: dummy_pfnglwindowpos2ivproc,
4065			windowpos2s: dummy_pfnglwindowpos2sproc,
4066			windowpos2sv: dummy_pfnglwindowpos2svproc,
4067			windowpos3d: dummy_pfnglwindowpos3dproc,
4068			windowpos3dv: dummy_pfnglwindowpos3dvproc,
4069			windowpos3f: dummy_pfnglwindowpos3fproc,
4070			windowpos3fv: dummy_pfnglwindowpos3fvproc,
4071			windowpos3i: dummy_pfnglwindowpos3iproc,
4072			windowpos3iv: dummy_pfnglwindowpos3ivproc,
4073			windowpos3s: dummy_pfnglwindowpos3sproc,
4074			windowpos3sv: dummy_pfnglwindowpos3svproc,
4075			blendcolor: dummy_pfnglblendcolorproc,
4076			blendequation: dummy_pfnglblendequationproc,
4077		}
4078	}
4079}
4080impl Debug for Version14 {
4081	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
4082		if self.available {
4083			f.debug_struct("Version14")
4084			.field("available", &self.available)
4085			.field("blendfuncseparate", unsafe{if transmute::<_, *const c_void>(self.blendfuncseparate) == (dummy_pfnglblendfuncseparateproc as *const c_void) {&null::<PFNGLBLENDFUNCSEPARATEPROC>()} else {&self.blendfuncseparate}})
4086			.field("multidrawarrays", unsafe{if transmute::<_, *const c_void>(self.multidrawarrays) == (dummy_pfnglmultidrawarraysproc as *const c_void) {&null::<PFNGLMULTIDRAWARRAYSPROC>()} else {&self.multidrawarrays}})
4087			.field("multidrawelements", unsafe{if transmute::<_, *const c_void>(self.multidrawelements) == (dummy_pfnglmultidrawelementsproc as *const c_void) {&null::<PFNGLMULTIDRAWELEMENTSPROC>()} else {&self.multidrawelements}})
4088			.field("pointparameterf", unsafe{if transmute::<_, *const c_void>(self.pointparameterf) == (dummy_pfnglpointparameterfproc as *const c_void) {&null::<PFNGLPOINTPARAMETERFPROC>()} else {&self.pointparameterf}})
4089			.field("pointparameterfv", unsafe{if transmute::<_, *const c_void>(self.pointparameterfv) == (dummy_pfnglpointparameterfvproc as *const c_void) {&null::<PFNGLPOINTPARAMETERFVPROC>()} else {&self.pointparameterfv}})
4090			.field("pointparameteri", unsafe{if transmute::<_, *const c_void>(self.pointparameteri) == (dummy_pfnglpointparameteriproc as *const c_void) {&null::<PFNGLPOINTPARAMETERIPROC>()} else {&self.pointparameteri}})
4091			.field("pointparameteriv", unsafe{if transmute::<_, *const c_void>(self.pointparameteriv) == (dummy_pfnglpointparameterivproc as *const c_void) {&null::<PFNGLPOINTPARAMETERIVPROC>()} else {&self.pointparameteriv}})
4092			.field("fogcoordf", unsafe{if transmute::<_, *const c_void>(self.fogcoordf) == (dummy_pfnglfogcoordfproc as *const c_void) {&null::<PFNGLFOGCOORDFPROC>()} else {&self.fogcoordf}})
4093			.field("fogcoordfv", unsafe{if transmute::<_, *const c_void>(self.fogcoordfv) == (dummy_pfnglfogcoordfvproc as *const c_void) {&null::<PFNGLFOGCOORDFVPROC>()} else {&self.fogcoordfv}})
4094			.field("fogcoordd", unsafe{if transmute::<_, *const c_void>(self.fogcoordd) == (dummy_pfnglfogcoorddproc as *const c_void) {&null::<PFNGLFOGCOORDDPROC>()} else {&self.fogcoordd}})
4095			.field("fogcoorddv", unsafe{if transmute::<_, *const c_void>(self.fogcoorddv) == (dummy_pfnglfogcoorddvproc as *const c_void) {&null::<PFNGLFOGCOORDDVPROC>()} else {&self.fogcoorddv}})
4096			.field("fogcoordpointer", unsafe{if transmute::<_, *const c_void>(self.fogcoordpointer) == (dummy_pfnglfogcoordpointerproc as *const c_void) {&null::<PFNGLFOGCOORDPOINTERPROC>()} else {&self.fogcoordpointer}})
4097			.field("secondarycolor3b", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3b) == (dummy_pfnglsecondarycolor3bproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3BPROC>()} else {&self.secondarycolor3b}})
4098			.field("secondarycolor3bv", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3bv) == (dummy_pfnglsecondarycolor3bvproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3BVPROC>()} else {&self.secondarycolor3bv}})
4099			.field("secondarycolor3d", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3d) == (dummy_pfnglsecondarycolor3dproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3DPROC>()} else {&self.secondarycolor3d}})
4100			.field("secondarycolor3dv", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3dv) == (dummy_pfnglsecondarycolor3dvproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3DVPROC>()} else {&self.secondarycolor3dv}})
4101			.field("secondarycolor3f", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3f) == (dummy_pfnglsecondarycolor3fproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3FPROC>()} else {&self.secondarycolor3f}})
4102			.field("secondarycolor3fv", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3fv) == (dummy_pfnglsecondarycolor3fvproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3FVPROC>()} else {&self.secondarycolor3fv}})
4103			.field("secondarycolor3i", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3i) == (dummy_pfnglsecondarycolor3iproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3IPROC>()} else {&self.secondarycolor3i}})
4104			.field("secondarycolor3iv", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3iv) == (dummy_pfnglsecondarycolor3ivproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3IVPROC>()} else {&self.secondarycolor3iv}})
4105			.field("secondarycolor3s", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3s) == (dummy_pfnglsecondarycolor3sproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3SPROC>()} else {&self.secondarycolor3s}})
4106			.field("secondarycolor3sv", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3sv) == (dummy_pfnglsecondarycolor3svproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3SVPROC>()} else {&self.secondarycolor3sv}})
4107			.field("secondarycolor3ub", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3ub) == (dummy_pfnglsecondarycolor3ubproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3UBPROC>()} else {&self.secondarycolor3ub}})
4108			.field("secondarycolor3ubv", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3ubv) == (dummy_pfnglsecondarycolor3ubvproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3UBVPROC>()} else {&self.secondarycolor3ubv}})
4109			.field("secondarycolor3ui", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3ui) == (dummy_pfnglsecondarycolor3uiproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3UIPROC>()} else {&self.secondarycolor3ui}})
4110			.field("secondarycolor3uiv", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3uiv) == (dummy_pfnglsecondarycolor3uivproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3UIVPROC>()} else {&self.secondarycolor3uiv}})
4111			.field("secondarycolor3us", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3us) == (dummy_pfnglsecondarycolor3usproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3USPROC>()} else {&self.secondarycolor3us}})
4112			.field("secondarycolor3usv", unsafe{if transmute::<_, *const c_void>(self.secondarycolor3usv) == (dummy_pfnglsecondarycolor3usvproc as *const c_void) {&null::<PFNGLSECONDARYCOLOR3USVPROC>()} else {&self.secondarycolor3usv}})
4113			.field("secondarycolorpointer", unsafe{if transmute::<_, *const c_void>(self.secondarycolorpointer) == (dummy_pfnglsecondarycolorpointerproc as *const c_void) {&null::<PFNGLSECONDARYCOLORPOINTERPROC>()} else {&self.secondarycolorpointer}})
4114			.field("windowpos2d", unsafe{if transmute::<_, *const c_void>(self.windowpos2d) == (dummy_pfnglwindowpos2dproc as *const c_void) {&null::<PFNGLWINDOWPOS2DPROC>()} else {&self.windowpos2d}})
4115			.field("windowpos2dv", unsafe{if transmute::<_, *const c_void>(self.windowpos2dv) == (dummy_pfnglwindowpos2dvproc as *const c_void) {&null::<PFNGLWINDOWPOS2DVPROC>()} else {&self.windowpos2dv}})
4116			.field("windowpos2f", unsafe{if transmute::<_, *const c_void>(self.windowpos2f) == (dummy_pfnglwindowpos2fproc as *const c_void) {&null::<PFNGLWINDOWPOS2FPROC>()} else {&self.windowpos2f}})
4117			.field("windowpos2fv", unsafe{if transmute::<_, *const c_void>(self.windowpos2fv) == (dummy_pfnglwindowpos2fvproc as *const c_void) {&null::<PFNGLWINDOWPOS2FVPROC>()} else {&self.windowpos2fv}})
4118			.field("windowpos2i", unsafe{if transmute::<_, *const c_void>(self.windowpos2i) == (dummy_pfnglwindowpos2iproc as *const c_void) {&null::<PFNGLWINDOWPOS2IPROC>()} else {&self.windowpos2i}})
4119			.field("windowpos2iv", unsafe{if transmute::<_, *const c_void>(self.windowpos2iv) == (dummy_pfnglwindowpos2ivproc as *const c_void) {&null::<PFNGLWINDOWPOS2IVPROC>()} else {&self.windowpos2iv}})
4120			.field("windowpos2s", unsafe{if transmute::<_, *const c_void>(self.windowpos2s) == (dummy_pfnglwindowpos2sproc as *const c_void) {&null::<PFNGLWINDOWPOS2SPROC>()} else {&self.windowpos2s}})
4121			.field("windowpos2sv", unsafe{if transmute::<_, *const c_void>(self.windowpos2sv) == (dummy_pfnglwindowpos2svproc as *const c_void) {&null::<PFNGLWINDOWPOS2SVPROC>()} else {&self.windowpos2sv}})
4122			.field("windowpos3d", unsafe{if transmute::<_, *const c_void>(self.windowpos3d) == (dummy_pfnglwindowpos3dproc as *const c_void) {&null::<PFNGLWINDOWPOS3DPROC>()} else {&self.windowpos3d}})
4123			.field("windowpos3dv", unsafe{if transmute::<_, *const c_void>(self.windowpos3dv) == (dummy_pfnglwindowpos3dvproc as *const c_void) {&null::<PFNGLWINDOWPOS3DVPROC>()} else {&self.windowpos3dv}})
4124			.field("windowpos3f", unsafe{if transmute::<_, *const c_void>(self.windowpos3f) == (dummy_pfnglwindowpos3fproc as *const c_void) {&null::<PFNGLWINDOWPOS3FPROC>()} else {&self.windowpos3f}})
4125			.field("windowpos3fv", unsafe{if transmute::<_, *const c_void>(self.windowpos3fv) == (dummy_pfnglwindowpos3fvproc as *const c_void) {&null::<PFNGLWINDOWPOS3FVPROC>()} else {&self.windowpos3fv}})
4126			.field("windowpos3i", unsafe{if transmute::<_, *const c_void>(self.windowpos3i) == (dummy_pfnglwindowpos3iproc as *const c_void) {&null::<PFNGLWINDOWPOS3IPROC>()} else {&self.windowpos3i}})
4127			.field("windowpos3iv", unsafe{if transmute::<_, *const c_void>(self.windowpos3iv) == (dummy_pfnglwindowpos3ivproc as *const c_void) {&null::<PFNGLWINDOWPOS3IVPROC>()} else {&self.windowpos3iv}})
4128			.field("windowpos3s", unsafe{if transmute::<_, *const c_void>(self.windowpos3s) == (dummy_pfnglwindowpos3sproc as *const c_void) {&null::<PFNGLWINDOWPOS3SPROC>()} else {&self.windowpos3s}})
4129			.field("windowpos3sv", unsafe{if transmute::<_, *const c_void>(self.windowpos3sv) == (dummy_pfnglwindowpos3svproc as *const c_void) {&null::<PFNGLWINDOWPOS3SVPROC>()} else {&self.windowpos3sv}})
4130			.field("blendcolor", unsafe{if transmute::<_, *const c_void>(self.blendcolor) == (dummy_pfnglblendcolorproc as *const c_void) {&null::<PFNGLBLENDCOLORPROC>()} else {&self.blendcolor}})
4131			.field("blendequation", unsafe{if transmute::<_, *const c_void>(self.blendequation) == (dummy_pfnglblendequationproc as *const c_void) {&null::<PFNGLBLENDEQUATIONPROC>()} else {&self.blendequation}})
4132			.finish()
4133		} else {
4134			f.debug_struct("Version14")
4135			.field("available", &self.available)
4136			.finish_non_exhaustive()
4137		}
4138	}
4139}
4140pub type GLsizeiptr = khronos_ssize_t;
4141pub type GLintptr = khronos_intptr_t;
4142type PFNGLGENQUERIESPROC = extern "system" fn(GLsizei, *mut GLuint);
4143type PFNGLDELETEQUERIESPROC = extern "system" fn(GLsizei, *const GLuint);
4144type PFNGLISQUERYPROC = extern "system" fn(GLuint) -> GLboolean;
4145type PFNGLBEGINQUERYPROC = extern "system" fn(GLenum, GLuint);
4146type PFNGLENDQUERYPROC = extern "system" fn(GLenum);
4147type PFNGLGETQUERYIVPROC = extern "system" fn(GLenum, GLenum, *mut GLint);
4148type PFNGLGETQUERYOBJECTIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
4149type PFNGLGETQUERYOBJECTUIVPROC = extern "system" fn(GLuint, GLenum, *mut GLuint);
4150type PFNGLBINDBUFFERPROC = extern "system" fn(GLenum, GLuint);
4151type PFNGLDELETEBUFFERSPROC = extern "system" fn(GLsizei, *const GLuint);
4152type PFNGLGENBUFFERSPROC = extern "system" fn(GLsizei, *mut GLuint);
4153type PFNGLISBUFFERPROC = extern "system" fn(GLuint) -> GLboolean;
4154type PFNGLBUFFERDATAPROC = extern "system" fn(GLenum, GLsizeiptr, *const c_void, GLenum);
4155type PFNGLBUFFERSUBDATAPROC = extern "system" fn(GLenum, GLintptr, GLsizeiptr, *const c_void);
4156type PFNGLGETBUFFERSUBDATAPROC = extern "system" fn(GLenum, GLintptr, GLsizeiptr, *mut c_void);
4157type PFNGLMAPBUFFERPROC = extern "system" fn(GLenum, GLenum) -> *mut c_void;
4158type PFNGLUNMAPBUFFERPROC = extern "system" fn(GLenum) -> GLboolean;
4159type PFNGLGETBUFFERPARAMETERIVPROC = extern "system" fn(GLenum, GLenum, *mut GLint);
4160type PFNGLGETBUFFERPOINTERVPROC = extern "system" fn(GLenum, GLenum, *mut *mut c_void);
4161extern "system" fn dummy_pfnglgenqueriesproc (_: GLsizei, _: *mut GLuint) {
4162	panic!("OpenGL function pointer `glGenQueries()` is null.")
4163}
4164extern "system" fn dummy_pfngldeletequeriesproc (_: GLsizei, _: *const GLuint) {
4165	panic!("OpenGL function pointer `glDeleteQueries()` is null.")
4166}
4167extern "system" fn dummy_pfnglisqueryproc (_: GLuint) -> GLboolean {
4168	panic!("OpenGL function pointer `glIsQuery()` is null.")
4169}
4170extern "system" fn dummy_pfnglbeginqueryproc (_: GLenum, _: GLuint) {
4171	panic!("OpenGL function pointer `glBeginQuery()` is null.")
4172}
4173extern "system" fn dummy_pfnglendqueryproc (_: GLenum) {
4174	panic!("OpenGL function pointer `glEndQuery()` is null.")
4175}
4176extern "system" fn dummy_pfnglgetqueryivproc (_: GLenum, _: GLenum, _: *mut GLint) {
4177	panic!("OpenGL function pointer `glGetQueryiv()` is null.")
4178}
4179extern "system" fn dummy_pfnglgetqueryobjectivproc (_: GLuint, _: GLenum, _: *mut GLint) {
4180	panic!("OpenGL function pointer `glGetQueryObjectiv()` is null.")
4181}
4182extern "system" fn dummy_pfnglgetqueryobjectuivproc (_: GLuint, _: GLenum, _: *mut GLuint) {
4183	panic!("OpenGL function pointer `glGetQueryObjectuiv()` is null.")
4184}
4185extern "system" fn dummy_pfnglbindbufferproc (_: GLenum, _: GLuint) {
4186	panic!("OpenGL function pointer `glBindBuffer()` is null.")
4187}
4188extern "system" fn dummy_pfngldeletebuffersproc (_: GLsizei, _: *const GLuint) {
4189	panic!("OpenGL function pointer `glDeleteBuffers()` is null.")
4190}
4191extern "system" fn dummy_pfnglgenbuffersproc (_: GLsizei, _: *mut GLuint) {
4192	panic!("OpenGL function pointer `glGenBuffers()` is null.")
4193}
4194extern "system" fn dummy_pfnglisbufferproc (_: GLuint) -> GLboolean {
4195	panic!("OpenGL function pointer `glIsBuffer()` is null.")
4196}
4197extern "system" fn dummy_pfnglbufferdataproc (_: GLenum, _: GLsizeiptr, _: *const c_void, _: GLenum) {
4198	panic!("OpenGL function pointer `glBufferData()` is null.")
4199}
4200extern "system" fn dummy_pfnglbuffersubdataproc (_: GLenum, _: GLintptr, _: GLsizeiptr, _: *const c_void) {
4201	panic!("OpenGL function pointer `glBufferSubData()` is null.")
4202}
4203extern "system" fn dummy_pfnglgetbuffersubdataproc (_: GLenum, _: GLintptr, _: GLsizeiptr, _: *mut c_void) {
4204	panic!("OpenGL function pointer `glGetBufferSubData()` is null.")
4205}
4206extern "system" fn dummy_pfnglmapbufferproc (_: GLenum, _: GLenum) -> *mut c_void {
4207	panic!("OpenGL function pointer `glMapBuffer()` is null.")
4208}
4209extern "system" fn dummy_pfnglunmapbufferproc (_: GLenum) -> GLboolean {
4210	panic!("OpenGL function pointer `glUnmapBuffer()` is null.")
4211}
4212extern "system" fn dummy_pfnglgetbufferparameterivproc (_: GLenum, _: GLenum, _: *mut GLint) {
4213	panic!("OpenGL function pointer `glGetBufferParameteriv()` is null.")
4214}
4215extern "system" fn dummy_pfnglgetbufferpointervproc (_: GLenum, _: GLenum, _: *mut *mut c_void) {
4216	panic!("OpenGL function pointer `glGetBufferPointerv()` is null.")
4217}
4218pub const GL_BUFFER_SIZE: GLenum = 0x8764;
4219pub const GL_BUFFER_USAGE: GLenum = 0x8765;
4220pub const GL_QUERY_COUNTER_BITS: GLenum = 0x8864;
4221pub const GL_CURRENT_QUERY: GLenum = 0x8865;
4222pub const GL_QUERY_RESULT: GLenum = 0x8866;
4223pub const GL_QUERY_RESULT_AVAILABLE: GLenum = 0x8867;
4224pub const GL_ARRAY_BUFFER: GLenum = 0x8892;
4225pub const GL_ELEMENT_ARRAY_BUFFER: GLenum = 0x8893;
4226pub const GL_ARRAY_BUFFER_BINDING: GLenum = 0x8894;
4227pub const GL_ELEMENT_ARRAY_BUFFER_BINDING: GLenum = 0x8895;
4228pub const GL_VERTEX_ATTRIB_ARRAY_BUFFER_BINDING: GLenum = 0x889F;
4229pub const GL_READ_ONLY: GLenum = 0x88B8;
4230pub const GL_WRITE_ONLY: GLenum = 0x88B9;
4231pub const GL_READ_WRITE: GLenum = 0x88BA;
4232pub const GL_BUFFER_ACCESS: GLenum = 0x88BB;
4233pub const GL_BUFFER_MAPPED: GLenum = 0x88BC;
4234pub const GL_BUFFER_MAP_POINTER: GLenum = 0x88BD;
4235pub const GL_STREAM_DRAW: GLenum = 0x88E0;
4236pub const GL_STREAM_READ: GLenum = 0x88E1;
4237pub const GL_STREAM_COPY: GLenum = 0x88E2;
4238pub const GL_STATIC_DRAW: GLenum = 0x88E4;
4239pub const GL_STATIC_READ: GLenum = 0x88E5;
4240pub const GL_STATIC_COPY: GLenum = 0x88E6;
4241pub const GL_DYNAMIC_DRAW: GLenum = 0x88E8;
4242pub const GL_DYNAMIC_READ: GLenum = 0x88E9;
4243pub const GL_DYNAMIC_COPY: GLenum = 0x88EA;
4244pub const GL_SAMPLES_PASSED: GLenum = 0x8914;
4245pub const GL_SRC1_ALPHA: GLenum = 0x8589;
4246pub const GL_VERTEX_ARRAY_BUFFER_BINDING: GLenum = 0x8896;
4247pub const GL_NORMAL_ARRAY_BUFFER_BINDING: GLenum = 0x8897;
4248pub const GL_COLOR_ARRAY_BUFFER_BINDING: GLenum = 0x8898;
4249pub const GL_INDEX_ARRAY_BUFFER_BINDING: GLenum = 0x8899;
4250pub const GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING: GLenum = 0x889A;
4251pub const GL_EDGE_FLAG_ARRAY_BUFFER_BINDING: GLenum = 0x889B;
4252pub const GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING: GLenum = 0x889C;
4253pub const GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING: GLenum = 0x889D;
4254pub const GL_WEIGHT_ARRAY_BUFFER_BINDING: GLenum = 0x889E;
4255pub const GL_FOG_COORD_SRC: GLenum = 0x8450;
4256pub const GL_FOG_COORD: GLenum = 0x8451;
4257pub const GL_CURRENT_FOG_COORD: GLenum = 0x8453;
4258pub const GL_FOG_COORD_ARRAY_TYPE: GLenum = 0x8454;
4259pub const GL_FOG_COORD_ARRAY_STRIDE: GLenum = 0x8455;
4260pub const GL_FOG_COORD_ARRAY_POINTER: GLenum = 0x8456;
4261pub const GL_FOG_COORD_ARRAY: GLenum = 0x8457;
4262pub const GL_FOG_COORD_ARRAY_BUFFER_BINDING: GLenum = 0x889D;
4263pub const GL_SRC0_RGB: GLenum = 0x8580;
4264pub const GL_SRC1_RGB: GLenum = 0x8581;
4265pub const GL_SRC2_RGB: GLenum = 0x8582;
4266pub const GL_SRC0_ALPHA: GLenum = 0x8588;
4267pub const GL_SRC2_ALPHA: GLenum = 0x858A;
4268
4269pub trait GL_1_5 {
4270	fn glGetError(&self) -> GLenum;
4271	fn glGenQueries(&self, n: GLsizei, ids: *mut GLuint) -> Result<()>;
4272	fn glDeleteQueries(&self, n: GLsizei, ids: *const GLuint) -> Result<()>;
4273	fn glIsQuery(&self, id: GLuint) -> Result<GLboolean>;
4274	fn glBeginQuery(&self, target: GLenum, id: GLuint) -> Result<()>;
4275	fn glEndQuery(&self, target: GLenum) -> Result<()>;
4276	fn glGetQueryiv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
4277	fn glGetQueryObjectiv(&self, id: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
4278	fn glGetQueryObjectuiv(&self, id: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()>;
4279	fn glBindBuffer(&self, target: GLenum, buffer: GLuint) -> Result<()>;
4280	fn glDeleteBuffers(&self, n: GLsizei, buffers: *const GLuint) -> Result<()>;
4281	fn glGenBuffers(&self, n: GLsizei, buffers: *mut GLuint) -> Result<()>;
4282	fn glIsBuffer(&self, buffer: GLuint) -> Result<GLboolean>;
4283	fn glBufferData(&self, target: GLenum, size: GLsizeiptr, data: *const c_void, usage: GLenum) -> Result<()>;
4284	fn glBufferSubData(&self, target: GLenum, offset: GLintptr, size: GLsizeiptr, data: *const c_void) -> Result<()>;
4285	fn glGetBufferSubData(&self, target: GLenum, offset: GLintptr, size: GLsizeiptr, data: *mut c_void) -> Result<()>;
4286	fn glMapBuffer(&self, target: GLenum, access: GLenum) -> Result<*mut c_void>;
4287	fn glUnmapBuffer(&self, target: GLenum) -> Result<GLboolean>;
4288	fn glGetBufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
4289	fn glGetBufferPointerv(&self, target: GLenum, pname: GLenum, params: *mut *mut c_void) -> Result<()>;
4290}
4291
4292#[derive(Clone, Copy, PartialEq, Eq, Hash)]
4293pub struct Version15 {
4294	available: bool,
4295	geterror: PFNGLGETERRORPROC,
4296	genqueries: PFNGLGENQUERIESPROC,
4297	deletequeries: PFNGLDELETEQUERIESPROC,
4298	isquery: PFNGLISQUERYPROC,
4299	beginquery: PFNGLBEGINQUERYPROC,
4300	endquery: PFNGLENDQUERYPROC,
4301	getqueryiv: PFNGLGETQUERYIVPROC,
4302	getqueryobjectiv: PFNGLGETQUERYOBJECTIVPROC,
4303	getqueryobjectuiv: PFNGLGETQUERYOBJECTUIVPROC,
4304	bindbuffer: PFNGLBINDBUFFERPROC,
4305	deletebuffers: PFNGLDELETEBUFFERSPROC,
4306	genbuffers: PFNGLGENBUFFERSPROC,
4307	isbuffer: PFNGLISBUFFERPROC,
4308	bufferdata: PFNGLBUFFERDATAPROC,
4309	buffersubdata: PFNGLBUFFERSUBDATAPROC,
4310	getbuffersubdata: PFNGLGETBUFFERSUBDATAPROC,
4311	mapbuffer: PFNGLMAPBUFFERPROC,
4312	unmapbuffer: PFNGLUNMAPBUFFERPROC,
4313	getbufferparameteriv: PFNGLGETBUFFERPARAMETERIVPROC,
4314	getbufferpointerv: PFNGLGETBUFFERPOINTERVPROC,
4315}
4316
4317impl GL_1_5 for Version15 {
4318	#[inline(always)]
4319	fn glGetError(&self) -> GLenum {
4320		(self.geterror)()
4321	}
4322	#[inline(always)]
4323	fn glGenQueries(&self, n: GLsizei, ids: *mut GLuint) -> Result<()> {
4324		let ret = process_catch("glGenQueries", catch_unwind(||(self.genqueries)(n, ids)));
4325		#[cfg(feature = "diagnose")]
4326		if let Ok(ret) = ret {
4327			return to_result("glGenQueries", ret, self.glGetError());
4328		} else {
4329			return ret
4330		}
4331		#[cfg(not(feature = "diagnose"))]
4332		return ret;
4333	}
4334	#[inline(always)]
4335	fn glDeleteQueries(&self, n: GLsizei, ids: *const GLuint) -> Result<()> {
4336		let ret = process_catch("glDeleteQueries", catch_unwind(||(self.deletequeries)(n, ids)));
4337		#[cfg(feature = "diagnose")]
4338		if let Ok(ret) = ret {
4339			return to_result("glDeleteQueries", ret, self.glGetError());
4340		} else {
4341			return ret
4342		}
4343		#[cfg(not(feature = "diagnose"))]
4344		return ret;
4345	}
4346	#[inline(always)]
4347	fn glIsQuery(&self, id: GLuint) -> Result<GLboolean> {
4348		let ret = process_catch("glIsQuery", catch_unwind(||(self.isquery)(id)));
4349		#[cfg(feature = "diagnose")]
4350		if let Ok(ret) = ret {
4351			return to_result("glIsQuery", ret, self.glGetError());
4352		} else {
4353			return ret
4354		}
4355		#[cfg(not(feature = "diagnose"))]
4356		return ret;
4357	}
4358	#[inline(always)]
4359	fn glBeginQuery(&self, target: GLenum, id: GLuint) -> Result<()> {
4360		let ret = process_catch("glBeginQuery", catch_unwind(||(self.beginquery)(target, id)));
4361		#[cfg(feature = "diagnose")]
4362		if let Ok(ret) = ret {
4363			return to_result("glBeginQuery", ret, self.glGetError());
4364		} else {
4365			return ret
4366		}
4367		#[cfg(not(feature = "diagnose"))]
4368		return ret;
4369	}
4370	#[inline(always)]
4371	fn glEndQuery(&self, target: GLenum) -> Result<()> {
4372		let ret = process_catch("glEndQuery", catch_unwind(||(self.endquery)(target)));
4373		#[cfg(feature = "diagnose")]
4374		if let Ok(ret) = ret {
4375			return to_result("glEndQuery", ret, self.glGetError());
4376		} else {
4377			return ret
4378		}
4379		#[cfg(not(feature = "diagnose"))]
4380		return ret;
4381	}
4382	#[inline(always)]
4383	fn glGetQueryiv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
4384		let ret = process_catch("glGetQueryiv", catch_unwind(||(self.getqueryiv)(target, pname, params)));
4385		#[cfg(feature = "diagnose")]
4386		if let Ok(ret) = ret {
4387			return to_result("glGetQueryiv", ret, self.glGetError());
4388		} else {
4389			return ret
4390		}
4391		#[cfg(not(feature = "diagnose"))]
4392		return ret;
4393	}
4394	#[inline(always)]
4395	fn glGetQueryObjectiv(&self, id: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
4396		let ret = process_catch("glGetQueryObjectiv", catch_unwind(||(self.getqueryobjectiv)(id, pname, params)));
4397		#[cfg(feature = "diagnose")]
4398		if let Ok(ret) = ret {
4399			return to_result("glGetQueryObjectiv", ret, self.glGetError());
4400		} else {
4401			return ret
4402		}
4403		#[cfg(not(feature = "diagnose"))]
4404		return ret;
4405	}
4406	#[inline(always)]
4407	fn glGetQueryObjectuiv(&self, id: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()> {
4408		let ret = process_catch("glGetQueryObjectuiv", catch_unwind(||(self.getqueryobjectuiv)(id, pname, params)));
4409		#[cfg(feature = "diagnose")]
4410		if let Ok(ret) = ret {
4411			return to_result("glGetQueryObjectuiv", ret, self.glGetError());
4412		} else {
4413			return ret
4414		}
4415		#[cfg(not(feature = "diagnose"))]
4416		return ret;
4417	}
4418	#[inline(always)]
4419	fn glBindBuffer(&self, target: GLenum, buffer: GLuint) -> Result<()> {
4420		let ret = process_catch("glBindBuffer", catch_unwind(||(self.bindbuffer)(target, buffer)));
4421		#[cfg(feature = "diagnose")]
4422		if let Ok(ret) = ret {
4423			return to_result("glBindBuffer", ret, self.glGetError());
4424		} else {
4425			return ret
4426		}
4427		#[cfg(not(feature = "diagnose"))]
4428		return ret;
4429	}
4430	#[inline(always)]
4431	fn glDeleteBuffers(&self, n: GLsizei, buffers: *const GLuint) -> Result<()> {
4432		let ret = process_catch("glDeleteBuffers", catch_unwind(||(self.deletebuffers)(n, buffers)));
4433		#[cfg(feature = "diagnose")]
4434		if let Ok(ret) = ret {
4435			return to_result("glDeleteBuffers", ret, self.glGetError());
4436		} else {
4437			return ret
4438		}
4439		#[cfg(not(feature = "diagnose"))]
4440		return ret;
4441	}
4442	#[inline(always)]
4443	fn glGenBuffers(&self, n: GLsizei, buffers: *mut GLuint) -> Result<()> {
4444		let ret = process_catch("glGenBuffers", catch_unwind(||(self.genbuffers)(n, buffers)));
4445		#[cfg(feature = "diagnose")]
4446		if let Ok(ret) = ret {
4447			return to_result("glGenBuffers", ret, self.glGetError());
4448		} else {
4449			return ret
4450		}
4451		#[cfg(not(feature = "diagnose"))]
4452		return ret;
4453	}
4454	#[inline(always)]
4455	fn glIsBuffer(&self, buffer: GLuint) -> Result<GLboolean> {
4456		let ret = process_catch("glIsBuffer", catch_unwind(||(self.isbuffer)(buffer)));
4457		#[cfg(feature = "diagnose")]
4458		if let Ok(ret) = ret {
4459			return to_result("glIsBuffer", ret, self.glGetError());
4460		} else {
4461			return ret
4462		}
4463		#[cfg(not(feature = "diagnose"))]
4464		return ret;
4465	}
4466	#[inline(always)]
4467	fn glBufferData(&self, target: GLenum, size: GLsizeiptr, data: *const c_void, usage: GLenum) -> Result<()> {
4468		let ret = process_catch("glBufferData", catch_unwind(||(self.bufferdata)(target, size, data, usage)));
4469		#[cfg(feature = "diagnose")]
4470		if let Ok(ret) = ret {
4471			return to_result("glBufferData", ret, self.glGetError());
4472		} else {
4473			return ret
4474		}
4475		#[cfg(not(feature = "diagnose"))]
4476		return ret;
4477	}
4478	#[inline(always)]
4479	fn glBufferSubData(&self, target: GLenum, offset: GLintptr, size: GLsizeiptr, data: *const c_void) -> Result<()> {
4480		let ret = process_catch("glBufferSubData", catch_unwind(||(self.buffersubdata)(target, offset, size, data)));
4481		#[cfg(feature = "diagnose")]
4482		if let Ok(ret) = ret {
4483			return to_result("glBufferSubData", ret, self.glGetError());
4484		} else {
4485			return ret
4486		}
4487		#[cfg(not(feature = "diagnose"))]
4488		return ret;
4489	}
4490	#[inline(always)]
4491	fn glGetBufferSubData(&self, target: GLenum, offset: GLintptr, size: GLsizeiptr, data: *mut c_void) -> Result<()> {
4492		let ret = process_catch("glGetBufferSubData", catch_unwind(||(self.getbuffersubdata)(target, offset, size, data)));
4493		#[cfg(feature = "diagnose")]
4494		if let Ok(ret) = ret {
4495			return to_result("glGetBufferSubData", ret, self.glGetError());
4496		} else {
4497			return ret
4498		}
4499		#[cfg(not(feature = "diagnose"))]
4500		return ret;
4501	}
4502	#[inline(always)]
4503	fn glMapBuffer(&self, target: GLenum, access: GLenum) -> Result<*mut c_void> {
4504		let ret = process_catch("glMapBuffer", catch_unwind(||(self.mapbuffer)(target, access)));
4505		#[cfg(feature = "diagnose")]
4506		if let Ok(ret) = ret {
4507			return to_result("glMapBuffer", ret, self.glGetError());
4508		} else {
4509			return ret
4510		}
4511		#[cfg(not(feature = "diagnose"))]
4512		return ret;
4513	}
4514	#[inline(always)]
4515	fn glUnmapBuffer(&self, target: GLenum) -> Result<GLboolean> {
4516		let ret = process_catch("glUnmapBuffer", catch_unwind(||(self.unmapbuffer)(target)));
4517		#[cfg(feature = "diagnose")]
4518		if let Ok(ret) = ret {
4519			return to_result("glUnmapBuffer", ret, self.glGetError());
4520		} else {
4521			return ret
4522		}
4523		#[cfg(not(feature = "diagnose"))]
4524		return ret;
4525	}
4526	#[inline(always)]
4527	fn glGetBufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
4528		let ret = process_catch("glGetBufferParameteriv", catch_unwind(||(self.getbufferparameteriv)(target, pname, params)));
4529		#[cfg(feature = "diagnose")]
4530		if let Ok(ret) = ret {
4531			return to_result("glGetBufferParameteriv", ret, self.glGetError());
4532		} else {
4533			return ret
4534		}
4535		#[cfg(not(feature = "diagnose"))]
4536		return ret;
4537	}
4538	#[inline(always)]
4539	fn glGetBufferPointerv(&self, target: GLenum, pname: GLenum, params: *mut *mut c_void) -> Result<()> {
4540		let ret = process_catch("glGetBufferPointerv", catch_unwind(||(self.getbufferpointerv)(target, pname, params)));
4541		#[cfg(feature = "diagnose")]
4542		if let Ok(ret) = ret {
4543			return to_result("glGetBufferPointerv", ret, self.glGetError());
4544		} else {
4545			return ret
4546		}
4547		#[cfg(not(feature = "diagnose"))]
4548		return ret;
4549	}
4550}
4551
4552impl Version15 {
4553	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
4554		let (_spec, major, minor, release) = base.get_version();
4555		if (major, minor, release) < (1, 5, 0) {
4556			return Self::default();
4557		}
4558		Self {
4559			available: true,
4560			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
4561			genqueries: {let proc = get_proc_address("glGenQueries"); if proc == null() {dummy_pfnglgenqueriesproc} else {unsafe{transmute(proc)}}},
4562			deletequeries: {let proc = get_proc_address("glDeleteQueries"); if proc == null() {dummy_pfngldeletequeriesproc} else {unsafe{transmute(proc)}}},
4563			isquery: {let proc = get_proc_address("glIsQuery"); if proc == null() {dummy_pfnglisqueryproc} else {unsafe{transmute(proc)}}},
4564			beginquery: {let proc = get_proc_address("glBeginQuery"); if proc == null() {dummy_pfnglbeginqueryproc} else {unsafe{transmute(proc)}}},
4565			endquery: {let proc = get_proc_address("glEndQuery"); if proc == null() {dummy_pfnglendqueryproc} else {unsafe{transmute(proc)}}},
4566			getqueryiv: {let proc = get_proc_address("glGetQueryiv"); if proc == null() {dummy_pfnglgetqueryivproc} else {unsafe{transmute(proc)}}},
4567			getqueryobjectiv: {let proc = get_proc_address("glGetQueryObjectiv"); if proc == null() {dummy_pfnglgetqueryobjectivproc} else {unsafe{transmute(proc)}}},
4568			getqueryobjectuiv: {let proc = get_proc_address("glGetQueryObjectuiv"); if proc == null() {dummy_pfnglgetqueryobjectuivproc} else {unsafe{transmute(proc)}}},
4569			bindbuffer: {let proc = get_proc_address("glBindBuffer"); if proc == null() {dummy_pfnglbindbufferproc} else {unsafe{transmute(proc)}}},
4570			deletebuffers: {let proc = get_proc_address("glDeleteBuffers"); if proc == null() {dummy_pfngldeletebuffersproc} else {unsafe{transmute(proc)}}},
4571			genbuffers: {let proc = get_proc_address("glGenBuffers"); if proc == null() {dummy_pfnglgenbuffersproc} else {unsafe{transmute(proc)}}},
4572			isbuffer: {let proc = get_proc_address("glIsBuffer"); if proc == null() {dummy_pfnglisbufferproc} else {unsafe{transmute(proc)}}},
4573			bufferdata: {let proc = get_proc_address("glBufferData"); if proc == null() {dummy_pfnglbufferdataproc} else {unsafe{transmute(proc)}}},
4574			buffersubdata: {let proc = get_proc_address("glBufferSubData"); if proc == null() {dummy_pfnglbuffersubdataproc} else {unsafe{transmute(proc)}}},
4575			getbuffersubdata: {let proc = get_proc_address("glGetBufferSubData"); if proc == null() {dummy_pfnglgetbuffersubdataproc} else {unsafe{transmute(proc)}}},
4576			mapbuffer: {let proc = get_proc_address("glMapBuffer"); if proc == null() {dummy_pfnglmapbufferproc} else {unsafe{transmute(proc)}}},
4577			unmapbuffer: {let proc = get_proc_address("glUnmapBuffer"); if proc == null() {dummy_pfnglunmapbufferproc} else {unsafe{transmute(proc)}}},
4578			getbufferparameteriv: {let proc = get_proc_address("glGetBufferParameteriv"); if proc == null() {dummy_pfnglgetbufferparameterivproc} else {unsafe{transmute(proc)}}},
4579			getbufferpointerv: {let proc = get_proc_address("glGetBufferPointerv"); if proc == null() {dummy_pfnglgetbufferpointervproc} else {unsafe{transmute(proc)}}},
4580		}
4581	}
4582	#[inline(always)]
4583	pub fn get_available(&self) -> bool {
4584		self.available
4585	}
4586}
4587
4588impl Default for Version15 {
4589	fn default() -> Self {
4590		Self {
4591			available: false,
4592			geterror: dummy_pfnglgeterrorproc,
4593			genqueries: dummy_pfnglgenqueriesproc,
4594			deletequeries: dummy_pfngldeletequeriesproc,
4595			isquery: dummy_pfnglisqueryproc,
4596			beginquery: dummy_pfnglbeginqueryproc,
4597			endquery: dummy_pfnglendqueryproc,
4598			getqueryiv: dummy_pfnglgetqueryivproc,
4599			getqueryobjectiv: dummy_pfnglgetqueryobjectivproc,
4600			getqueryobjectuiv: dummy_pfnglgetqueryobjectuivproc,
4601			bindbuffer: dummy_pfnglbindbufferproc,
4602			deletebuffers: dummy_pfngldeletebuffersproc,
4603			genbuffers: dummy_pfnglgenbuffersproc,
4604			isbuffer: dummy_pfnglisbufferproc,
4605			bufferdata: dummy_pfnglbufferdataproc,
4606			buffersubdata: dummy_pfnglbuffersubdataproc,
4607			getbuffersubdata: dummy_pfnglgetbuffersubdataproc,
4608			mapbuffer: dummy_pfnglmapbufferproc,
4609			unmapbuffer: dummy_pfnglunmapbufferproc,
4610			getbufferparameteriv: dummy_pfnglgetbufferparameterivproc,
4611			getbufferpointerv: dummy_pfnglgetbufferpointervproc,
4612		}
4613	}
4614}
4615impl Debug for Version15 {
4616	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
4617		if self.available {
4618			f.debug_struct("Version15")
4619			.field("available", &self.available)
4620			.field("genqueries", unsafe{if transmute::<_, *const c_void>(self.genqueries) == (dummy_pfnglgenqueriesproc as *const c_void) {&null::<PFNGLGENQUERIESPROC>()} else {&self.genqueries}})
4621			.field("deletequeries", unsafe{if transmute::<_, *const c_void>(self.deletequeries) == (dummy_pfngldeletequeriesproc as *const c_void) {&null::<PFNGLDELETEQUERIESPROC>()} else {&self.deletequeries}})
4622			.field("isquery", unsafe{if transmute::<_, *const c_void>(self.isquery) == (dummy_pfnglisqueryproc as *const c_void) {&null::<PFNGLISQUERYPROC>()} else {&self.isquery}})
4623			.field("beginquery", unsafe{if transmute::<_, *const c_void>(self.beginquery) == (dummy_pfnglbeginqueryproc as *const c_void) {&null::<PFNGLBEGINQUERYPROC>()} else {&self.beginquery}})
4624			.field("endquery", unsafe{if transmute::<_, *const c_void>(self.endquery) == (dummy_pfnglendqueryproc as *const c_void) {&null::<PFNGLENDQUERYPROC>()} else {&self.endquery}})
4625			.field("getqueryiv", unsafe{if transmute::<_, *const c_void>(self.getqueryiv) == (dummy_pfnglgetqueryivproc as *const c_void) {&null::<PFNGLGETQUERYIVPROC>()} else {&self.getqueryiv}})
4626			.field("getqueryobjectiv", unsafe{if transmute::<_, *const c_void>(self.getqueryobjectiv) == (dummy_pfnglgetqueryobjectivproc as *const c_void) {&null::<PFNGLGETQUERYOBJECTIVPROC>()} else {&self.getqueryobjectiv}})
4627			.field("getqueryobjectuiv", unsafe{if transmute::<_, *const c_void>(self.getqueryobjectuiv) == (dummy_pfnglgetqueryobjectuivproc as *const c_void) {&null::<PFNGLGETQUERYOBJECTUIVPROC>()} else {&self.getqueryobjectuiv}})
4628			.field("bindbuffer", unsafe{if transmute::<_, *const c_void>(self.bindbuffer) == (dummy_pfnglbindbufferproc as *const c_void) {&null::<PFNGLBINDBUFFERPROC>()} else {&self.bindbuffer}})
4629			.field("deletebuffers", unsafe{if transmute::<_, *const c_void>(self.deletebuffers) == (dummy_pfngldeletebuffersproc as *const c_void) {&null::<PFNGLDELETEBUFFERSPROC>()} else {&self.deletebuffers}})
4630			.field("genbuffers", unsafe{if transmute::<_, *const c_void>(self.genbuffers) == (dummy_pfnglgenbuffersproc as *const c_void) {&null::<PFNGLGENBUFFERSPROC>()} else {&self.genbuffers}})
4631			.field("isbuffer", unsafe{if transmute::<_, *const c_void>(self.isbuffer) == (dummy_pfnglisbufferproc as *const c_void) {&null::<PFNGLISBUFFERPROC>()} else {&self.isbuffer}})
4632			.field("bufferdata", unsafe{if transmute::<_, *const c_void>(self.bufferdata) == (dummy_pfnglbufferdataproc as *const c_void) {&null::<PFNGLBUFFERDATAPROC>()} else {&self.bufferdata}})
4633			.field("buffersubdata", unsafe{if transmute::<_, *const c_void>(self.buffersubdata) == (dummy_pfnglbuffersubdataproc as *const c_void) {&null::<PFNGLBUFFERSUBDATAPROC>()} else {&self.buffersubdata}})
4634			.field("getbuffersubdata", unsafe{if transmute::<_, *const c_void>(self.getbuffersubdata) == (dummy_pfnglgetbuffersubdataproc as *const c_void) {&null::<PFNGLGETBUFFERSUBDATAPROC>()} else {&self.getbuffersubdata}})
4635			.field("mapbuffer", unsafe{if transmute::<_, *const c_void>(self.mapbuffer) == (dummy_pfnglmapbufferproc as *const c_void) {&null::<PFNGLMAPBUFFERPROC>()} else {&self.mapbuffer}})
4636			.field("unmapbuffer", unsafe{if transmute::<_, *const c_void>(self.unmapbuffer) == (dummy_pfnglunmapbufferproc as *const c_void) {&null::<PFNGLUNMAPBUFFERPROC>()} else {&self.unmapbuffer}})
4637			.field("getbufferparameteriv", unsafe{if transmute::<_, *const c_void>(self.getbufferparameteriv) == (dummy_pfnglgetbufferparameterivproc as *const c_void) {&null::<PFNGLGETBUFFERPARAMETERIVPROC>()} else {&self.getbufferparameteriv}})
4638			.field("getbufferpointerv", unsafe{if transmute::<_, *const c_void>(self.getbufferpointerv) == (dummy_pfnglgetbufferpointervproc as *const c_void) {&null::<PFNGLGETBUFFERPOINTERVPROC>()} else {&self.getbufferpointerv}})
4639			.finish()
4640		} else {
4641			f.debug_struct("Version15")
4642			.field("available", &self.available)
4643			.finish_non_exhaustive()
4644		}
4645	}
4646}
4647pub type GLchar = i8;
4648type PFNGLBLENDEQUATIONSEPARATEPROC = extern "system" fn(GLenum, GLenum);
4649type PFNGLDRAWBUFFERSPROC = extern "system" fn(GLsizei, *const GLenum);
4650type PFNGLSTENCILOPSEPARATEPROC = extern "system" fn(GLenum, GLenum, GLenum, GLenum);
4651type PFNGLSTENCILFUNCSEPARATEPROC = extern "system" fn(GLenum, GLenum, GLint, GLuint);
4652type PFNGLSTENCILMASKSEPARATEPROC = extern "system" fn(GLenum, GLuint);
4653type PFNGLATTACHSHADERPROC = extern "system" fn(GLuint, GLuint);
4654type PFNGLBINDATTRIBLOCATIONPROC = extern "system" fn(GLuint, GLuint, *const GLchar);
4655type PFNGLCOMPILESHADERPROC = extern "system" fn(GLuint);
4656type PFNGLCREATEPROGRAMPROC = extern "system" fn() -> GLuint;
4657type PFNGLCREATESHADERPROC = extern "system" fn(GLenum) -> GLuint;
4658type PFNGLDELETEPROGRAMPROC = extern "system" fn(GLuint);
4659type PFNGLDELETESHADERPROC = extern "system" fn(GLuint);
4660type PFNGLDETACHSHADERPROC = extern "system" fn(GLuint, GLuint);
4661type PFNGLDISABLEVERTEXATTRIBARRAYPROC = extern "system" fn(GLuint);
4662type PFNGLENABLEVERTEXATTRIBARRAYPROC = extern "system" fn(GLuint);
4663type PFNGLGETACTIVEATTRIBPROC = extern "system" fn(GLuint, GLuint, GLsizei, *mut GLsizei, *mut GLint, *mut GLenum, *mut GLchar);
4664type PFNGLGETACTIVEUNIFORMPROC = extern "system" fn(GLuint, GLuint, GLsizei, *mut GLsizei, *mut GLint, *mut GLenum, *mut GLchar);
4665type PFNGLGETATTACHEDSHADERSPROC = extern "system" fn(GLuint, GLsizei, *mut GLsizei, *mut GLuint);
4666type PFNGLGETATTRIBLOCATIONPROC = extern "system" fn(GLuint, *const GLchar) -> GLint;
4667type PFNGLGETPROGRAMIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
4668type PFNGLGETPROGRAMINFOLOGPROC = extern "system" fn(GLuint, GLsizei, *mut GLsizei, *mut GLchar);
4669type PFNGLGETSHADERIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
4670type PFNGLGETSHADERINFOLOGPROC = extern "system" fn(GLuint, GLsizei, *mut GLsizei, *mut GLchar);
4671type PFNGLGETSHADERSOURCEPROC = extern "system" fn(GLuint, GLsizei, *mut GLsizei, *mut GLchar);
4672type PFNGLGETUNIFORMLOCATIONPROC = extern "system" fn(GLuint, *const GLchar) -> GLint;
4673type PFNGLGETUNIFORMFVPROC = extern "system" fn(GLuint, GLint, *mut GLfloat);
4674type PFNGLGETUNIFORMIVPROC = extern "system" fn(GLuint, GLint, *mut GLint);
4675type PFNGLGETVERTEXATTRIBDVPROC = extern "system" fn(GLuint, GLenum, *mut GLdouble);
4676type PFNGLGETVERTEXATTRIBFVPROC = extern "system" fn(GLuint, GLenum, *mut GLfloat);
4677type PFNGLGETVERTEXATTRIBIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
4678type PFNGLGETVERTEXATTRIBPOINTERVPROC = extern "system" fn(GLuint, GLenum, *mut *mut c_void);
4679type PFNGLISPROGRAMPROC = extern "system" fn(GLuint) -> GLboolean;
4680type PFNGLISSHADERPROC = extern "system" fn(GLuint) -> GLboolean;
4681type PFNGLLINKPROGRAMPROC = extern "system" fn(GLuint);
4682type PFNGLSHADERSOURCEPROC = extern "system" fn(GLuint, GLsizei, *const *const GLchar, *const GLint);
4683type PFNGLUSEPROGRAMPROC = extern "system" fn(GLuint);
4684type PFNGLUNIFORM1FPROC = extern "system" fn(GLint, GLfloat);
4685type PFNGLUNIFORM2FPROC = extern "system" fn(GLint, GLfloat, GLfloat);
4686type PFNGLUNIFORM3FPROC = extern "system" fn(GLint, GLfloat, GLfloat, GLfloat);
4687type PFNGLUNIFORM4FPROC = extern "system" fn(GLint, GLfloat, GLfloat, GLfloat, GLfloat);
4688type PFNGLUNIFORM1IPROC = extern "system" fn(GLint, GLint);
4689type PFNGLUNIFORM2IPROC = extern "system" fn(GLint, GLint, GLint);
4690type PFNGLUNIFORM3IPROC = extern "system" fn(GLint, GLint, GLint, GLint);
4691type PFNGLUNIFORM4IPROC = extern "system" fn(GLint, GLint, GLint, GLint, GLint);
4692type PFNGLUNIFORM1FVPROC = extern "system" fn(GLint, GLsizei, *const GLfloat);
4693type PFNGLUNIFORM2FVPROC = extern "system" fn(GLint, GLsizei, *const GLfloat);
4694type PFNGLUNIFORM3FVPROC = extern "system" fn(GLint, GLsizei, *const GLfloat);
4695type PFNGLUNIFORM4FVPROC = extern "system" fn(GLint, GLsizei, *const GLfloat);
4696type PFNGLUNIFORM1IVPROC = extern "system" fn(GLint, GLsizei, *const GLint);
4697type PFNGLUNIFORM2IVPROC = extern "system" fn(GLint, GLsizei, *const GLint);
4698type PFNGLUNIFORM3IVPROC = extern "system" fn(GLint, GLsizei, *const GLint);
4699type PFNGLUNIFORM4IVPROC = extern "system" fn(GLint, GLsizei, *const GLint);
4700type PFNGLUNIFORMMATRIX2FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
4701type PFNGLUNIFORMMATRIX3FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
4702type PFNGLUNIFORMMATRIX4FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
4703type PFNGLVALIDATEPROGRAMPROC = extern "system" fn(GLuint);
4704type PFNGLVERTEXATTRIB1DPROC = extern "system" fn(GLuint, GLdouble);
4705type PFNGLVERTEXATTRIB1DVPROC = extern "system" fn(GLuint, *const GLdouble);
4706type PFNGLVERTEXATTRIB1FPROC = extern "system" fn(GLuint, GLfloat);
4707type PFNGLVERTEXATTRIB1FVPROC = extern "system" fn(GLuint, *const GLfloat);
4708type PFNGLVERTEXATTRIB1SPROC = extern "system" fn(GLuint, GLshort);
4709type PFNGLVERTEXATTRIB1SVPROC = extern "system" fn(GLuint, *const GLshort);
4710type PFNGLVERTEXATTRIB2DPROC = extern "system" fn(GLuint, GLdouble, GLdouble);
4711type PFNGLVERTEXATTRIB2DVPROC = extern "system" fn(GLuint, *const GLdouble);
4712type PFNGLVERTEXATTRIB2FPROC = extern "system" fn(GLuint, GLfloat, GLfloat);
4713type PFNGLVERTEXATTRIB2FVPROC = extern "system" fn(GLuint, *const GLfloat);
4714type PFNGLVERTEXATTRIB2SPROC = extern "system" fn(GLuint, GLshort, GLshort);
4715type PFNGLVERTEXATTRIB2SVPROC = extern "system" fn(GLuint, *const GLshort);
4716type PFNGLVERTEXATTRIB3DPROC = extern "system" fn(GLuint, GLdouble, GLdouble, GLdouble);
4717type PFNGLVERTEXATTRIB3DVPROC = extern "system" fn(GLuint, *const GLdouble);
4718type PFNGLVERTEXATTRIB3FPROC = extern "system" fn(GLuint, GLfloat, GLfloat, GLfloat);
4719type PFNGLVERTEXATTRIB3FVPROC = extern "system" fn(GLuint, *const GLfloat);
4720type PFNGLVERTEXATTRIB3SPROC = extern "system" fn(GLuint, GLshort, GLshort, GLshort);
4721type PFNGLVERTEXATTRIB3SVPROC = extern "system" fn(GLuint, *const GLshort);
4722type PFNGLVERTEXATTRIB4NBVPROC = extern "system" fn(GLuint, *const GLbyte);
4723type PFNGLVERTEXATTRIB4NIVPROC = extern "system" fn(GLuint, *const GLint);
4724type PFNGLVERTEXATTRIB4NSVPROC = extern "system" fn(GLuint, *const GLshort);
4725type PFNGLVERTEXATTRIB4NUBPROC = extern "system" fn(GLuint, GLubyte, GLubyte, GLubyte, GLubyte);
4726type PFNGLVERTEXATTRIB4NUBVPROC = extern "system" fn(GLuint, *const GLubyte);
4727type PFNGLVERTEXATTRIB4NUIVPROC = extern "system" fn(GLuint, *const GLuint);
4728type PFNGLVERTEXATTRIB4NUSVPROC = extern "system" fn(GLuint, *const GLushort);
4729type PFNGLVERTEXATTRIB4BVPROC = extern "system" fn(GLuint, *const GLbyte);
4730type PFNGLVERTEXATTRIB4DPROC = extern "system" fn(GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
4731type PFNGLVERTEXATTRIB4DVPROC = extern "system" fn(GLuint, *const GLdouble);
4732type PFNGLVERTEXATTRIB4FPROC = extern "system" fn(GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
4733type PFNGLVERTEXATTRIB4FVPROC = extern "system" fn(GLuint, *const GLfloat);
4734type PFNGLVERTEXATTRIB4IVPROC = extern "system" fn(GLuint, *const GLint);
4735type PFNGLVERTEXATTRIB4SPROC = extern "system" fn(GLuint, GLshort, GLshort, GLshort, GLshort);
4736type PFNGLVERTEXATTRIB4SVPROC = extern "system" fn(GLuint, *const GLshort);
4737type PFNGLVERTEXATTRIB4UBVPROC = extern "system" fn(GLuint, *const GLubyte);
4738type PFNGLVERTEXATTRIB4UIVPROC = extern "system" fn(GLuint, *const GLuint);
4739type PFNGLVERTEXATTRIB4USVPROC = extern "system" fn(GLuint, *const GLushort);
4740type PFNGLVERTEXATTRIBPOINTERPROC = extern "system" fn(GLuint, GLint, GLenum, GLboolean, GLsizei, *const c_void);
4741extern "system" fn dummy_pfnglblendequationseparateproc (_: GLenum, _: GLenum) {
4742	panic!("OpenGL function pointer `glBlendEquationSeparate()` is null.")
4743}
4744extern "system" fn dummy_pfngldrawbuffersproc (_: GLsizei, _: *const GLenum) {
4745	panic!("OpenGL function pointer `glDrawBuffers()` is null.")
4746}
4747extern "system" fn dummy_pfnglstencilopseparateproc (_: GLenum, _: GLenum, _: GLenum, _: GLenum) {
4748	panic!("OpenGL function pointer `glStencilOpSeparate()` is null.")
4749}
4750extern "system" fn dummy_pfnglstencilfuncseparateproc (_: GLenum, _: GLenum, _: GLint, _: GLuint) {
4751	panic!("OpenGL function pointer `glStencilFuncSeparate()` is null.")
4752}
4753extern "system" fn dummy_pfnglstencilmaskseparateproc (_: GLenum, _: GLuint) {
4754	panic!("OpenGL function pointer `glStencilMaskSeparate()` is null.")
4755}
4756extern "system" fn dummy_pfnglattachshaderproc (_: GLuint, _: GLuint) {
4757	panic!("OpenGL function pointer `glAttachShader()` is null.")
4758}
4759extern "system" fn dummy_pfnglbindattriblocationproc (_: GLuint, _: GLuint, _: *const GLchar) {
4760	panic!("OpenGL function pointer `glBindAttribLocation()` is null.")
4761}
4762extern "system" fn dummy_pfnglcompileshaderproc (_: GLuint) {
4763	panic!("OpenGL function pointer `glCompileShader()` is null.")
4764}
4765extern "system" fn dummy_pfnglcreateprogramproc () -> GLuint {
4766	panic!("OpenGL function pointer `glCreateProgram()` is null.")
4767}
4768extern "system" fn dummy_pfnglcreateshaderproc (_: GLenum) -> GLuint {
4769	panic!("OpenGL function pointer `glCreateShader()` is null.")
4770}
4771extern "system" fn dummy_pfngldeleteprogramproc (_: GLuint) {
4772	panic!("OpenGL function pointer `glDeleteProgram()` is null.")
4773}
4774extern "system" fn dummy_pfngldeleteshaderproc (_: GLuint) {
4775	panic!("OpenGL function pointer `glDeleteShader()` is null.")
4776}
4777extern "system" fn dummy_pfngldetachshaderproc (_: GLuint, _: GLuint) {
4778	panic!("OpenGL function pointer `glDetachShader()` is null.")
4779}
4780extern "system" fn dummy_pfngldisablevertexattribarrayproc (_: GLuint) {
4781	panic!("OpenGL function pointer `glDisableVertexAttribArray()` is null.")
4782}
4783extern "system" fn dummy_pfnglenablevertexattribarrayproc (_: GLuint) {
4784	panic!("OpenGL function pointer `glEnableVertexAttribArray()` is null.")
4785}
4786extern "system" fn dummy_pfnglgetactiveattribproc (_: GLuint, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLint, _: *mut GLenum, _: *mut GLchar) {
4787	panic!("OpenGL function pointer `glGetActiveAttrib()` is null.")
4788}
4789extern "system" fn dummy_pfnglgetactiveuniformproc (_: GLuint, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLint, _: *mut GLenum, _: *mut GLchar) {
4790	panic!("OpenGL function pointer `glGetActiveUniform()` is null.")
4791}
4792extern "system" fn dummy_pfnglgetattachedshadersproc (_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLuint) {
4793	panic!("OpenGL function pointer `glGetAttachedShaders()` is null.")
4794}
4795extern "system" fn dummy_pfnglgetattriblocationproc (_: GLuint, _: *const GLchar) -> GLint {
4796	panic!("OpenGL function pointer `glGetAttribLocation()` is null.")
4797}
4798extern "system" fn dummy_pfnglgetprogramivproc (_: GLuint, _: GLenum, _: *mut GLint) {
4799	panic!("OpenGL function pointer `glGetProgramiv()` is null.")
4800}
4801extern "system" fn dummy_pfnglgetprograminfologproc (_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
4802	panic!("OpenGL function pointer `glGetProgramInfoLog()` is null.")
4803}
4804extern "system" fn dummy_pfnglgetshaderivproc (_: GLuint, _: GLenum, _: *mut GLint) {
4805	panic!("OpenGL function pointer `glGetShaderiv()` is null.")
4806}
4807extern "system" fn dummy_pfnglgetshaderinfologproc (_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
4808	panic!("OpenGL function pointer `glGetShaderInfoLog()` is null.")
4809}
4810extern "system" fn dummy_pfnglgetshadersourceproc (_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
4811	panic!("OpenGL function pointer `glGetShaderSource()` is null.")
4812}
4813extern "system" fn dummy_pfnglgetuniformlocationproc (_: GLuint, _: *const GLchar) -> GLint {
4814	panic!("OpenGL function pointer `glGetUniformLocation()` is null.")
4815}
4816extern "system" fn dummy_pfnglgetuniformfvproc (_: GLuint, _: GLint, _: *mut GLfloat) {
4817	panic!("OpenGL function pointer `glGetUniformfv()` is null.")
4818}
4819extern "system" fn dummy_pfnglgetuniformivproc (_: GLuint, _: GLint, _: *mut GLint) {
4820	panic!("OpenGL function pointer `glGetUniformiv()` is null.")
4821}
4822extern "system" fn dummy_pfnglgetvertexattribdvproc (_: GLuint, _: GLenum, _: *mut GLdouble) {
4823	panic!("OpenGL function pointer `glGetVertexAttribdv()` is null.")
4824}
4825extern "system" fn dummy_pfnglgetvertexattribfvproc (_: GLuint, _: GLenum, _: *mut GLfloat) {
4826	panic!("OpenGL function pointer `glGetVertexAttribfv()` is null.")
4827}
4828extern "system" fn dummy_pfnglgetvertexattribivproc (_: GLuint, _: GLenum, _: *mut GLint) {
4829	panic!("OpenGL function pointer `glGetVertexAttribiv()` is null.")
4830}
4831extern "system" fn dummy_pfnglgetvertexattribpointervproc (_: GLuint, _: GLenum, _: *mut *mut c_void) {
4832	panic!("OpenGL function pointer `glGetVertexAttribPointerv()` is null.")
4833}
4834extern "system" fn dummy_pfnglisprogramproc (_: GLuint) -> GLboolean {
4835	panic!("OpenGL function pointer `glIsProgram()` is null.")
4836}
4837extern "system" fn dummy_pfnglisshaderproc (_: GLuint) -> GLboolean {
4838	panic!("OpenGL function pointer `glIsShader()` is null.")
4839}
4840extern "system" fn dummy_pfngllinkprogramproc (_: GLuint) {
4841	panic!("OpenGL function pointer `glLinkProgram()` is null.")
4842}
4843extern "system" fn dummy_pfnglshadersourceproc (_: GLuint, _: GLsizei, _: *const *const GLchar, _: *const GLint) {
4844	panic!("OpenGL function pointer `glShaderSource()` is null.")
4845}
4846extern "system" fn dummy_pfngluseprogramproc (_: GLuint) {
4847	panic!("OpenGL function pointer `glUseProgram()` is null.")
4848}
4849extern "system" fn dummy_pfngluniform1fproc (_: GLint, _: GLfloat) {
4850	panic!("OpenGL function pointer `glUniform1f()` is null.")
4851}
4852extern "system" fn dummy_pfngluniform2fproc (_: GLint, _: GLfloat, _: GLfloat) {
4853	panic!("OpenGL function pointer `glUniform2f()` is null.")
4854}
4855extern "system" fn dummy_pfngluniform3fproc (_: GLint, _: GLfloat, _: GLfloat, _: GLfloat) {
4856	panic!("OpenGL function pointer `glUniform3f()` is null.")
4857}
4858extern "system" fn dummy_pfngluniform4fproc (_: GLint, _: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat) {
4859	panic!("OpenGL function pointer `glUniform4f()` is null.")
4860}
4861extern "system" fn dummy_pfngluniform1iproc (_: GLint, _: GLint) {
4862	panic!("OpenGL function pointer `glUniform1i()` is null.")
4863}
4864extern "system" fn dummy_pfngluniform2iproc (_: GLint, _: GLint, _: GLint) {
4865	panic!("OpenGL function pointer `glUniform2i()` is null.")
4866}
4867extern "system" fn dummy_pfngluniform3iproc (_: GLint, _: GLint, _: GLint, _: GLint) {
4868	panic!("OpenGL function pointer `glUniform3i()` is null.")
4869}
4870extern "system" fn dummy_pfngluniform4iproc (_: GLint, _: GLint, _: GLint, _: GLint, _: GLint) {
4871	panic!("OpenGL function pointer `glUniform4i()` is null.")
4872}
4873extern "system" fn dummy_pfngluniform1fvproc (_: GLint, _: GLsizei, _: *const GLfloat) {
4874	panic!("OpenGL function pointer `glUniform1fv()` is null.")
4875}
4876extern "system" fn dummy_pfngluniform2fvproc (_: GLint, _: GLsizei, _: *const GLfloat) {
4877	panic!("OpenGL function pointer `glUniform2fv()` is null.")
4878}
4879extern "system" fn dummy_pfngluniform3fvproc (_: GLint, _: GLsizei, _: *const GLfloat) {
4880	panic!("OpenGL function pointer `glUniform3fv()` is null.")
4881}
4882extern "system" fn dummy_pfngluniform4fvproc (_: GLint, _: GLsizei, _: *const GLfloat) {
4883	panic!("OpenGL function pointer `glUniform4fv()` is null.")
4884}
4885extern "system" fn dummy_pfngluniform1ivproc (_: GLint, _: GLsizei, _: *const GLint) {
4886	panic!("OpenGL function pointer `glUniform1iv()` is null.")
4887}
4888extern "system" fn dummy_pfngluniform2ivproc (_: GLint, _: GLsizei, _: *const GLint) {
4889	panic!("OpenGL function pointer `glUniform2iv()` is null.")
4890}
4891extern "system" fn dummy_pfngluniform3ivproc (_: GLint, _: GLsizei, _: *const GLint) {
4892	panic!("OpenGL function pointer `glUniform3iv()` is null.")
4893}
4894extern "system" fn dummy_pfngluniform4ivproc (_: GLint, _: GLsizei, _: *const GLint) {
4895	panic!("OpenGL function pointer `glUniform4iv()` is null.")
4896}
4897extern "system" fn dummy_pfngluniformmatrix2fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
4898	panic!("OpenGL function pointer `glUniformMatrix2fv()` is null.")
4899}
4900extern "system" fn dummy_pfngluniformmatrix3fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
4901	panic!("OpenGL function pointer `glUniformMatrix3fv()` is null.")
4902}
4903extern "system" fn dummy_pfngluniformmatrix4fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
4904	panic!("OpenGL function pointer `glUniformMatrix4fv()` is null.")
4905}
4906extern "system" fn dummy_pfnglvalidateprogramproc (_: GLuint) {
4907	panic!("OpenGL function pointer `glValidateProgram()` is null.")
4908}
4909extern "system" fn dummy_pfnglvertexattrib1dproc (_: GLuint, _: GLdouble) {
4910	panic!("OpenGL function pointer `glVertexAttrib1d()` is null.")
4911}
4912extern "system" fn dummy_pfnglvertexattrib1dvproc (_: GLuint, _: *const GLdouble) {
4913	panic!("OpenGL function pointer `glVertexAttrib1dv()` is null.")
4914}
4915extern "system" fn dummy_pfnglvertexattrib1fproc (_: GLuint, _: GLfloat) {
4916	panic!("OpenGL function pointer `glVertexAttrib1f()` is null.")
4917}
4918extern "system" fn dummy_pfnglvertexattrib1fvproc (_: GLuint, _: *const GLfloat) {
4919	panic!("OpenGL function pointer `glVertexAttrib1fv()` is null.")
4920}
4921extern "system" fn dummy_pfnglvertexattrib1sproc (_: GLuint, _: GLshort) {
4922	panic!("OpenGL function pointer `glVertexAttrib1s()` is null.")
4923}
4924extern "system" fn dummy_pfnglvertexattrib1svproc (_: GLuint, _: *const GLshort) {
4925	panic!("OpenGL function pointer `glVertexAttrib1sv()` is null.")
4926}
4927extern "system" fn dummy_pfnglvertexattrib2dproc (_: GLuint, _: GLdouble, _: GLdouble) {
4928	panic!("OpenGL function pointer `glVertexAttrib2d()` is null.")
4929}
4930extern "system" fn dummy_pfnglvertexattrib2dvproc (_: GLuint, _: *const GLdouble) {
4931	panic!("OpenGL function pointer `glVertexAttrib2dv()` is null.")
4932}
4933extern "system" fn dummy_pfnglvertexattrib2fproc (_: GLuint, _: GLfloat, _: GLfloat) {
4934	panic!("OpenGL function pointer `glVertexAttrib2f()` is null.")
4935}
4936extern "system" fn dummy_pfnglvertexattrib2fvproc (_: GLuint, _: *const GLfloat) {
4937	panic!("OpenGL function pointer `glVertexAttrib2fv()` is null.")
4938}
4939extern "system" fn dummy_pfnglvertexattrib2sproc (_: GLuint, _: GLshort, _: GLshort) {
4940	panic!("OpenGL function pointer `glVertexAttrib2s()` is null.")
4941}
4942extern "system" fn dummy_pfnglvertexattrib2svproc (_: GLuint, _: *const GLshort) {
4943	panic!("OpenGL function pointer `glVertexAttrib2sv()` is null.")
4944}
4945extern "system" fn dummy_pfnglvertexattrib3dproc (_: GLuint, _: GLdouble, _: GLdouble, _: GLdouble) {
4946	panic!("OpenGL function pointer `glVertexAttrib3d()` is null.")
4947}
4948extern "system" fn dummy_pfnglvertexattrib3dvproc (_: GLuint, _: *const GLdouble) {
4949	panic!("OpenGL function pointer `glVertexAttrib3dv()` is null.")
4950}
4951extern "system" fn dummy_pfnglvertexattrib3fproc (_: GLuint, _: GLfloat, _: GLfloat, _: GLfloat) {
4952	panic!("OpenGL function pointer `glVertexAttrib3f()` is null.")
4953}
4954extern "system" fn dummy_pfnglvertexattrib3fvproc (_: GLuint, _: *const GLfloat) {
4955	panic!("OpenGL function pointer `glVertexAttrib3fv()` is null.")
4956}
4957extern "system" fn dummy_pfnglvertexattrib3sproc (_: GLuint, _: GLshort, _: GLshort, _: GLshort) {
4958	panic!("OpenGL function pointer `glVertexAttrib3s()` is null.")
4959}
4960extern "system" fn dummy_pfnglvertexattrib3svproc (_: GLuint, _: *const GLshort) {
4961	panic!("OpenGL function pointer `glVertexAttrib3sv()` is null.")
4962}
4963extern "system" fn dummy_pfnglvertexattrib4nbvproc (_: GLuint, _: *const GLbyte) {
4964	panic!("OpenGL function pointer `glVertexAttrib4Nbv()` is null.")
4965}
4966extern "system" fn dummy_pfnglvertexattrib4nivproc (_: GLuint, _: *const GLint) {
4967	panic!("OpenGL function pointer `glVertexAttrib4Niv()` is null.")
4968}
4969extern "system" fn dummy_pfnglvertexattrib4nsvproc (_: GLuint, _: *const GLshort) {
4970	panic!("OpenGL function pointer `glVertexAttrib4Nsv()` is null.")
4971}
4972extern "system" fn dummy_pfnglvertexattrib4nubproc (_: GLuint, _: GLubyte, _: GLubyte, _: GLubyte, _: GLubyte) {
4973	panic!("OpenGL function pointer `glVertexAttrib4Nub()` is null.")
4974}
4975extern "system" fn dummy_pfnglvertexattrib4nubvproc (_: GLuint, _: *const GLubyte) {
4976	panic!("OpenGL function pointer `glVertexAttrib4Nubv()` is null.")
4977}
4978extern "system" fn dummy_pfnglvertexattrib4nuivproc (_: GLuint, _: *const GLuint) {
4979	panic!("OpenGL function pointer `glVertexAttrib4Nuiv()` is null.")
4980}
4981extern "system" fn dummy_pfnglvertexattrib4nusvproc (_: GLuint, _: *const GLushort) {
4982	panic!("OpenGL function pointer `glVertexAttrib4Nusv()` is null.")
4983}
4984extern "system" fn dummy_pfnglvertexattrib4bvproc (_: GLuint, _: *const GLbyte) {
4985	panic!("OpenGL function pointer `glVertexAttrib4bv()` is null.")
4986}
4987extern "system" fn dummy_pfnglvertexattrib4dproc (_: GLuint, _: GLdouble, _: GLdouble, _: GLdouble, _: GLdouble) {
4988	panic!("OpenGL function pointer `glVertexAttrib4d()` is null.")
4989}
4990extern "system" fn dummy_pfnglvertexattrib4dvproc (_: GLuint, _: *const GLdouble) {
4991	panic!("OpenGL function pointer `glVertexAttrib4dv()` is null.")
4992}
4993extern "system" fn dummy_pfnglvertexattrib4fproc (_: GLuint, _: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat) {
4994	panic!("OpenGL function pointer `glVertexAttrib4f()` is null.")
4995}
4996extern "system" fn dummy_pfnglvertexattrib4fvproc (_: GLuint, _: *const GLfloat) {
4997	panic!("OpenGL function pointer `glVertexAttrib4fv()` is null.")
4998}
4999extern "system" fn dummy_pfnglvertexattrib4ivproc (_: GLuint, _: *const GLint) {
5000	panic!("OpenGL function pointer `glVertexAttrib4iv()` is null.")
5001}
5002extern "system" fn dummy_pfnglvertexattrib4sproc (_: GLuint, _: GLshort, _: GLshort, _: GLshort, _: GLshort) {
5003	panic!("OpenGL function pointer `glVertexAttrib4s()` is null.")
5004}
5005extern "system" fn dummy_pfnglvertexattrib4svproc (_: GLuint, _: *const GLshort) {
5006	panic!("OpenGL function pointer `glVertexAttrib4sv()` is null.")
5007}
5008extern "system" fn dummy_pfnglvertexattrib4ubvproc (_: GLuint, _: *const GLubyte) {
5009	panic!("OpenGL function pointer `glVertexAttrib4ubv()` is null.")
5010}
5011extern "system" fn dummy_pfnglvertexattrib4uivproc (_: GLuint, _: *const GLuint) {
5012	panic!("OpenGL function pointer `glVertexAttrib4uiv()` is null.")
5013}
5014extern "system" fn dummy_pfnglvertexattrib4usvproc (_: GLuint, _: *const GLushort) {
5015	panic!("OpenGL function pointer `glVertexAttrib4usv()` is null.")
5016}
5017extern "system" fn dummy_pfnglvertexattribpointerproc (_: GLuint, _: GLint, _: GLenum, _: GLboolean, _: GLsizei, _: *const c_void) {
5018	panic!("OpenGL function pointer `glVertexAttribPointer()` is null.")
5019}
5020pub const GL_BLEND_EQUATION_RGB: GLenum = 0x8009;
5021pub const GL_VERTEX_ATTRIB_ARRAY_ENABLED: GLenum = 0x8622;
5022pub const GL_VERTEX_ATTRIB_ARRAY_SIZE: GLenum = 0x8623;
5023pub const GL_VERTEX_ATTRIB_ARRAY_STRIDE: GLenum = 0x8624;
5024pub const GL_VERTEX_ATTRIB_ARRAY_TYPE: GLenum = 0x8625;
5025pub const GL_CURRENT_VERTEX_ATTRIB: GLenum = 0x8626;
5026pub const GL_VERTEX_PROGRAM_POINT_SIZE: GLenum = 0x8642;
5027pub const GL_VERTEX_ATTRIB_ARRAY_POINTER: GLenum = 0x8645;
5028pub const GL_STENCIL_BACK_FUNC: GLenum = 0x8800;
5029pub const GL_STENCIL_BACK_FAIL: GLenum = 0x8801;
5030pub const GL_STENCIL_BACK_PASS_DEPTH_FAIL: GLenum = 0x8802;
5031pub const GL_STENCIL_BACK_PASS_DEPTH_PASS: GLenum = 0x8803;
5032pub const GL_MAX_DRAW_BUFFERS: GLenum = 0x8824;
5033pub const GL_DRAW_BUFFER0: GLenum = 0x8825;
5034pub const GL_DRAW_BUFFER1: GLenum = 0x8826;
5035pub const GL_DRAW_BUFFER2: GLenum = 0x8827;
5036pub const GL_DRAW_BUFFER3: GLenum = 0x8828;
5037pub const GL_DRAW_BUFFER4: GLenum = 0x8829;
5038pub const GL_DRAW_BUFFER5: GLenum = 0x882A;
5039pub const GL_DRAW_BUFFER6: GLenum = 0x882B;
5040pub const GL_DRAW_BUFFER7: GLenum = 0x882C;
5041pub const GL_DRAW_BUFFER8: GLenum = 0x882D;
5042pub const GL_DRAW_BUFFER9: GLenum = 0x882E;
5043pub const GL_DRAW_BUFFER10: GLenum = 0x882F;
5044pub const GL_DRAW_BUFFER11: GLenum = 0x8830;
5045pub const GL_DRAW_BUFFER12: GLenum = 0x8831;
5046pub const GL_DRAW_BUFFER13: GLenum = 0x8832;
5047pub const GL_DRAW_BUFFER14: GLenum = 0x8833;
5048pub const GL_DRAW_BUFFER15: GLenum = 0x8834;
5049pub const GL_BLEND_EQUATION_ALPHA: GLenum = 0x883D;
5050pub const GL_MAX_VERTEX_ATTRIBS: GLenum = 0x8869;
5051pub const GL_VERTEX_ATTRIB_ARRAY_NORMALIZED: GLenum = 0x886A;
5052pub const GL_MAX_TEXTURE_IMAGE_UNITS: GLenum = 0x8872;
5053pub const GL_FRAGMENT_SHADER: GLenum = 0x8B30;
5054pub const GL_VERTEX_SHADER: GLenum = 0x8B31;
5055pub const GL_MAX_FRAGMENT_UNIFORM_COMPONENTS: GLenum = 0x8B49;
5056pub const GL_MAX_VERTEX_UNIFORM_COMPONENTS: GLenum = 0x8B4A;
5057pub const GL_MAX_VARYING_FLOATS: GLenum = 0x8B4B;
5058pub const GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS: GLenum = 0x8B4C;
5059pub const GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS: GLenum = 0x8B4D;
5060pub const GL_SHADER_TYPE: GLenum = 0x8B4F;
5061pub const GL_FLOAT_VEC2: GLenum = 0x8B50;
5062pub const GL_FLOAT_VEC3: GLenum = 0x8B51;
5063pub const GL_FLOAT_VEC4: GLenum = 0x8B52;
5064pub const GL_INT_VEC2: GLenum = 0x8B53;
5065pub const GL_INT_VEC3: GLenum = 0x8B54;
5066pub const GL_INT_VEC4: GLenum = 0x8B55;
5067pub const GL_BOOL: GLenum = 0x8B56;
5068pub const GL_BOOL_VEC2: GLenum = 0x8B57;
5069pub const GL_BOOL_VEC3: GLenum = 0x8B58;
5070pub const GL_BOOL_VEC4: GLenum = 0x8B59;
5071pub const GL_FLOAT_MAT2: GLenum = 0x8B5A;
5072pub const GL_FLOAT_MAT3: GLenum = 0x8B5B;
5073pub const GL_FLOAT_MAT4: GLenum = 0x8B5C;
5074pub const GL_SAMPLER_1D: GLenum = 0x8B5D;
5075pub const GL_SAMPLER_2D: GLenum = 0x8B5E;
5076pub const GL_SAMPLER_3D: GLenum = 0x8B5F;
5077pub const GL_SAMPLER_CUBE: GLenum = 0x8B60;
5078pub const GL_SAMPLER_1D_SHADOW: GLenum = 0x8B61;
5079pub const GL_SAMPLER_2D_SHADOW: GLenum = 0x8B62;
5080pub const GL_DELETE_STATUS: GLenum = 0x8B80;
5081pub const GL_COMPILE_STATUS: GLenum = 0x8B81;
5082pub const GL_LINK_STATUS: GLenum = 0x8B82;
5083pub const GL_VALIDATE_STATUS: GLenum = 0x8B83;
5084pub const GL_INFO_LOG_LENGTH: GLenum = 0x8B84;
5085pub const GL_ATTACHED_SHADERS: GLenum = 0x8B85;
5086pub const GL_ACTIVE_UNIFORMS: GLenum = 0x8B86;
5087pub const GL_ACTIVE_UNIFORM_MAX_LENGTH: GLenum = 0x8B87;
5088pub const GL_SHADER_SOURCE_LENGTH: GLenum = 0x8B88;
5089pub const GL_ACTIVE_ATTRIBUTES: GLenum = 0x8B89;
5090pub const GL_ACTIVE_ATTRIBUTE_MAX_LENGTH: GLenum = 0x8B8A;
5091pub const GL_FRAGMENT_SHADER_DERIVATIVE_HINT: GLenum = 0x8B8B;
5092pub const GL_SHADING_LANGUAGE_VERSION: GLenum = 0x8B8C;
5093pub const GL_CURRENT_PROGRAM: GLenum = 0x8B8D;
5094pub const GL_POINT_SPRITE_COORD_ORIGIN: GLenum = 0x8CA0;
5095pub const GL_LOWER_LEFT: GLenum = 0x8CA1;
5096pub const GL_UPPER_LEFT: GLenum = 0x8CA2;
5097pub const GL_STENCIL_BACK_REF: GLenum = 0x8CA3;
5098pub const GL_STENCIL_BACK_VALUE_MASK: GLenum = 0x8CA4;
5099pub const GL_STENCIL_BACK_WRITEMASK: GLenum = 0x8CA5;
5100pub const GL_VERTEX_PROGRAM_TWO_SIDE: GLenum = 0x8643;
5101pub const GL_POINT_SPRITE: GLenum = 0x8861;
5102pub const GL_COORD_REPLACE: GLenum = 0x8862;
5103pub const GL_MAX_TEXTURE_COORDS: GLenum = 0x8871;
5104
5105pub trait GL_2_0 {
5106	fn glGetError(&self) -> GLenum;
5107	fn glBlendEquationSeparate(&self, modeRGB: GLenum, modeAlpha: GLenum) -> Result<()>;
5108	fn glDrawBuffers(&self, n: GLsizei, bufs: *const GLenum) -> Result<()>;
5109	fn glStencilOpSeparate(&self, face: GLenum, sfail: GLenum, dpfail: GLenum, dppass: GLenum) -> Result<()>;
5110	fn glStencilFuncSeparate(&self, face: GLenum, func: GLenum, ref_: GLint, mask: GLuint) -> Result<()>;
5111	fn glStencilMaskSeparate(&self, face: GLenum, mask: GLuint) -> Result<()>;
5112	fn glAttachShader(&self, program: GLuint, shader: GLuint) -> Result<()>;
5113	fn glBindAttribLocation(&self, program: GLuint, index: GLuint, name: *const GLchar) -> Result<()>;
5114	fn glCompileShader(&self, shader: GLuint) -> Result<()>;
5115	fn glCreateProgram(&self) -> Result<GLuint>;
5116	fn glCreateShader(&self, type_: GLenum) -> Result<GLuint>;
5117	fn glDeleteProgram(&self, program: GLuint) -> Result<()>;
5118	fn glDeleteShader(&self, shader: GLuint) -> Result<()>;
5119	fn glDetachShader(&self, program: GLuint, shader: GLuint) -> Result<()>;
5120	fn glDisableVertexAttribArray(&self, index: GLuint) -> Result<()>;
5121	fn glEnableVertexAttribArray(&self, index: GLuint) -> Result<()>;
5122	fn glGetActiveAttrib(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLint, type_: *mut GLenum, name: *mut GLchar) -> Result<()>;
5123	fn glGetActiveUniform(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLint, type_: *mut GLenum, name: *mut GLchar) -> Result<()>;
5124	fn glGetAttachedShaders(&self, program: GLuint, maxCount: GLsizei, count: *mut GLsizei, shaders: *mut GLuint) -> Result<()>;
5125	fn glGetAttribLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint>;
5126	fn glGetProgramiv(&self, program: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
5127	fn glGetProgramInfoLog(&self, program: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()>;
5128	fn glGetShaderiv(&self, shader: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
5129	fn glGetShaderInfoLog(&self, shader: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()>;
5130	fn glGetShaderSource(&self, shader: GLuint, bufSize: GLsizei, length: *mut GLsizei, source: *mut GLchar) -> Result<()>;
5131	fn glGetUniformLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint>;
5132	fn glGetUniformfv(&self, program: GLuint, location: GLint, params: *mut GLfloat) -> Result<()>;
5133	fn glGetUniformiv(&self, program: GLuint, location: GLint, params: *mut GLint) -> Result<()>;
5134	fn glGetVertexAttribdv(&self, index: GLuint, pname: GLenum, params: *mut GLdouble) -> Result<()>;
5135	fn glGetVertexAttribfv(&self, index: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()>;
5136	fn glGetVertexAttribiv(&self, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
5137	fn glGetVertexAttribPointerv(&self, index: GLuint, pname: GLenum, pointer: *mut *mut c_void) -> Result<()>;
5138	fn glIsProgram(&self, program: GLuint) -> Result<GLboolean>;
5139	fn glIsShader(&self, shader: GLuint) -> Result<GLboolean>;
5140	fn glLinkProgram(&self, program: GLuint) -> Result<()>;
5141	fn glShaderSource(&self, shader: GLuint, count: GLsizei, string_: *const *const GLchar, length: *const GLint) -> Result<()>;
5142	fn glUseProgram(&self, program: GLuint) -> Result<()>;
5143	fn glUniform1f(&self, location: GLint, v0: GLfloat) -> Result<()>;
5144	fn glUniform2f(&self, location: GLint, v0: GLfloat, v1: GLfloat) -> Result<()>;
5145	fn glUniform3f(&self, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat) -> Result<()>;
5146	fn glUniform4f(&self, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat) -> Result<()>;
5147	fn glUniform1i(&self, location: GLint, v0: GLint) -> Result<()>;
5148	fn glUniform2i(&self, location: GLint, v0: GLint, v1: GLint) -> Result<()>;
5149	fn glUniform3i(&self, location: GLint, v0: GLint, v1: GLint, v2: GLint) -> Result<()>;
5150	fn glUniform4i(&self, location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint) -> Result<()>;
5151	fn glUniform1fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()>;
5152	fn glUniform2fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()>;
5153	fn glUniform3fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()>;
5154	fn glUniform4fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()>;
5155	fn glUniform1iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()>;
5156	fn glUniform2iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()>;
5157	fn glUniform3iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()>;
5158	fn glUniform4iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()>;
5159	fn glUniformMatrix2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
5160	fn glUniformMatrix3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
5161	fn glUniformMatrix4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
5162	fn glValidateProgram(&self, program: GLuint) -> Result<()>;
5163	fn glVertexAttrib1d(&self, index: GLuint, x: GLdouble) -> Result<()>;
5164	fn glVertexAttrib1dv(&self, index: GLuint, v: *const GLdouble) -> Result<()>;
5165	fn glVertexAttrib1f(&self, index: GLuint, x: GLfloat) -> Result<()>;
5166	fn glVertexAttrib1fv(&self, index: GLuint, v: *const GLfloat) -> Result<()>;
5167	fn glVertexAttrib1s(&self, index: GLuint, x: GLshort) -> Result<()>;
5168	fn glVertexAttrib1sv(&self, index: GLuint, v: *const GLshort) -> Result<()>;
5169	fn glVertexAttrib2d(&self, index: GLuint, x: GLdouble, y: GLdouble) -> Result<()>;
5170	fn glVertexAttrib2dv(&self, index: GLuint, v: *const GLdouble) -> Result<()>;
5171	fn glVertexAttrib2f(&self, index: GLuint, x: GLfloat, y: GLfloat) -> Result<()>;
5172	fn glVertexAttrib2fv(&self, index: GLuint, v: *const GLfloat) -> Result<()>;
5173	fn glVertexAttrib2s(&self, index: GLuint, x: GLshort, y: GLshort) -> Result<()>;
5174	fn glVertexAttrib2sv(&self, index: GLuint, v: *const GLshort) -> Result<()>;
5175	fn glVertexAttrib3d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()>;
5176	fn glVertexAttrib3dv(&self, index: GLuint, v: *const GLdouble) -> Result<()>;
5177	fn glVertexAttrib3f(&self, index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat) -> Result<()>;
5178	fn glVertexAttrib3fv(&self, index: GLuint, v: *const GLfloat) -> Result<()>;
5179	fn glVertexAttrib3s(&self, index: GLuint, x: GLshort, y: GLshort, z: GLshort) -> Result<()>;
5180	fn glVertexAttrib3sv(&self, index: GLuint, v: *const GLshort) -> Result<()>;
5181	fn glVertexAttrib4Nbv(&self, index: GLuint, v: *const GLbyte) -> Result<()>;
5182	fn glVertexAttrib4Niv(&self, index: GLuint, v: *const GLint) -> Result<()>;
5183	fn glVertexAttrib4Nsv(&self, index: GLuint, v: *const GLshort) -> Result<()>;
5184	fn glVertexAttrib4Nub(&self, index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte) -> Result<()>;
5185	fn glVertexAttrib4Nubv(&self, index: GLuint, v: *const GLubyte) -> Result<()>;
5186	fn glVertexAttrib4Nuiv(&self, index: GLuint, v: *const GLuint) -> Result<()>;
5187	fn glVertexAttrib4Nusv(&self, index: GLuint, v: *const GLushort) -> Result<()>;
5188	fn glVertexAttrib4bv(&self, index: GLuint, v: *const GLbyte) -> Result<()>;
5189	fn glVertexAttrib4d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()>;
5190	fn glVertexAttrib4dv(&self, index: GLuint, v: *const GLdouble) -> Result<()>;
5191	fn glVertexAttrib4f(&self, index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat) -> Result<()>;
5192	fn glVertexAttrib4fv(&self, index: GLuint, v: *const GLfloat) -> Result<()>;
5193	fn glVertexAttrib4iv(&self, index: GLuint, v: *const GLint) -> Result<()>;
5194	fn glVertexAttrib4s(&self, index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort) -> Result<()>;
5195	fn glVertexAttrib4sv(&self, index: GLuint, v: *const GLshort) -> Result<()>;
5196	fn glVertexAttrib4ubv(&self, index: GLuint, v: *const GLubyte) -> Result<()>;
5197	fn glVertexAttrib4uiv(&self, index: GLuint, v: *const GLuint) -> Result<()>;
5198	fn glVertexAttrib4usv(&self, index: GLuint, v: *const GLushort) -> Result<()>;
5199	fn glVertexAttribPointer(&self, index: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, stride: GLsizei, pointer: *const c_void) -> Result<()>;
5200	fn get_shading_language_version(&self) -> &'static str;
5201}
5202
5203#[derive(Clone, Copy, PartialEq, Eq, Hash)]
5204pub struct Version20 {
5205	shading_language_version: &'static str,
5206	available: bool,
5207	geterror: PFNGLGETERRORPROC,
5208	blendequationseparate: PFNGLBLENDEQUATIONSEPARATEPROC,
5209	drawbuffers: PFNGLDRAWBUFFERSPROC,
5210	stencilopseparate: PFNGLSTENCILOPSEPARATEPROC,
5211	stencilfuncseparate: PFNGLSTENCILFUNCSEPARATEPROC,
5212	stencilmaskseparate: PFNGLSTENCILMASKSEPARATEPROC,
5213	attachshader: PFNGLATTACHSHADERPROC,
5214	bindattriblocation: PFNGLBINDATTRIBLOCATIONPROC,
5215	compileshader: PFNGLCOMPILESHADERPROC,
5216	createprogram: PFNGLCREATEPROGRAMPROC,
5217	createshader: PFNGLCREATESHADERPROC,
5218	deleteprogram: PFNGLDELETEPROGRAMPROC,
5219	deleteshader: PFNGLDELETESHADERPROC,
5220	detachshader: PFNGLDETACHSHADERPROC,
5221	disablevertexattribarray: PFNGLDISABLEVERTEXATTRIBARRAYPROC,
5222	enablevertexattribarray: PFNGLENABLEVERTEXATTRIBARRAYPROC,
5223	getactiveattrib: PFNGLGETACTIVEATTRIBPROC,
5224	getactiveuniform: PFNGLGETACTIVEUNIFORMPROC,
5225	getattachedshaders: PFNGLGETATTACHEDSHADERSPROC,
5226	getattriblocation: PFNGLGETATTRIBLOCATIONPROC,
5227	getprogramiv: PFNGLGETPROGRAMIVPROC,
5228	getprograminfolog: PFNGLGETPROGRAMINFOLOGPROC,
5229	getshaderiv: PFNGLGETSHADERIVPROC,
5230	getshaderinfolog: PFNGLGETSHADERINFOLOGPROC,
5231	getshadersource: PFNGLGETSHADERSOURCEPROC,
5232	getuniformlocation: PFNGLGETUNIFORMLOCATIONPROC,
5233	getuniformfv: PFNGLGETUNIFORMFVPROC,
5234	getuniformiv: PFNGLGETUNIFORMIVPROC,
5235	getvertexattribdv: PFNGLGETVERTEXATTRIBDVPROC,
5236	getvertexattribfv: PFNGLGETVERTEXATTRIBFVPROC,
5237	getvertexattribiv: PFNGLGETVERTEXATTRIBIVPROC,
5238	getvertexattribpointerv: PFNGLGETVERTEXATTRIBPOINTERVPROC,
5239	isprogram: PFNGLISPROGRAMPROC,
5240	isshader: PFNGLISSHADERPROC,
5241	linkprogram: PFNGLLINKPROGRAMPROC,
5242	shadersource: PFNGLSHADERSOURCEPROC,
5243	useprogram: PFNGLUSEPROGRAMPROC,
5244	uniform1f: PFNGLUNIFORM1FPROC,
5245	uniform2f: PFNGLUNIFORM2FPROC,
5246	uniform3f: PFNGLUNIFORM3FPROC,
5247	uniform4f: PFNGLUNIFORM4FPROC,
5248	uniform1i: PFNGLUNIFORM1IPROC,
5249	uniform2i: PFNGLUNIFORM2IPROC,
5250	uniform3i: PFNGLUNIFORM3IPROC,
5251	uniform4i: PFNGLUNIFORM4IPROC,
5252	uniform1fv: PFNGLUNIFORM1FVPROC,
5253	uniform2fv: PFNGLUNIFORM2FVPROC,
5254	uniform3fv: PFNGLUNIFORM3FVPROC,
5255	uniform4fv: PFNGLUNIFORM4FVPROC,
5256	uniform1iv: PFNGLUNIFORM1IVPROC,
5257	uniform2iv: PFNGLUNIFORM2IVPROC,
5258	uniform3iv: PFNGLUNIFORM3IVPROC,
5259	uniform4iv: PFNGLUNIFORM4IVPROC,
5260	uniformmatrix2fv: PFNGLUNIFORMMATRIX2FVPROC,
5261	uniformmatrix3fv: PFNGLUNIFORMMATRIX3FVPROC,
5262	uniformmatrix4fv: PFNGLUNIFORMMATRIX4FVPROC,
5263	validateprogram: PFNGLVALIDATEPROGRAMPROC,
5264	vertexattrib1d: PFNGLVERTEXATTRIB1DPROC,
5265	vertexattrib1dv: PFNGLVERTEXATTRIB1DVPROC,
5266	vertexattrib1f: PFNGLVERTEXATTRIB1FPROC,
5267	vertexattrib1fv: PFNGLVERTEXATTRIB1FVPROC,
5268	vertexattrib1s: PFNGLVERTEXATTRIB1SPROC,
5269	vertexattrib1sv: PFNGLVERTEXATTRIB1SVPROC,
5270	vertexattrib2d: PFNGLVERTEXATTRIB2DPROC,
5271	vertexattrib2dv: PFNGLVERTEXATTRIB2DVPROC,
5272	vertexattrib2f: PFNGLVERTEXATTRIB2FPROC,
5273	vertexattrib2fv: PFNGLVERTEXATTRIB2FVPROC,
5274	vertexattrib2s: PFNGLVERTEXATTRIB2SPROC,
5275	vertexattrib2sv: PFNGLVERTEXATTRIB2SVPROC,
5276	vertexattrib3d: PFNGLVERTEXATTRIB3DPROC,
5277	vertexattrib3dv: PFNGLVERTEXATTRIB3DVPROC,
5278	vertexattrib3f: PFNGLVERTEXATTRIB3FPROC,
5279	vertexattrib3fv: PFNGLVERTEXATTRIB3FVPROC,
5280	vertexattrib3s: PFNGLVERTEXATTRIB3SPROC,
5281	vertexattrib3sv: PFNGLVERTEXATTRIB3SVPROC,
5282	vertexattrib4nbv: PFNGLVERTEXATTRIB4NBVPROC,
5283	vertexattrib4niv: PFNGLVERTEXATTRIB4NIVPROC,
5284	vertexattrib4nsv: PFNGLVERTEXATTRIB4NSVPROC,
5285	vertexattrib4nub: PFNGLVERTEXATTRIB4NUBPROC,
5286	vertexattrib4nubv: PFNGLVERTEXATTRIB4NUBVPROC,
5287	vertexattrib4nuiv: PFNGLVERTEXATTRIB4NUIVPROC,
5288	vertexattrib4nusv: PFNGLVERTEXATTRIB4NUSVPROC,
5289	vertexattrib4bv: PFNGLVERTEXATTRIB4BVPROC,
5290	vertexattrib4d: PFNGLVERTEXATTRIB4DPROC,
5291	vertexattrib4dv: PFNGLVERTEXATTRIB4DVPROC,
5292	vertexattrib4f: PFNGLVERTEXATTRIB4FPROC,
5293	vertexattrib4fv: PFNGLVERTEXATTRIB4FVPROC,
5294	vertexattrib4iv: PFNGLVERTEXATTRIB4IVPROC,
5295	vertexattrib4s: PFNGLVERTEXATTRIB4SPROC,
5296	vertexattrib4sv: PFNGLVERTEXATTRIB4SVPROC,
5297	vertexattrib4ubv: PFNGLVERTEXATTRIB4UBVPROC,
5298	vertexattrib4uiv: PFNGLVERTEXATTRIB4UIVPROC,
5299	vertexattrib4usv: PFNGLVERTEXATTRIB4USVPROC,
5300	vertexattribpointer: PFNGLVERTEXATTRIBPOINTERPROC,
5301}
5302
5303impl GL_2_0 for Version20 {
5304	#[inline(always)]
5305	fn glGetError(&self) -> GLenum {
5306		(self.geterror)()
5307	}
5308	#[inline(always)]
5309	fn glBlendEquationSeparate(&self, modeRGB: GLenum, modeAlpha: GLenum) -> Result<()> {
5310		let ret = process_catch("glBlendEquationSeparate", catch_unwind(||(self.blendequationseparate)(modeRGB, modeAlpha)));
5311		#[cfg(feature = "diagnose")]
5312		if let Ok(ret) = ret {
5313			return to_result("glBlendEquationSeparate", ret, self.glGetError());
5314		} else {
5315			return ret
5316		}
5317		#[cfg(not(feature = "diagnose"))]
5318		return ret;
5319	}
5320	#[inline(always)]
5321	fn glDrawBuffers(&self, n: GLsizei, bufs: *const GLenum) -> Result<()> {
5322		let ret = process_catch("glDrawBuffers", catch_unwind(||(self.drawbuffers)(n, bufs)));
5323		#[cfg(feature = "diagnose")]
5324		if let Ok(ret) = ret {
5325			return to_result("glDrawBuffers", ret, self.glGetError());
5326		} else {
5327			return ret
5328		}
5329		#[cfg(not(feature = "diagnose"))]
5330		return ret;
5331	}
5332	#[inline(always)]
5333	fn glStencilOpSeparate(&self, face: GLenum, sfail: GLenum, dpfail: GLenum, dppass: GLenum) -> Result<()> {
5334		let ret = process_catch("glStencilOpSeparate", catch_unwind(||(self.stencilopseparate)(face, sfail, dpfail, dppass)));
5335		#[cfg(feature = "diagnose")]
5336		if let Ok(ret) = ret {
5337			return to_result("glStencilOpSeparate", ret, self.glGetError());
5338		} else {
5339			return ret
5340		}
5341		#[cfg(not(feature = "diagnose"))]
5342		return ret;
5343	}
5344	#[inline(always)]
5345	fn glStencilFuncSeparate(&self, face: GLenum, func: GLenum, ref_: GLint, mask: GLuint) -> Result<()> {
5346		let ret = process_catch("glStencilFuncSeparate", catch_unwind(||(self.stencilfuncseparate)(face, func, ref_, mask)));
5347		#[cfg(feature = "diagnose")]
5348		if let Ok(ret) = ret {
5349			return to_result("glStencilFuncSeparate", ret, self.glGetError());
5350		} else {
5351			return ret
5352		}
5353		#[cfg(not(feature = "diagnose"))]
5354		return ret;
5355	}
5356	#[inline(always)]
5357	fn glStencilMaskSeparate(&self, face: GLenum, mask: GLuint) -> Result<()> {
5358		let ret = process_catch("glStencilMaskSeparate", catch_unwind(||(self.stencilmaskseparate)(face, mask)));
5359		#[cfg(feature = "diagnose")]
5360		if let Ok(ret) = ret {
5361			return to_result("glStencilMaskSeparate", ret, self.glGetError());
5362		} else {
5363			return ret
5364		}
5365		#[cfg(not(feature = "diagnose"))]
5366		return ret;
5367	}
5368	#[inline(always)]
5369	fn glAttachShader(&self, program: GLuint, shader: GLuint) -> Result<()> {
5370		let ret = process_catch("glAttachShader", catch_unwind(||(self.attachshader)(program, shader)));
5371		#[cfg(feature = "diagnose")]
5372		if let Ok(ret) = ret {
5373			return to_result("glAttachShader", ret, self.glGetError());
5374		} else {
5375			return ret
5376		}
5377		#[cfg(not(feature = "diagnose"))]
5378		return ret;
5379	}
5380	#[inline(always)]
5381	fn glBindAttribLocation(&self, program: GLuint, index: GLuint, name: *const GLchar) -> Result<()> {
5382		let ret = process_catch("glBindAttribLocation", catch_unwind(||(self.bindattriblocation)(program, index, name)));
5383		#[cfg(feature = "diagnose")]
5384		if let Ok(ret) = ret {
5385			return to_result("glBindAttribLocation", ret, self.glGetError());
5386		} else {
5387			return ret
5388		}
5389		#[cfg(not(feature = "diagnose"))]
5390		return ret;
5391	}
5392	#[inline(always)]
5393	fn glCompileShader(&self, shader: GLuint) -> Result<()> {
5394		let ret = process_catch("glCompileShader", catch_unwind(||(self.compileshader)(shader)));
5395		#[cfg(feature = "diagnose")]
5396		if let Ok(ret) = ret {
5397			return to_result("glCompileShader", ret, self.glGetError());
5398		} else {
5399			return ret
5400		}
5401		#[cfg(not(feature = "diagnose"))]
5402		return ret;
5403	}
5404	#[inline(always)]
5405	fn glCreateProgram(&self) -> Result<GLuint> {
5406		let ret = process_catch("glCreateProgram", catch_unwind(||(self.createprogram)()));
5407		#[cfg(feature = "diagnose")]
5408		if let Ok(ret) = ret {
5409			return to_result("glCreateProgram", ret, self.glGetError());
5410		} else {
5411			return ret
5412		}
5413		#[cfg(not(feature = "diagnose"))]
5414		return ret;
5415	}
5416	#[inline(always)]
5417	fn glCreateShader(&self, type_: GLenum) -> Result<GLuint> {
5418		let ret = process_catch("glCreateShader", catch_unwind(||(self.createshader)(type_)));
5419		#[cfg(feature = "diagnose")]
5420		if let Ok(ret) = ret {
5421			return to_result("glCreateShader", ret, self.glGetError());
5422		} else {
5423			return ret
5424		}
5425		#[cfg(not(feature = "diagnose"))]
5426		return ret;
5427	}
5428	#[inline(always)]
5429	fn glDeleteProgram(&self, program: GLuint) -> Result<()> {
5430		let ret = process_catch("glDeleteProgram", catch_unwind(||(self.deleteprogram)(program)));
5431		#[cfg(feature = "diagnose")]
5432		if let Ok(ret) = ret {
5433			return to_result("glDeleteProgram", ret, self.glGetError());
5434		} else {
5435			return ret
5436		}
5437		#[cfg(not(feature = "diagnose"))]
5438		return ret;
5439	}
5440	#[inline(always)]
5441	fn glDeleteShader(&self, shader: GLuint) -> Result<()> {
5442		let ret = process_catch("glDeleteShader", catch_unwind(||(self.deleteshader)(shader)));
5443		#[cfg(feature = "diagnose")]
5444		if let Ok(ret) = ret {
5445			return to_result("glDeleteShader", ret, self.glGetError());
5446		} else {
5447			return ret
5448		}
5449		#[cfg(not(feature = "diagnose"))]
5450		return ret;
5451	}
5452	#[inline(always)]
5453	fn glDetachShader(&self, program: GLuint, shader: GLuint) -> Result<()> {
5454		let ret = process_catch("glDetachShader", catch_unwind(||(self.detachshader)(program, shader)));
5455		#[cfg(feature = "diagnose")]
5456		if let Ok(ret) = ret {
5457			return to_result("glDetachShader", ret, self.glGetError());
5458		} else {
5459			return ret
5460		}
5461		#[cfg(not(feature = "diagnose"))]
5462		return ret;
5463	}
5464	#[inline(always)]
5465	fn glDisableVertexAttribArray(&self, index: GLuint) -> Result<()> {
5466		let ret = process_catch("glDisableVertexAttribArray", catch_unwind(||(self.disablevertexattribarray)(index)));
5467		#[cfg(feature = "diagnose")]
5468		if let Ok(ret) = ret {
5469			return to_result("glDisableVertexAttribArray", ret, self.glGetError());
5470		} else {
5471			return ret
5472		}
5473		#[cfg(not(feature = "diagnose"))]
5474		return ret;
5475	}
5476	#[inline(always)]
5477	fn glEnableVertexAttribArray(&self, index: GLuint) -> Result<()> {
5478		let ret = process_catch("glEnableVertexAttribArray", catch_unwind(||(self.enablevertexattribarray)(index)));
5479		#[cfg(feature = "diagnose")]
5480		if let Ok(ret) = ret {
5481			return to_result("glEnableVertexAttribArray", ret, self.glGetError());
5482		} else {
5483			return ret
5484		}
5485		#[cfg(not(feature = "diagnose"))]
5486		return ret;
5487	}
5488	#[inline(always)]
5489	fn glGetActiveAttrib(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLint, type_: *mut GLenum, name: *mut GLchar) -> Result<()> {
5490		let ret = process_catch("glGetActiveAttrib", catch_unwind(||(self.getactiveattrib)(program, index, bufSize, length, size, type_, name)));
5491		#[cfg(feature = "diagnose")]
5492		if let Ok(ret) = ret {
5493			return to_result("glGetActiveAttrib", ret, self.glGetError());
5494		} else {
5495			return ret
5496		}
5497		#[cfg(not(feature = "diagnose"))]
5498		return ret;
5499	}
5500	#[inline(always)]
5501	fn glGetActiveUniform(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLint, type_: *mut GLenum, name: *mut GLchar) -> Result<()> {
5502		let ret = process_catch("glGetActiveUniform", catch_unwind(||(self.getactiveuniform)(program, index, bufSize, length, size, type_, name)));
5503		#[cfg(feature = "diagnose")]
5504		if let Ok(ret) = ret {
5505			return to_result("glGetActiveUniform", ret, self.glGetError());
5506		} else {
5507			return ret
5508		}
5509		#[cfg(not(feature = "diagnose"))]
5510		return ret;
5511	}
5512	#[inline(always)]
5513	fn glGetAttachedShaders(&self, program: GLuint, maxCount: GLsizei, count: *mut GLsizei, shaders: *mut GLuint) -> Result<()> {
5514		let ret = process_catch("glGetAttachedShaders", catch_unwind(||(self.getattachedshaders)(program, maxCount, count, shaders)));
5515		#[cfg(feature = "diagnose")]
5516		if let Ok(ret) = ret {
5517			return to_result("glGetAttachedShaders", ret, self.glGetError());
5518		} else {
5519			return ret
5520		}
5521		#[cfg(not(feature = "diagnose"))]
5522		return ret;
5523	}
5524	#[inline(always)]
5525	fn glGetAttribLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint> {
5526		let ret = process_catch("glGetAttribLocation", catch_unwind(||(self.getattriblocation)(program, name)));
5527		#[cfg(feature = "diagnose")]
5528		if let Ok(ret) = ret {
5529			return to_result("glGetAttribLocation", ret, self.glGetError());
5530		} else {
5531			return ret
5532		}
5533		#[cfg(not(feature = "diagnose"))]
5534		return ret;
5535	}
5536	#[inline(always)]
5537	fn glGetProgramiv(&self, program: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
5538		let ret = process_catch("glGetProgramiv", catch_unwind(||(self.getprogramiv)(program, pname, params)));
5539		#[cfg(feature = "diagnose")]
5540		if let Ok(ret) = ret {
5541			return to_result("glGetProgramiv", ret, self.glGetError());
5542		} else {
5543			return ret
5544		}
5545		#[cfg(not(feature = "diagnose"))]
5546		return ret;
5547	}
5548	#[inline(always)]
5549	fn glGetProgramInfoLog(&self, program: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()> {
5550		let ret = process_catch("glGetProgramInfoLog", catch_unwind(||(self.getprograminfolog)(program, bufSize, length, infoLog)));
5551		#[cfg(feature = "diagnose")]
5552		if let Ok(ret) = ret {
5553			return to_result("glGetProgramInfoLog", ret, self.glGetError());
5554		} else {
5555			return ret
5556		}
5557		#[cfg(not(feature = "diagnose"))]
5558		return ret;
5559	}
5560	#[inline(always)]
5561	fn glGetShaderiv(&self, shader: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
5562		let ret = process_catch("glGetShaderiv", catch_unwind(||(self.getshaderiv)(shader, pname, params)));
5563		#[cfg(feature = "diagnose")]
5564		if let Ok(ret) = ret {
5565			return to_result("glGetShaderiv", ret, self.glGetError());
5566		} else {
5567			return ret
5568		}
5569		#[cfg(not(feature = "diagnose"))]
5570		return ret;
5571	}
5572	#[inline(always)]
5573	fn glGetShaderInfoLog(&self, shader: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()> {
5574		let ret = process_catch("glGetShaderInfoLog", catch_unwind(||(self.getshaderinfolog)(shader, bufSize, length, infoLog)));
5575		#[cfg(feature = "diagnose")]
5576		if let Ok(ret) = ret {
5577			return to_result("glGetShaderInfoLog", ret, self.glGetError());
5578		} else {
5579			return ret
5580		}
5581		#[cfg(not(feature = "diagnose"))]
5582		return ret;
5583	}
5584	#[inline(always)]
5585	fn glGetShaderSource(&self, shader: GLuint, bufSize: GLsizei, length: *mut GLsizei, source: *mut GLchar) -> Result<()> {
5586		let ret = process_catch("glGetShaderSource", catch_unwind(||(self.getshadersource)(shader, bufSize, length, source)));
5587		#[cfg(feature = "diagnose")]
5588		if let Ok(ret) = ret {
5589			return to_result("glGetShaderSource", ret, self.glGetError());
5590		} else {
5591			return ret
5592		}
5593		#[cfg(not(feature = "diagnose"))]
5594		return ret;
5595	}
5596	#[inline(always)]
5597	fn glGetUniformLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint> {
5598		let ret = process_catch("glGetUniformLocation", catch_unwind(||(self.getuniformlocation)(program, name)));
5599		#[cfg(feature = "diagnose")]
5600		if let Ok(ret) = ret {
5601			return to_result("glGetUniformLocation", ret, self.glGetError());
5602		} else {
5603			return ret
5604		}
5605		#[cfg(not(feature = "diagnose"))]
5606		return ret;
5607	}
5608	#[inline(always)]
5609	fn glGetUniformfv(&self, program: GLuint, location: GLint, params: *mut GLfloat) -> Result<()> {
5610		let ret = process_catch("glGetUniformfv", catch_unwind(||(self.getuniformfv)(program, location, params)));
5611		#[cfg(feature = "diagnose")]
5612		if let Ok(ret) = ret {
5613			return to_result("glGetUniformfv", ret, self.glGetError());
5614		} else {
5615			return ret
5616		}
5617		#[cfg(not(feature = "diagnose"))]
5618		return ret;
5619	}
5620	#[inline(always)]
5621	fn glGetUniformiv(&self, program: GLuint, location: GLint, params: *mut GLint) -> Result<()> {
5622		let ret = process_catch("glGetUniformiv", catch_unwind(||(self.getuniformiv)(program, location, params)));
5623		#[cfg(feature = "diagnose")]
5624		if let Ok(ret) = ret {
5625			return to_result("glGetUniformiv", ret, self.glGetError());
5626		} else {
5627			return ret
5628		}
5629		#[cfg(not(feature = "diagnose"))]
5630		return ret;
5631	}
5632	#[inline(always)]
5633	fn glGetVertexAttribdv(&self, index: GLuint, pname: GLenum, params: *mut GLdouble) -> Result<()> {
5634		let ret = process_catch("glGetVertexAttribdv", catch_unwind(||(self.getvertexattribdv)(index, pname, params)));
5635		#[cfg(feature = "diagnose")]
5636		if let Ok(ret) = ret {
5637			return to_result("glGetVertexAttribdv", ret, self.glGetError());
5638		} else {
5639			return ret
5640		}
5641		#[cfg(not(feature = "diagnose"))]
5642		return ret;
5643	}
5644	#[inline(always)]
5645	fn glGetVertexAttribfv(&self, index: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
5646		let ret = process_catch("glGetVertexAttribfv", catch_unwind(||(self.getvertexattribfv)(index, pname, params)));
5647		#[cfg(feature = "diagnose")]
5648		if let Ok(ret) = ret {
5649			return to_result("glGetVertexAttribfv", ret, self.glGetError());
5650		} else {
5651			return ret
5652		}
5653		#[cfg(not(feature = "diagnose"))]
5654		return ret;
5655	}
5656	#[inline(always)]
5657	fn glGetVertexAttribiv(&self, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
5658		let ret = process_catch("glGetVertexAttribiv", catch_unwind(||(self.getvertexattribiv)(index, pname, params)));
5659		#[cfg(feature = "diagnose")]
5660		if let Ok(ret) = ret {
5661			return to_result("glGetVertexAttribiv", ret, self.glGetError());
5662		} else {
5663			return ret
5664		}
5665		#[cfg(not(feature = "diagnose"))]
5666		return ret;
5667	}
5668	#[inline(always)]
5669	fn glGetVertexAttribPointerv(&self, index: GLuint, pname: GLenum, pointer: *mut *mut c_void) -> Result<()> {
5670		let ret = process_catch("glGetVertexAttribPointerv", catch_unwind(||(self.getvertexattribpointerv)(index, pname, pointer)));
5671		#[cfg(feature = "diagnose")]
5672		if let Ok(ret) = ret {
5673			return to_result("glGetVertexAttribPointerv", ret, self.glGetError());
5674		} else {
5675			return ret
5676		}
5677		#[cfg(not(feature = "diagnose"))]
5678		return ret;
5679	}
5680	#[inline(always)]
5681	fn glIsProgram(&self, program: GLuint) -> Result<GLboolean> {
5682		let ret = process_catch("glIsProgram", catch_unwind(||(self.isprogram)(program)));
5683		#[cfg(feature = "diagnose")]
5684		if let Ok(ret) = ret {
5685			return to_result("glIsProgram", ret, self.glGetError());
5686		} else {
5687			return ret
5688		}
5689		#[cfg(not(feature = "diagnose"))]
5690		return ret;
5691	}
5692	#[inline(always)]
5693	fn glIsShader(&self, shader: GLuint) -> Result<GLboolean> {
5694		let ret = process_catch("glIsShader", catch_unwind(||(self.isshader)(shader)));
5695		#[cfg(feature = "diagnose")]
5696		if let Ok(ret) = ret {
5697			return to_result("glIsShader", ret, self.glGetError());
5698		} else {
5699			return ret
5700		}
5701		#[cfg(not(feature = "diagnose"))]
5702		return ret;
5703	}
5704	#[inline(always)]
5705	fn glLinkProgram(&self, program: GLuint) -> Result<()> {
5706		let ret = process_catch("glLinkProgram", catch_unwind(||(self.linkprogram)(program)));
5707		#[cfg(feature = "diagnose")]
5708		if let Ok(ret) = ret {
5709			return to_result("glLinkProgram", ret, self.glGetError());
5710		} else {
5711			return ret
5712		}
5713		#[cfg(not(feature = "diagnose"))]
5714		return ret;
5715	}
5716	#[inline(always)]
5717	fn glShaderSource(&self, shader: GLuint, count: GLsizei, string_: *const *const GLchar, length: *const GLint) -> Result<()> {
5718		let ret = process_catch("glShaderSource", catch_unwind(||(self.shadersource)(shader, count, string_, length)));
5719		#[cfg(feature = "diagnose")]
5720		if let Ok(ret) = ret {
5721			return to_result("glShaderSource", ret, self.glGetError());
5722		} else {
5723			return ret
5724		}
5725		#[cfg(not(feature = "diagnose"))]
5726		return ret;
5727	}
5728	#[inline(always)]
5729	fn glUseProgram(&self, program: GLuint) -> Result<()> {
5730		let ret = process_catch("glUseProgram", catch_unwind(||(self.useprogram)(program)));
5731		#[cfg(feature = "diagnose")]
5732		if let Ok(ret) = ret {
5733			return to_result("glUseProgram", ret, self.glGetError());
5734		} else {
5735			return ret
5736		}
5737		#[cfg(not(feature = "diagnose"))]
5738		return ret;
5739	}
5740	#[inline(always)]
5741	fn glUniform1f(&self, location: GLint, v0: GLfloat) -> Result<()> {
5742		let ret = process_catch("glUniform1f", catch_unwind(||(self.uniform1f)(location, v0)));
5743		#[cfg(feature = "diagnose")]
5744		if let Ok(ret) = ret {
5745			return to_result("glUniform1f", ret, self.glGetError());
5746		} else {
5747			return ret
5748		}
5749		#[cfg(not(feature = "diagnose"))]
5750		return ret;
5751	}
5752	#[inline(always)]
5753	fn glUniform2f(&self, location: GLint, v0: GLfloat, v1: GLfloat) -> Result<()> {
5754		let ret = process_catch("glUniform2f", catch_unwind(||(self.uniform2f)(location, v0, v1)));
5755		#[cfg(feature = "diagnose")]
5756		if let Ok(ret) = ret {
5757			return to_result("glUniform2f", ret, self.glGetError());
5758		} else {
5759			return ret
5760		}
5761		#[cfg(not(feature = "diagnose"))]
5762		return ret;
5763	}
5764	#[inline(always)]
5765	fn glUniform3f(&self, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat) -> Result<()> {
5766		let ret = process_catch("glUniform3f", catch_unwind(||(self.uniform3f)(location, v0, v1, v2)));
5767		#[cfg(feature = "diagnose")]
5768		if let Ok(ret) = ret {
5769			return to_result("glUniform3f", ret, self.glGetError());
5770		} else {
5771			return ret
5772		}
5773		#[cfg(not(feature = "diagnose"))]
5774		return ret;
5775	}
5776	#[inline(always)]
5777	fn glUniform4f(&self, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat) -> Result<()> {
5778		let ret = process_catch("glUniform4f", catch_unwind(||(self.uniform4f)(location, v0, v1, v2, v3)));
5779		#[cfg(feature = "diagnose")]
5780		if let Ok(ret) = ret {
5781			return to_result("glUniform4f", ret, self.glGetError());
5782		} else {
5783			return ret
5784		}
5785		#[cfg(not(feature = "diagnose"))]
5786		return ret;
5787	}
5788	#[inline(always)]
5789	fn glUniform1i(&self, location: GLint, v0: GLint) -> Result<()> {
5790		let ret = process_catch("glUniform1i", catch_unwind(||(self.uniform1i)(location, v0)));
5791		#[cfg(feature = "diagnose")]
5792		if let Ok(ret) = ret {
5793			return to_result("glUniform1i", ret, self.glGetError());
5794		} else {
5795			return ret
5796		}
5797		#[cfg(not(feature = "diagnose"))]
5798		return ret;
5799	}
5800	#[inline(always)]
5801	fn glUniform2i(&self, location: GLint, v0: GLint, v1: GLint) -> Result<()> {
5802		let ret = process_catch("glUniform2i", catch_unwind(||(self.uniform2i)(location, v0, v1)));
5803		#[cfg(feature = "diagnose")]
5804		if let Ok(ret) = ret {
5805			return to_result("glUniform2i", ret, self.glGetError());
5806		} else {
5807			return ret
5808		}
5809		#[cfg(not(feature = "diagnose"))]
5810		return ret;
5811	}
5812	#[inline(always)]
5813	fn glUniform3i(&self, location: GLint, v0: GLint, v1: GLint, v2: GLint) -> Result<()> {
5814		let ret = process_catch("glUniform3i", catch_unwind(||(self.uniform3i)(location, v0, v1, v2)));
5815		#[cfg(feature = "diagnose")]
5816		if let Ok(ret) = ret {
5817			return to_result("glUniform3i", ret, self.glGetError());
5818		} else {
5819			return ret
5820		}
5821		#[cfg(not(feature = "diagnose"))]
5822		return ret;
5823	}
5824	#[inline(always)]
5825	fn glUniform4i(&self, location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint) -> Result<()> {
5826		let ret = process_catch("glUniform4i", catch_unwind(||(self.uniform4i)(location, v0, v1, v2, v3)));
5827		#[cfg(feature = "diagnose")]
5828		if let Ok(ret) = ret {
5829			return to_result("glUniform4i", ret, self.glGetError());
5830		} else {
5831			return ret
5832		}
5833		#[cfg(not(feature = "diagnose"))]
5834		return ret;
5835	}
5836	#[inline(always)]
5837	fn glUniform1fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
5838		let ret = process_catch("glUniform1fv", catch_unwind(||(self.uniform1fv)(location, count, value)));
5839		#[cfg(feature = "diagnose")]
5840		if let Ok(ret) = ret {
5841			return to_result("glUniform1fv", ret, self.glGetError());
5842		} else {
5843			return ret
5844		}
5845		#[cfg(not(feature = "diagnose"))]
5846		return ret;
5847	}
5848	#[inline(always)]
5849	fn glUniform2fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
5850		let ret = process_catch("glUniform2fv", catch_unwind(||(self.uniform2fv)(location, count, value)));
5851		#[cfg(feature = "diagnose")]
5852		if let Ok(ret) = ret {
5853			return to_result("glUniform2fv", ret, self.glGetError());
5854		} else {
5855			return ret
5856		}
5857		#[cfg(not(feature = "diagnose"))]
5858		return ret;
5859	}
5860	#[inline(always)]
5861	fn glUniform3fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
5862		let ret = process_catch("glUniform3fv", catch_unwind(||(self.uniform3fv)(location, count, value)));
5863		#[cfg(feature = "diagnose")]
5864		if let Ok(ret) = ret {
5865			return to_result("glUniform3fv", ret, self.glGetError());
5866		} else {
5867			return ret
5868		}
5869		#[cfg(not(feature = "diagnose"))]
5870		return ret;
5871	}
5872	#[inline(always)]
5873	fn glUniform4fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
5874		let ret = process_catch("glUniform4fv", catch_unwind(||(self.uniform4fv)(location, count, value)));
5875		#[cfg(feature = "diagnose")]
5876		if let Ok(ret) = ret {
5877			return to_result("glUniform4fv", ret, self.glGetError());
5878		} else {
5879			return ret
5880		}
5881		#[cfg(not(feature = "diagnose"))]
5882		return ret;
5883	}
5884	#[inline(always)]
5885	fn glUniform1iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
5886		let ret = process_catch("glUniform1iv", catch_unwind(||(self.uniform1iv)(location, count, value)));
5887		#[cfg(feature = "diagnose")]
5888		if let Ok(ret) = ret {
5889			return to_result("glUniform1iv", ret, self.glGetError());
5890		} else {
5891			return ret
5892		}
5893		#[cfg(not(feature = "diagnose"))]
5894		return ret;
5895	}
5896	#[inline(always)]
5897	fn glUniform2iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
5898		let ret = process_catch("glUniform2iv", catch_unwind(||(self.uniform2iv)(location, count, value)));
5899		#[cfg(feature = "diagnose")]
5900		if let Ok(ret) = ret {
5901			return to_result("glUniform2iv", ret, self.glGetError());
5902		} else {
5903			return ret
5904		}
5905		#[cfg(not(feature = "diagnose"))]
5906		return ret;
5907	}
5908	#[inline(always)]
5909	fn glUniform3iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
5910		let ret = process_catch("glUniform3iv", catch_unwind(||(self.uniform3iv)(location, count, value)));
5911		#[cfg(feature = "diagnose")]
5912		if let Ok(ret) = ret {
5913			return to_result("glUniform3iv", ret, self.glGetError());
5914		} else {
5915			return ret
5916		}
5917		#[cfg(not(feature = "diagnose"))]
5918		return ret;
5919	}
5920	#[inline(always)]
5921	fn glUniform4iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
5922		let ret = process_catch("glUniform4iv", catch_unwind(||(self.uniform4iv)(location, count, value)));
5923		#[cfg(feature = "diagnose")]
5924		if let Ok(ret) = ret {
5925			return to_result("glUniform4iv", ret, self.glGetError());
5926		} else {
5927			return ret
5928		}
5929		#[cfg(not(feature = "diagnose"))]
5930		return ret;
5931	}
5932	#[inline(always)]
5933	fn glUniformMatrix2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
5934		let ret = process_catch("glUniformMatrix2fv", catch_unwind(||(self.uniformmatrix2fv)(location, count, transpose, value)));
5935		#[cfg(feature = "diagnose")]
5936		if let Ok(ret) = ret {
5937			return to_result("glUniformMatrix2fv", ret, self.glGetError());
5938		} else {
5939			return ret
5940		}
5941		#[cfg(not(feature = "diagnose"))]
5942		return ret;
5943	}
5944	#[inline(always)]
5945	fn glUniformMatrix3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
5946		let ret = process_catch("glUniformMatrix3fv", catch_unwind(||(self.uniformmatrix3fv)(location, count, transpose, value)));
5947		#[cfg(feature = "diagnose")]
5948		if let Ok(ret) = ret {
5949			return to_result("glUniformMatrix3fv", ret, self.glGetError());
5950		} else {
5951			return ret
5952		}
5953		#[cfg(not(feature = "diagnose"))]
5954		return ret;
5955	}
5956	#[inline(always)]
5957	fn glUniformMatrix4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
5958		let ret = process_catch("glUniformMatrix4fv", catch_unwind(||(self.uniformmatrix4fv)(location, count, transpose, value)));
5959		#[cfg(feature = "diagnose")]
5960		if let Ok(ret) = ret {
5961			return to_result("glUniformMatrix4fv", ret, self.glGetError());
5962		} else {
5963			return ret
5964		}
5965		#[cfg(not(feature = "diagnose"))]
5966		return ret;
5967	}
5968	#[inline(always)]
5969	fn glValidateProgram(&self, program: GLuint) -> Result<()> {
5970		let ret = process_catch("glValidateProgram", catch_unwind(||(self.validateprogram)(program)));
5971		#[cfg(feature = "diagnose")]
5972		if let Ok(ret) = ret {
5973			return to_result("glValidateProgram", ret, self.glGetError());
5974		} else {
5975			return ret
5976		}
5977		#[cfg(not(feature = "diagnose"))]
5978		return ret;
5979	}
5980	#[inline(always)]
5981	fn glVertexAttrib1d(&self, index: GLuint, x: GLdouble) -> Result<()> {
5982		let ret = process_catch("glVertexAttrib1d", catch_unwind(||(self.vertexattrib1d)(index, x)));
5983		#[cfg(feature = "diagnose")]
5984		if let Ok(ret) = ret {
5985			return to_result("glVertexAttrib1d", ret, self.glGetError());
5986		} else {
5987			return ret
5988		}
5989		#[cfg(not(feature = "diagnose"))]
5990		return ret;
5991	}
5992	#[inline(always)]
5993	fn glVertexAttrib1dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
5994		let ret = process_catch("glVertexAttrib1dv", catch_unwind(||(self.vertexattrib1dv)(index, v)));
5995		#[cfg(feature = "diagnose")]
5996		if let Ok(ret) = ret {
5997			return to_result("glVertexAttrib1dv", ret, self.glGetError());
5998		} else {
5999			return ret
6000		}
6001		#[cfg(not(feature = "diagnose"))]
6002		return ret;
6003	}
6004	#[inline(always)]
6005	fn glVertexAttrib1f(&self, index: GLuint, x: GLfloat) -> Result<()> {
6006		let ret = process_catch("glVertexAttrib1f", catch_unwind(||(self.vertexattrib1f)(index, x)));
6007		#[cfg(feature = "diagnose")]
6008		if let Ok(ret) = ret {
6009			return to_result("glVertexAttrib1f", ret, self.glGetError());
6010		} else {
6011			return ret
6012		}
6013		#[cfg(not(feature = "diagnose"))]
6014		return ret;
6015	}
6016	#[inline(always)]
6017	fn glVertexAttrib1fv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
6018		let ret = process_catch("glVertexAttrib1fv", catch_unwind(||(self.vertexattrib1fv)(index, v)));
6019		#[cfg(feature = "diagnose")]
6020		if let Ok(ret) = ret {
6021			return to_result("glVertexAttrib1fv", ret, self.glGetError());
6022		} else {
6023			return ret
6024		}
6025		#[cfg(not(feature = "diagnose"))]
6026		return ret;
6027	}
6028	#[inline(always)]
6029	fn glVertexAttrib1s(&self, index: GLuint, x: GLshort) -> Result<()> {
6030		let ret = process_catch("glVertexAttrib1s", catch_unwind(||(self.vertexattrib1s)(index, x)));
6031		#[cfg(feature = "diagnose")]
6032		if let Ok(ret) = ret {
6033			return to_result("glVertexAttrib1s", ret, self.glGetError());
6034		} else {
6035			return ret
6036		}
6037		#[cfg(not(feature = "diagnose"))]
6038		return ret;
6039	}
6040	#[inline(always)]
6041	fn glVertexAttrib1sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
6042		let ret = process_catch("glVertexAttrib1sv", catch_unwind(||(self.vertexattrib1sv)(index, v)));
6043		#[cfg(feature = "diagnose")]
6044		if let Ok(ret) = ret {
6045			return to_result("glVertexAttrib1sv", ret, self.glGetError());
6046		} else {
6047			return ret
6048		}
6049		#[cfg(not(feature = "diagnose"))]
6050		return ret;
6051	}
6052	#[inline(always)]
6053	fn glVertexAttrib2d(&self, index: GLuint, x: GLdouble, y: GLdouble) -> Result<()> {
6054		let ret = process_catch("glVertexAttrib2d", catch_unwind(||(self.vertexattrib2d)(index, x, y)));
6055		#[cfg(feature = "diagnose")]
6056		if let Ok(ret) = ret {
6057			return to_result("glVertexAttrib2d", ret, self.glGetError());
6058		} else {
6059			return ret
6060		}
6061		#[cfg(not(feature = "diagnose"))]
6062		return ret;
6063	}
6064	#[inline(always)]
6065	fn glVertexAttrib2dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
6066		let ret = process_catch("glVertexAttrib2dv", catch_unwind(||(self.vertexattrib2dv)(index, v)));
6067		#[cfg(feature = "diagnose")]
6068		if let Ok(ret) = ret {
6069			return to_result("glVertexAttrib2dv", ret, self.glGetError());
6070		} else {
6071			return ret
6072		}
6073		#[cfg(not(feature = "diagnose"))]
6074		return ret;
6075	}
6076	#[inline(always)]
6077	fn glVertexAttrib2f(&self, index: GLuint, x: GLfloat, y: GLfloat) -> Result<()> {
6078		let ret = process_catch("glVertexAttrib2f", catch_unwind(||(self.vertexattrib2f)(index, x, y)));
6079		#[cfg(feature = "diagnose")]
6080		if let Ok(ret) = ret {
6081			return to_result("glVertexAttrib2f", ret, self.glGetError());
6082		} else {
6083			return ret
6084		}
6085		#[cfg(not(feature = "diagnose"))]
6086		return ret;
6087	}
6088	#[inline(always)]
6089	fn glVertexAttrib2fv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
6090		let ret = process_catch("glVertexAttrib2fv", catch_unwind(||(self.vertexattrib2fv)(index, v)));
6091		#[cfg(feature = "diagnose")]
6092		if let Ok(ret) = ret {
6093			return to_result("glVertexAttrib2fv", ret, self.glGetError());
6094		} else {
6095			return ret
6096		}
6097		#[cfg(not(feature = "diagnose"))]
6098		return ret;
6099	}
6100	#[inline(always)]
6101	fn glVertexAttrib2s(&self, index: GLuint, x: GLshort, y: GLshort) -> Result<()> {
6102		let ret = process_catch("glVertexAttrib2s", catch_unwind(||(self.vertexattrib2s)(index, x, y)));
6103		#[cfg(feature = "diagnose")]
6104		if let Ok(ret) = ret {
6105			return to_result("glVertexAttrib2s", ret, self.glGetError());
6106		} else {
6107			return ret
6108		}
6109		#[cfg(not(feature = "diagnose"))]
6110		return ret;
6111	}
6112	#[inline(always)]
6113	fn glVertexAttrib2sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
6114		let ret = process_catch("glVertexAttrib2sv", catch_unwind(||(self.vertexattrib2sv)(index, v)));
6115		#[cfg(feature = "diagnose")]
6116		if let Ok(ret) = ret {
6117			return to_result("glVertexAttrib2sv", ret, self.glGetError());
6118		} else {
6119			return ret
6120		}
6121		#[cfg(not(feature = "diagnose"))]
6122		return ret;
6123	}
6124	#[inline(always)]
6125	fn glVertexAttrib3d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()> {
6126		let ret = process_catch("glVertexAttrib3d", catch_unwind(||(self.vertexattrib3d)(index, x, y, z)));
6127		#[cfg(feature = "diagnose")]
6128		if let Ok(ret) = ret {
6129			return to_result("glVertexAttrib3d", ret, self.glGetError());
6130		} else {
6131			return ret
6132		}
6133		#[cfg(not(feature = "diagnose"))]
6134		return ret;
6135	}
6136	#[inline(always)]
6137	fn glVertexAttrib3dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
6138		let ret = process_catch("glVertexAttrib3dv", catch_unwind(||(self.vertexattrib3dv)(index, v)));
6139		#[cfg(feature = "diagnose")]
6140		if let Ok(ret) = ret {
6141			return to_result("glVertexAttrib3dv", ret, self.glGetError());
6142		} else {
6143			return ret
6144		}
6145		#[cfg(not(feature = "diagnose"))]
6146		return ret;
6147	}
6148	#[inline(always)]
6149	fn glVertexAttrib3f(&self, index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat) -> Result<()> {
6150		let ret = process_catch("glVertexAttrib3f", catch_unwind(||(self.vertexattrib3f)(index, x, y, z)));
6151		#[cfg(feature = "diagnose")]
6152		if let Ok(ret) = ret {
6153			return to_result("glVertexAttrib3f", ret, self.glGetError());
6154		} else {
6155			return ret
6156		}
6157		#[cfg(not(feature = "diagnose"))]
6158		return ret;
6159	}
6160	#[inline(always)]
6161	fn glVertexAttrib3fv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
6162		let ret = process_catch("glVertexAttrib3fv", catch_unwind(||(self.vertexattrib3fv)(index, v)));
6163		#[cfg(feature = "diagnose")]
6164		if let Ok(ret) = ret {
6165			return to_result("glVertexAttrib3fv", ret, self.glGetError());
6166		} else {
6167			return ret
6168		}
6169		#[cfg(not(feature = "diagnose"))]
6170		return ret;
6171	}
6172	#[inline(always)]
6173	fn glVertexAttrib3s(&self, index: GLuint, x: GLshort, y: GLshort, z: GLshort) -> Result<()> {
6174		let ret = process_catch("glVertexAttrib3s", catch_unwind(||(self.vertexattrib3s)(index, x, y, z)));
6175		#[cfg(feature = "diagnose")]
6176		if let Ok(ret) = ret {
6177			return to_result("glVertexAttrib3s", ret, self.glGetError());
6178		} else {
6179			return ret
6180		}
6181		#[cfg(not(feature = "diagnose"))]
6182		return ret;
6183	}
6184	#[inline(always)]
6185	fn glVertexAttrib3sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
6186		let ret = process_catch("glVertexAttrib3sv", catch_unwind(||(self.vertexattrib3sv)(index, v)));
6187		#[cfg(feature = "diagnose")]
6188		if let Ok(ret) = ret {
6189			return to_result("glVertexAttrib3sv", ret, self.glGetError());
6190		} else {
6191			return ret
6192		}
6193		#[cfg(not(feature = "diagnose"))]
6194		return ret;
6195	}
6196	#[inline(always)]
6197	fn glVertexAttrib4Nbv(&self, index: GLuint, v: *const GLbyte) -> Result<()> {
6198		let ret = process_catch("glVertexAttrib4Nbv", catch_unwind(||(self.vertexattrib4nbv)(index, v)));
6199		#[cfg(feature = "diagnose")]
6200		if let Ok(ret) = ret {
6201			return to_result("glVertexAttrib4Nbv", ret, self.glGetError());
6202		} else {
6203			return ret
6204		}
6205		#[cfg(not(feature = "diagnose"))]
6206		return ret;
6207	}
6208	#[inline(always)]
6209	fn glVertexAttrib4Niv(&self, index: GLuint, v: *const GLint) -> Result<()> {
6210		let ret = process_catch("glVertexAttrib4Niv", catch_unwind(||(self.vertexattrib4niv)(index, v)));
6211		#[cfg(feature = "diagnose")]
6212		if let Ok(ret) = ret {
6213			return to_result("glVertexAttrib4Niv", ret, self.glGetError());
6214		} else {
6215			return ret
6216		}
6217		#[cfg(not(feature = "diagnose"))]
6218		return ret;
6219	}
6220	#[inline(always)]
6221	fn glVertexAttrib4Nsv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
6222		let ret = process_catch("glVertexAttrib4Nsv", catch_unwind(||(self.vertexattrib4nsv)(index, v)));
6223		#[cfg(feature = "diagnose")]
6224		if let Ok(ret) = ret {
6225			return to_result("glVertexAttrib4Nsv", ret, self.glGetError());
6226		} else {
6227			return ret
6228		}
6229		#[cfg(not(feature = "diagnose"))]
6230		return ret;
6231	}
6232	#[inline(always)]
6233	fn glVertexAttrib4Nub(&self, index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte) -> Result<()> {
6234		let ret = process_catch("glVertexAttrib4Nub", catch_unwind(||(self.vertexattrib4nub)(index, x, y, z, w)));
6235		#[cfg(feature = "diagnose")]
6236		if let Ok(ret) = ret {
6237			return to_result("glVertexAttrib4Nub", ret, self.glGetError());
6238		} else {
6239			return ret
6240		}
6241		#[cfg(not(feature = "diagnose"))]
6242		return ret;
6243	}
6244	#[inline(always)]
6245	fn glVertexAttrib4Nubv(&self, index: GLuint, v: *const GLubyte) -> Result<()> {
6246		let ret = process_catch("glVertexAttrib4Nubv", catch_unwind(||(self.vertexattrib4nubv)(index, v)));
6247		#[cfg(feature = "diagnose")]
6248		if let Ok(ret) = ret {
6249			return to_result("glVertexAttrib4Nubv", ret, self.glGetError());
6250		} else {
6251			return ret
6252		}
6253		#[cfg(not(feature = "diagnose"))]
6254		return ret;
6255	}
6256	#[inline(always)]
6257	fn glVertexAttrib4Nuiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
6258		let ret = process_catch("glVertexAttrib4Nuiv", catch_unwind(||(self.vertexattrib4nuiv)(index, v)));
6259		#[cfg(feature = "diagnose")]
6260		if let Ok(ret) = ret {
6261			return to_result("glVertexAttrib4Nuiv", ret, self.glGetError());
6262		} else {
6263			return ret
6264		}
6265		#[cfg(not(feature = "diagnose"))]
6266		return ret;
6267	}
6268	#[inline(always)]
6269	fn glVertexAttrib4Nusv(&self, index: GLuint, v: *const GLushort) -> Result<()> {
6270		let ret = process_catch("glVertexAttrib4Nusv", catch_unwind(||(self.vertexattrib4nusv)(index, v)));
6271		#[cfg(feature = "diagnose")]
6272		if let Ok(ret) = ret {
6273			return to_result("glVertexAttrib4Nusv", ret, self.glGetError());
6274		} else {
6275			return ret
6276		}
6277		#[cfg(not(feature = "diagnose"))]
6278		return ret;
6279	}
6280	#[inline(always)]
6281	fn glVertexAttrib4bv(&self, index: GLuint, v: *const GLbyte) -> Result<()> {
6282		let ret = process_catch("glVertexAttrib4bv", catch_unwind(||(self.vertexattrib4bv)(index, v)));
6283		#[cfg(feature = "diagnose")]
6284		if let Ok(ret) = ret {
6285			return to_result("glVertexAttrib4bv", ret, self.glGetError());
6286		} else {
6287			return ret
6288		}
6289		#[cfg(not(feature = "diagnose"))]
6290		return ret;
6291	}
6292	#[inline(always)]
6293	fn glVertexAttrib4d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()> {
6294		let ret = process_catch("glVertexAttrib4d", catch_unwind(||(self.vertexattrib4d)(index, x, y, z, w)));
6295		#[cfg(feature = "diagnose")]
6296		if let Ok(ret) = ret {
6297			return to_result("glVertexAttrib4d", ret, self.glGetError());
6298		} else {
6299			return ret
6300		}
6301		#[cfg(not(feature = "diagnose"))]
6302		return ret;
6303	}
6304	#[inline(always)]
6305	fn glVertexAttrib4dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
6306		let ret = process_catch("glVertexAttrib4dv", catch_unwind(||(self.vertexattrib4dv)(index, v)));
6307		#[cfg(feature = "diagnose")]
6308		if let Ok(ret) = ret {
6309			return to_result("glVertexAttrib4dv", ret, self.glGetError());
6310		} else {
6311			return ret
6312		}
6313		#[cfg(not(feature = "diagnose"))]
6314		return ret;
6315	}
6316	#[inline(always)]
6317	fn glVertexAttrib4f(&self, index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat) -> Result<()> {
6318		let ret = process_catch("glVertexAttrib4f", catch_unwind(||(self.vertexattrib4f)(index, x, y, z, w)));
6319		#[cfg(feature = "diagnose")]
6320		if let Ok(ret) = ret {
6321			return to_result("glVertexAttrib4f", ret, self.glGetError());
6322		} else {
6323			return ret
6324		}
6325		#[cfg(not(feature = "diagnose"))]
6326		return ret;
6327	}
6328	#[inline(always)]
6329	fn glVertexAttrib4fv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
6330		let ret = process_catch("glVertexAttrib4fv", catch_unwind(||(self.vertexattrib4fv)(index, v)));
6331		#[cfg(feature = "diagnose")]
6332		if let Ok(ret) = ret {
6333			return to_result("glVertexAttrib4fv", ret, self.glGetError());
6334		} else {
6335			return ret
6336		}
6337		#[cfg(not(feature = "diagnose"))]
6338		return ret;
6339	}
6340	#[inline(always)]
6341	fn glVertexAttrib4iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
6342		let ret = process_catch("glVertexAttrib4iv", catch_unwind(||(self.vertexattrib4iv)(index, v)));
6343		#[cfg(feature = "diagnose")]
6344		if let Ok(ret) = ret {
6345			return to_result("glVertexAttrib4iv", ret, self.glGetError());
6346		} else {
6347			return ret
6348		}
6349		#[cfg(not(feature = "diagnose"))]
6350		return ret;
6351	}
6352	#[inline(always)]
6353	fn glVertexAttrib4s(&self, index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort) -> Result<()> {
6354		let ret = process_catch("glVertexAttrib4s", catch_unwind(||(self.vertexattrib4s)(index, x, y, z, w)));
6355		#[cfg(feature = "diagnose")]
6356		if let Ok(ret) = ret {
6357			return to_result("glVertexAttrib4s", ret, self.glGetError());
6358		} else {
6359			return ret
6360		}
6361		#[cfg(not(feature = "diagnose"))]
6362		return ret;
6363	}
6364	#[inline(always)]
6365	fn glVertexAttrib4sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
6366		let ret = process_catch("glVertexAttrib4sv", catch_unwind(||(self.vertexattrib4sv)(index, v)));
6367		#[cfg(feature = "diagnose")]
6368		if let Ok(ret) = ret {
6369			return to_result("glVertexAttrib4sv", ret, self.glGetError());
6370		} else {
6371			return ret
6372		}
6373		#[cfg(not(feature = "diagnose"))]
6374		return ret;
6375	}
6376	#[inline(always)]
6377	fn glVertexAttrib4ubv(&self, index: GLuint, v: *const GLubyte) -> Result<()> {
6378		let ret = process_catch("glVertexAttrib4ubv", catch_unwind(||(self.vertexattrib4ubv)(index, v)));
6379		#[cfg(feature = "diagnose")]
6380		if let Ok(ret) = ret {
6381			return to_result("glVertexAttrib4ubv", ret, self.glGetError());
6382		} else {
6383			return ret
6384		}
6385		#[cfg(not(feature = "diagnose"))]
6386		return ret;
6387	}
6388	#[inline(always)]
6389	fn glVertexAttrib4uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
6390		let ret = process_catch("glVertexAttrib4uiv", catch_unwind(||(self.vertexattrib4uiv)(index, v)));
6391		#[cfg(feature = "diagnose")]
6392		if let Ok(ret) = ret {
6393			return to_result("glVertexAttrib4uiv", ret, self.glGetError());
6394		} else {
6395			return ret
6396		}
6397		#[cfg(not(feature = "diagnose"))]
6398		return ret;
6399	}
6400	#[inline(always)]
6401	fn glVertexAttrib4usv(&self, index: GLuint, v: *const GLushort) -> Result<()> {
6402		let ret = process_catch("glVertexAttrib4usv", catch_unwind(||(self.vertexattrib4usv)(index, v)));
6403		#[cfg(feature = "diagnose")]
6404		if let Ok(ret) = ret {
6405			return to_result("glVertexAttrib4usv", ret, self.glGetError());
6406		} else {
6407			return ret
6408		}
6409		#[cfg(not(feature = "diagnose"))]
6410		return ret;
6411	}
6412	#[inline(always)]
6413	fn glVertexAttribPointer(&self, index: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, stride: GLsizei, pointer: *const c_void) -> Result<()> {
6414		let ret = process_catch("glVertexAttribPointer", catch_unwind(||(self.vertexattribpointer)(index, size, type_, normalized, stride, pointer)));
6415		#[cfg(feature = "diagnose")]
6416		if let Ok(ret) = ret {
6417			return to_result("glVertexAttribPointer", ret, self.glGetError());
6418		} else {
6419			return ret
6420		}
6421		#[cfg(not(feature = "diagnose"))]
6422		return ret;
6423	}
6424	#[inline(always)]
6425	fn get_shading_language_version(&self) -> &'static str {
6426		self.shading_language_version
6427	}
6428}
6429
6430impl Version20 {
6431	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
6432		let (_spec, major, minor, release) = base.get_version();
6433		if (major, minor, release) < (2, 0, 0) {
6434			return Self::default();
6435		}
6436		Self {
6437			available: true,
6438			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
6439			blendequationseparate: {let proc = get_proc_address("glBlendEquationSeparate"); if proc == null() {dummy_pfnglblendequationseparateproc} else {unsafe{transmute(proc)}}},
6440			drawbuffers: {let proc = get_proc_address("glDrawBuffers"); if proc == null() {dummy_pfngldrawbuffersproc} else {unsafe{transmute(proc)}}},
6441			stencilopseparate: {let proc = get_proc_address("glStencilOpSeparate"); if proc == null() {dummy_pfnglstencilopseparateproc} else {unsafe{transmute(proc)}}},
6442			stencilfuncseparate: {let proc = get_proc_address("glStencilFuncSeparate"); if proc == null() {dummy_pfnglstencilfuncseparateproc} else {unsafe{transmute(proc)}}},
6443			stencilmaskseparate: {let proc = get_proc_address("glStencilMaskSeparate"); if proc == null() {dummy_pfnglstencilmaskseparateproc} else {unsafe{transmute(proc)}}},
6444			attachshader: {let proc = get_proc_address("glAttachShader"); if proc == null() {dummy_pfnglattachshaderproc} else {unsafe{transmute(proc)}}},
6445			bindattriblocation: {let proc = get_proc_address("glBindAttribLocation"); if proc == null() {dummy_pfnglbindattriblocationproc} else {unsafe{transmute(proc)}}},
6446			compileshader: {let proc = get_proc_address("glCompileShader"); if proc == null() {dummy_pfnglcompileshaderproc} else {unsafe{transmute(proc)}}},
6447			createprogram: {let proc = get_proc_address("glCreateProgram"); if proc == null() {dummy_pfnglcreateprogramproc} else {unsafe{transmute(proc)}}},
6448			createshader: {let proc = get_proc_address("glCreateShader"); if proc == null() {dummy_pfnglcreateshaderproc} else {unsafe{transmute(proc)}}},
6449			deleteprogram: {let proc = get_proc_address("glDeleteProgram"); if proc == null() {dummy_pfngldeleteprogramproc} else {unsafe{transmute(proc)}}},
6450			deleteshader: {let proc = get_proc_address("glDeleteShader"); if proc == null() {dummy_pfngldeleteshaderproc} else {unsafe{transmute(proc)}}},
6451			detachshader: {let proc = get_proc_address("glDetachShader"); if proc == null() {dummy_pfngldetachshaderproc} else {unsafe{transmute(proc)}}},
6452			disablevertexattribarray: {let proc = get_proc_address("glDisableVertexAttribArray"); if proc == null() {dummy_pfngldisablevertexattribarrayproc} else {unsafe{transmute(proc)}}},
6453			enablevertexattribarray: {let proc = get_proc_address("glEnableVertexAttribArray"); if proc == null() {dummy_pfnglenablevertexattribarrayproc} else {unsafe{transmute(proc)}}},
6454			getactiveattrib: {let proc = get_proc_address("glGetActiveAttrib"); if proc == null() {dummy_pfnglgetactiveattribproc} else {unsafe{transmute(proc)}}},
6455			getactiveuniform: {let proc = get_proc_address("glGetActiveUniform"); if proc == null() {dummy_pfnglgetactiveuniformproc} else {unsafe{transmute(proc)}}},
6456			getattachedshaders: {let proc = get_proc_address("glGetAttachedShaders"); if proc == null() {dummy_pfnglgetattachedshadersproc} else {unsafe{transmute(proc)}}},
6457			getattriblocation: {let proc = get_proc_address("glGetAttribLocation"); if proc == null() {dummy_pfnglgetattriblocationproc} else {unsafe{transmute(proc)}}},
6458			getprogramiv: {let proc = get_proc_address("glGetProgramiv"); if proc == null() {dummy_pfnglgetprogramivproc} else {unsafe{transmute(proc)}}},
6459			getprograminfolog: {let proc = get_proc_address("glGetProgramInfoLog"); if proc == null() {dummy_pfnglgetprograminfologproc} else {unsafe{transmute(proc)}}},
6460			getshaderiv: {let proc = get_proc_address("glGetShaderiv"); if proc == null() {dummy_pfnglgetshaderivproc} else {unsafe{transmute(proc)}}},
6461			getshaderinfolog: {let proc = get_proc_address("glGetShaderInfoLog"); if proc == null() {dummy_pfnglgetshaderinfologproc} else {unsafe{transmute(proc)}}},
6462			getshadersource: {let proc = get_proc_address("glGetShaderSource"); if proc == null() {dummy_pfnglgetshadersourceproc} else {unsafe{transmute(proc)}}},
6463			getuniformlocation: {let proc = get_proc_address("glGetUniformLocation"); if proc == null() {dummy_pfnglgetuniformlocationproc} else {unsafe{transmute(proc)}}},
6464			getuniformfv: {let proc = get_proc_address("glGetUniformfv"); if proc == null() {dummy_pfnglgetuniformfvproc} else {unsafe{transmute(proc)}}},
6465			getuniformiv: {let proc = get_proc_address("glGetUniformiv"); if proc == null() {dummy_pfnglgetuniformivproc} else {unsafe{transmute(proc)}}},
6466			getvertexattribdv: {let proc = get_proc_address("glGetVertexAttribdv"); if proc == null() {dummy_pfnglgetvertexattribdvproc} else {unsafe{transmute(proc)}}},
6467			getvertexattribfv: {let proc = get_proc_address("glGetVertexAttribfv"); if proc == null() {dummy_pfnglgetvertexattribfvproc} else {unsafe{transmute(proc)}}},
6468			getvertexattribiv: {let proc = get_proc_address("glGetVertexAttribiv"); if proc == null() {dummy_pfnglgetvertexattribivproc} else {unsafe{transmute(proc)}}},
6469			getvertexattribpointerv: {let proc = get_proc_address("glGetVertexAttribPointerv"); if proc == null() {dummy_pfnglgetvertexattribpointervproc} else {unsafe{transmute(proc)}}},
6470			isprogram: {let proc = get_proc_address("glIsProgram"); if proc == null() {dummy_pfnglisprogramproc} else {unsafe{transmute(proc)}}},
6471			isshader: {let proc = get_proc_address("glIsShader"); if proc == null() {dummy_pfnglisshaderproc} else {unsafe{transmute(proc)}}},
6472			linkprogram: {let proc = get_proc_address("glLinkProgram"); if proc == null() {dummy_pfngllinkprogramproc} else {unsafe{transmute(proc)}}},
6473			shadersource: {let proc = get_proc_address("glShaderSource"); if proc == null() {dummy_pfnglshadersourceproc} else {unsafe{transmute(proc)}}},
6474			useprogram: {let proc = get_proc_address("glUseProgram"); if proc == null() {dummy_pfngluseprogramproc} else {unsafe{transmute(proc)}}},
6475			uniform1f: {let proc = get_proc_address("glUniform1f"); if proc == null() {dummy_pfngluniform1fproc} else {unsafe{transmute(proc)}}},
6476			uniform2f: {let proc = get_proc_address("glUniform2f"); if proc == null() {dummy_pfngluniform2fproc} else {unsafe{transmute(proc)}}},
6477			uniform3f: {let proc = get_proc_address("glUniform3f"); if proc == null() {dummy_pfngluniform3fproc} else {unsafe{transmute(proc)}}},
6478			uniform4f: {let proc = get_proc_address("glUniform4f"); if proc == null() {dummy_pfngluniform4fproc} else {unsafe{transmute(proc)}}},
6479			uniform1i: {let proc = get_proc_address("glUniform1i"); if proc == null() {dummy_pfngluniform1iproc} else {unsafe{transmute(proc)}}},
6480			uniform2i: {let proc = get_proc_address("glUniform2i"); if proc == null() {dummy_pfngluniform2iproc} else {unsafe{transmute(proc)}}},
6481			uniform3i: {let proc = get_proc_address("glUniform3i"); if proc == null() {dummy_pfngluniform3iproc} else {unsafe{transmute(proc)}}},
6482			uniform4i: {let proc = get_proc_address("glUniform4i"); if proc == null() {dummy_pfngluniform4iproc} else {unsafe{transmute(proc)}}},
6483			uniform1fv: {let proc = get_proc_address("glUniform1fv"); if proc == null() {dummy_pfngluniform1fvproc} else {unsafe{transmute(proc)}}},
6484			uniform2fv: {let proc = get_proc_address("glUniform2fv"); if proc == null() {dummy_pfngluniform2fvproc} else {unsafe{transmute(proc)}}},
6485			uniform3fv: {let proc = get_proc_address("glUniform3fv"); if proc == null() {dummy_pfngluniform3fvproc} else {unsafe{transmute(proc)}}},
6486			uniform4fv: {let proc = get_proc_address("glUniform4fv"); if proc == null() {dummy_pfngluniform4fvproc} else {unsafe{transmute(proc)}}},
6487			uniform1iv: {let proc = get_proc_address("glUniform1iv"); if proc == null() {dummy_pfngluniform1ivproc} else {unsafe{transmute(proc)}}},
6488			uniform2iv: {let proc = get_proc_address("glUniform2iv"); if proc == null() {dummy_pfngluniform2ivproc} else {unsafe{transmute(proc)}}},
6489			uniform3iv: {let proc = get_proc_address("glUniform3iv"); if proc == null() {dummy_pfngluniform3ivproc} else {unsafe{transmute(proc)}}},
6490			uniform4iv: {let proc = get_proc_address("glUniform4iv"); if proc == null() {dummy_pfngluniform4ivproc} else {unsafe{transmute(proc)}}},
6491			uniformmatrix2fv: {let proc = get_proc_address("glUniformMatrix2fv"); if proc == null() {dummy_pfngluniformmatrix2fvproc} else {unsafe{transmute(proc)}}},
6492			uniformmatrix3fv: {let proc = get_proc_address("glUniformMatrix3fv"); if proc == null() {dummy_pfngluniformmatrix3fvproc} else {unsafe{transmute(proc)}}},
6493			uniformmatrix4fv: {let proc = get_proc_address("glUniformMatrix4fv"); if proc == null() {dummy_pfngluniformmatrix4fvproc} else {unsafe{transmute(proc)}}},
6494			validateprogram: {let proc = get_proc_address("glValidateProgram"); if proc == null() {dummy_pfnglvalidateprogramproc} else {unsafe{transmute(proc)}}},
6495			vertexattrib1d: {let proc = get_proc_address("glVertexAttrib1d"); if proc == null() {dummy_pfnglvertexattrib1dproc} else {unsafe{transmute(proc)}}},
6496			vertexattrib1dv: {let proc = get_proc_address("glVertexAttrib1dv"); if proc == null() {dummy_pfnglvertexattrib1dvproc} else {unsafe{transmute(proc)}}},
6497			vertexattrib1f: {let proc = get_proc_address("glVertexAttrib1f"); if proc == null() {dummy_pfnglvertexattrib1fproc} else {unsafe{transmute(proc)}}},
6498			vertexattrib1fv: {let proc = get_proc_address("glVertexAttrib1fv"); if proc == null() {dummy_pfnglvertexattrib1fvproc} else {unsafe{transmute(proc)}}},
6499			vertexattrib1s: {let proc = get_proc_address("glVertexAttrib1s"); if proc == null() {dummy_pfnglvertexattrib1sproc} else {unsafe{transmute(proc)}}},
6500			vertexattrib1sv: {let proc = get_proc_address("glVertexAttrib1sv"); if proc == null() {dummy_pfnglvertexattrib1svproc} else {unsafe{transmute(proc)}}},
6501			vertexattrib2d: {let proc = get_proc_address("glVertexAttrib2d"); if proc == null() {dummy_pfnglvertexattrib2dproc} else {unsafe{transmute(proc)}}},
6502			vertexattrib2dv: {let proc = get_proc_address("glVertexAttrib2dv"); if proc == null() {dummy_pfnglvertexattrib2dvproc} else {unsafe{transmute(proc)}}},
6503			vertexattrib2f: {let proc = get_proc_address("glVertexAttrib2f"); if proc == null() {dummy_pfnglvertexattrib2fproc} else {unsafe{transmute(proc)}}},
6504			vertexattrib2fv: {let proc = get_proc_address("glVertexAttrib2fv"); if proc == null() {dummy_pfnglvertexattrib2fvproc} else {unsafe{transmute(proc)}}},
6505			vertexattrib2s: {let proc = get_proc_address("glVertexAttrib2s"); if proc == null() {dummy_pfnglvertexattrib2sproc} else {unsafe{transmute(proc)}}},
6506			vertexattrib2sv: {let proc = get_proc_address("glVertexAttrib2sv"); if proc == null() {dummy_pfnglvertexattrib2svproc} else {unsafe{transmute(proc)}}},
6507			vertexattrib3d: {let proc = get_proc_address("glVertexAttrib3d"); if proc == null() {dummy_pfnglvertexattrib3dproc} else {unsafe{transmute(proc)}}},
6508			vertexattrib3dv: {let proc = get_proc_address("glVertexAttrib3dv"); if proc == null() {dummy_pfnglvertexattrib3dvproc} else {unsafe{transmute(proc)}}},
6509			vertexattrib3f: {let proc = get_proc_address("glVertexAttrib3f"); if proc == null() {dummy_pfnglvertexattrib3fproc} else {unsafe{transmute(proc)}}},
6510			vertexattrib3fv: {let proc = get_proc_address("glVertexAttrib3fv"); if proc == null() {dummy_pfnglvertexattrib3fvproc} else {unsafe{transmute(proc)}}},
6511			vertexattrib3s: {let proc = get_proc_address("glVertexAttrib3s"); if proc == null() {dummy_pfnglvertexattrib3sproc} else {unsafe{transmute(proc)}}},
6512			vertexattrib3sv: {let proc = get_proc_address("glVertexAttrib3sv"); if proc == null() {dummy_pfnglvertexattrib3svproc} else {unsafe{transmute(proc)}}},
6513			vertexattrib4nbv: {let proc = get_proc_address("glVertexAttrib4Nbv"); if proc == null() {dummy_pfnglvertexattrib4nbvproc} else {unsafe{transmute(proc)}}},
6514			vertexattrib4niv: {let proc = get_proc_address("glVertexAttrib4Niv"); if proc == null() {dummy_pfnglvertexattrib4nivproc} else {unsafe{transmute(proc)}}},
6515			vertexattrib4nsv: {let proc = get_proc_address("glVertexAttrib4Nsv"); if proc == null() {dummy_pfnglvertexattrib4nsvproc} else {unsafe{transmute(proc)}}},
6516			vertexattrib4nub: {let proc = get_proc_address("glVertexAttrib4Nub"); if proc == null() {dummy_pfnglvertexattrib4nubproc} else {unsafe{transmute(proc)}}},
6517			vertexattrib4nubv: {let proc = get_proc_address("glVertexAttrib4Nubv"); if proc == null() {dummy_pfnglvertexattrib4nubvproc} else {unsafe{transmute(proc)}}},
6518			vertexattrib4nuiv: {let proc = get_proc_address("glVertexAttrib4Nuiv"); if proc == null() {dummy_pfnglvertexattrib4nuivproc} else {unsafe{transmute(proc)}}},
6519			vertexattrib4nusv: {let proc = get_proc_address("glVertexAttrib4Nusv"); if proc == null() {dummy_pfnglvertexattrib4nusvproc} else {unsafe{transmute(proc)}}},
6520			vertexattrib4bv: {let proc = get_proc_address("glVertexAttrib4bv"); if proc == null() {dummy_pfnglvertexattrib4bvproc} else {unsafe{transmute(proc)}}},
6521			vertexattrib4d: {let proc = get_proc_address("glVertexAttrib4d"); if proc == null() {dummy_pfnglvertexattrib4dproc} else {unsafe{transmute(proc)}}},
6522			vertexattrib4dv: {let proc = get_proc_address("glVertexAttrib4dv"); if proc == null() {dummy_pfnglvertexattrib4dvproc} else {unsafe{transmute(proc)}}},
6523			vertexattrib4f: {let proc = get_proc_address("glVertexAttrib4f"); if proc == null() {dummy_pfnglvertexattrib4fproc} else {unsafe{transmute(proc)}}},
6524			vertexattrib4fv: {let proc = get_proc_address("glVertexAttrib4fv"); if proc == null() {dummy_pfnglvertexattrib4fvproc} else {unsafe{transmute(proc)}}},
6525			vertexattrib4iv: {let proc = get_proc_address("glVertexAttrib4iv"); if proc == null() {dummy_pfnglvertexattrib4ivproc} else {unsafe{transmute(proc)}}},
6526			vertexattrib4s: {let proc = get_proc_address("glVertexAttrib4s"); if proc == null() {dummy_pfnglvertexattrib4sproc} else {unsafe{transmute(proc)}}},
6527			vertexattrib4sv: {let proc = get_proc_address("glVertexAttrib4sv"); if proc == null() {dummy_pfnglvertexattrib4svproc} else {unsafe{transmute(proc)}}},
6528			vertexattrib4ubv: {let proc = get_proc_address("glVertexAttrib4ubv"); if proc == null() {dummy_pfnglvertexattrib4ubvproc} else {unsafe{transmute(proc)}}},
6529			vertexattrib4uiv: {let proc = get_proc_address("glVertexAttrib4uiv"); if proc == null() {dummy_pfnglvertexattrib4uivproc} else {unsafe{transmute(proc)}}},
6530			vertexattrib4usv: {let proc = get_proc_address("glVertexAttrib4usv"); if proc == null() {dummy_pfnglvertexattrib4usvproc} else {unsafe{transmute(proc)}}},
6531			vertexattribpointer: {let proc = get_proc_address("glVertexAttribPointer"); if proc == null() {dummy_pfnglvertexattribpointerproc} else {unsafe{transmute(proc)}}},
6532			shading_language_version: base.glGetString(GL_SHADING_LANGUAGE_VERSION).unwrap(),
6533		}
6534	}
6535	#[inline(always)]
6536	pub fn get_available(&self) -> bool {
6537		self.available
6538	}
6539}
6540
6541impl Default for Version20 {
6542	fn default() -> Self {
6543		Self {
6544			available: false,
6545			geterror: dummy_pfnglgeterrorproc,
6546			blendequationseparate: dummy_pfnglblendequationseparateproc,
6547			drawbuffers: dummy_pfngldrawbuffersproc,
6548			stencilopseparate: dummy_pfnglstencilopseparateproc,
6549			stencilfuncseparate: dummy_pfnglstencilfuncseparateproc,
6550			stencilmaskseparate: dummy_pfnglstencilmaskseparateproc,
6551			attachshader: dummy_pfnglattachshaderproc,
6552			bindattriblocation: dummy_pfnglbindattriblocationproc,
6553			compileshader: dummy_pfnglcompileshaderproc,
6554			createprogram: dummy_pfnglcreateprogramproc,
6555			createshader: dummy_pfnglcreateshaderproc,
6556			deleteprogram: dummy_pfngldeleteprogramproc,
6557			deleteshader: dummy_pfngldeleteshaderproc,
6558			detachshader: dummy_pfngldetachshaderproc,
6559			disablevertexattribarray: dummy_pfngldisablevertexattribarrayproc,
6560			enablevertexattribarray: dummy_pfnglenablevertexattribarrayproc,
6561			getactiveattrib: dummy_pfnglgetactiveattribproc,
6562			getactiveuniform: dummy_pfnglgetactiveuniformproc,
6563			getattachedshaders: dummy_pfnglgetattachedshadersproc,
6564			getattriblocation: dummy_pfnglgetattriblocationproc,
6565			getprogramiv: dummy_pfnglgetprogramivproc,
6566			getprograminfolog: dummy_pfnglgetprograminfologproc,
6567			getshaderiv: dummy_pfnglgetshaderivproc,
6568			getshaderinfolog: dummy_pfnglgetshaderinfologproc,
6569			getshadersource: dummy_pfnglgetshadersourceproc,
6570			getuniformlocation: dummy_pfnglgetuniformlocationproc,
6571			getuniformfv: dummy_pfnglgetuniformfvproc,
6572			getuniformiv: dummy_pfnglgetuniformivproc,
6573			getvertexattribdv: dummy_pfnglgetvertexattribdvproc,
6574			getvertexattribfv: dummy_pfnglgetvertexattribfvproc,
6575			getvertexattribiv: dummy_pfnglgetvertexattribivproc,
6576			getvertexattribpointerv: dummy_pfnglgetvertexattribpointervproc,
6577			isprogram: dummy_pfnglisprogramproc,
6578			isshader: dummy_pfnglisshaderproc,
6579			linkprogram: dummy_pfngllinkprogramproc,
6580			shadersource: dummy_pfnglshadersourceproc,
6581			useprogram: dummy_pfngluseprogramproc,
6582			uniform1f: dummy_pfngluniform1fproc,
6583			uniform2f: dummy_pfngluniform2fproc,
6584			uniform3f: dummy_pfngluniform3fproc,
6585			uniform4f: dummy_pfngluniform4fproc,
6586			uniform1i: dummy_pfngluniform1iproc,
6587			uniform2i: dummy_pfngluniform2iproc,
6588			uniform3i: dummy_pfngluniform3iproc,
6589			uniform4i: dummy_pfngluniform4iproc,
6590			uniform1fv: dummy_pfngluniform1fvproc,
6591			uniform2fv: dummy_pfngluniform2fvproc,
6592			uniform3fv: dummy_pfngluniform3fvproc,
6593			uniform4fv: dummy_pfngluniform4fvproc,
6594			uniform1iv: dummy_pfngluniform1ivproc,
6595			uniform2iv: dummy_pfngluniform2ivproc,
6596			uniform3iv: dummy_pfngluniform3ivproc,
6597			uniform4iv: dummy_pfngluniform4ivproc,
6598			uniformmatrix2fv: dummy_pfngluniformmatrix2fvproc,
6599			uniformmatrix3fv: dummy_pfngluniformmatrix3fvproc,
6600			uniformmatrix4fv: dummy_pfngluniformmatrix4fvproc,
6601			validateprogram: dummy_pfnglvalidateprogramproc,
6602			vertexattrib1d: dummy_pfnglvertexattrib1dproc,
6603			vertexattrib1dv: dummy_pfnglvertexattrib1dvproc,
6604			vertexattrib1f: dummy_pfnglvertexattrib1fproc,
6605			vertexattrib1fv: dummy_pfnglvertexattrib1fvproc,
6606			vertexattrib1s: dummy_pfnglvertexattrib1sproc,
6607			vertexattrib1sv: dummy_pfnglvertexattrib1svproc,
6608			vertexattrib2d: dummy_pfnglvertexattrib2dproc,
6609			vertexattrib2dv: dummy_pfnglvertexattrib2dvproc,
6610			vertexattrib2f: dummy_pfnglvertexattrib2fproc,
6611			vertexattrib2fv: dummy_pfnglvertexattrib2fvproc,
6612			vertexattrib2s: dummy_pfnglvertexattrib2sproc,
6613			vertexattrib2sv: dummy_pfnglvertexattrib2svproc,
6614			vertexattrib3d: dummy_pfnglvertexattrib3dproc,
6615			vertexattrib3dv: dummy_pfnglvertexattrib3dvproc,
6616			vertexattrib3f: dummy_pfnglvertexattrib3fproc,
6617			vertexattrib3fv: dummy_pfnglvertexattrib3fvproc,
6618			vertexattrib3s: dummy_pfnglvertexattrib3sproc,
6619			vertexattrib3sv: dummy_pfnglvertexattrib3svproc,
6620			vertexattrib4nbv: dummy_pfnglvertexattrib4nbvproc,
6621			vertexattrib4niv: dummy_pfnglvertexattrib4nivproc,
6622			vertexattrib4nsv: dummy_pfnglvertexattrib4nsvproc,
6623			vertexattrib4nub: dummy_pfnglvertexattrib4nubproc,
6624			vertexattrib4nubv: dummy_pfnglvertexattrib4nubvproc,
6625			vertexattrib4nuiv: dummy_pfnglvertexattrib4nuivproc,
6626			vertexattrib4nusv: dummy_pfnglvertexattrib4nusvproc,
6627			vertexattrib4bv: dummy_pfnglvertexattrib4bvproc,
6628			vertexattrib4d: dummy_pfnglvertexattrib4dproc,
6629			vertexattrib4dv: dummy_pfnglvertexattrib4dvproc,
6630			vertexattrib4f: dummy_pfnglvertexattrib4fproc,
6631			vertexattrib4fv: dummy_pfnglvertexattrib4fvproc,
6632			vertexattrib4iv: dummy_pfnglvertexattrib4ivproc,
6633			vertexattrib4s: dummy_pfnglvertexattrib4sproc,
6634			vertexattrib4sv: dummy_pfnglvertexattrib4svproc,
6635			vertexattrib4ubv: dummy_pfnglvertexattrib4ubvproc,
6636			vertexattrib4uiv: dummy_pfnglvertexattrib4uivproc,
6637			vertexattrib4usv: dummy_pfnglvertexattrib4usvproc,
6638			vertexattribpointer: dummy_pfnglvertexattribpointerproc,
6639			shading_language_version: "unknown",
6640		}
6641	}
6642}
6643impl Debug for Version20 {
6644	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
6645		if self.available {
6646			f.debug_struct("Version20")
6647			.field("available", &self.available)
6648			.field("shading_language_version", &self.shading_language_version)
6649			.field("blendequationseparate", unsafe{if transmute::<_, *const c_void>(self.blendequationseparate) == (dummy_pfnglblendequationseparateproc as *const c_void) {&null::<PFNGLBLENDEQUATIONSEPARATEPROC>()} else {&self.blendequationseparate}})
6650			.field("drawbuffers", unsafe{if transmute::<_, *const c_void>(self.drawbuffers) == (dummy_pfngldrawbuffersproc as *const c_void) {&null::<PFNGLDRAWBUFFERSPROC>()} else {&self.drawbuffers}})
6651			.field("stencilopseparate", unsafe{if transmute::<_, *const c_void>(self.stencilopseparate) == (dummy_pfnglstencilopseparateproc as *const c_void) {&null::<PFNGLSTENCILOPSEPARATEPROC>()} else {&self.stencilopseparate}})
6652			.field("stencilfuncseparate", unsafe{if transmute::<_, *const c_void>(self.stencilfuncseparate) == (dummy_pfnglstencilfuncseparateproc as *const c_void) {&null::<PFNGLSTENCILFUNCSEPARATEPROC>()} else {&self.stencilfuncseparate}})
6653			.field("stencilmaskseparate", unsafe{if transmute::<_, *const c_void>(self.stencilmaskseparate) == (dummy_pfnglstencilmaskseparateproc as *const c_void) {&null::<PFNGLSTENCILMASKSEPARATEPROC>()} else {&self.stencilmaskseparate}})
6654			.field("attachshader", unsafe{if transmute::<_, *const c_void>(self.attachshader) == (dummy_pfnglattachshaderproc as *const c_void) {&null::<PFNGLATTACHSHADERPROC>()} else {&self.attachshader}})
6655			.field("bindattriblocation", unsafe{if transmute::<_, *const c_void>(self.bindattriblocation) == (dummy_pfnglbindattriblocationproc as *const c_void) {&null::<PFNGLBINDATTRIBLOCATIONPROC>()} else {&self.bindattriblocation}})
6656			.field("compileshader", unsafe{if transmute::<_, *const c_void>(self.compileshader) == (dummy_pfnglcompileshaderproc as *const c_void) {&null::<PFNGLCOMPILESHADERPROC>()} else {&self.compileshader}})
6657			.field("createprogram", unsafe{if transmute::<_, *const c_void>(self.createprogram) == (dummy_pfnglcreateprogramproc as *const c_void) {&null::<PFNGLCREATEPROGRAMPROC>()} else {&self.createprogram}})
6658			.field("createshader", unsafe{if transmute::<_, *const c_void>(self.createshader) == (dummy_pfnglcreateshaderproc as *const c_void) {&null::<PFNGLCREATESHADERPROC>()} else {&self.createshader}})
6659			.field("deleteprogram", unsafe{if transmute::<_, *const c_void>(self.deleteprogram) == (dummy_pfngldeleteprogramproc as *const c_void) {&null::<PFNGLDELETEPROGRAMPROC>()} else {&self.deleteprogram}})
6660			.field("deleteshader", unsafe{if transmute::<_, *const c_void>(self.deleteshader) == (dummy_pfngldeleteshaderproc as *const c_void) {&null::<PFNGLDELETESHADERPROC>()} else {&self.deleteshader}})
6661			.field("detachshader", unsafe{if transmute::<_, *const c_void>(self.detachshader) == (dummy_pfngldetachshaderproc as *const c_void) {&null::<PFNGLDETACHSHADERPROC>()} else {&self.detachshader}})
6662			.field("disablevertexattribarray", unsafe{if transmute::<_, *const c_void>(self.disablevertexattribarray) == (dummy_pfngldisablevertexattribarrayproc as *const c_void) {&null::<PFNGLDISABLEVERTEXATTRIBARRAYPROC>()} else {&self.disablevertexattribarray}})
6663			.field("enablevertexattribarray", unsafe{if transmute::<_, *const c_void>(self.enablevertexattribarray) == (dummy_pfnglenablevertexattribarrayproc as *const c_void) {&null::<PFNGLENABLEVERTEXATTRIBARRAYPROC>()} else {&self.enablevertexattribarray}})
6664			.field("getactiveattrib", unsafe{if transmute::<_, *const c_void>(self.getactiveattrib) == (dummy_pfnglgetactiveattribproc as *const c_void) {&null::<PFNGLGETACTIVEATTRIBPROC>()} else {&self.getactiveattrib}})
6665			.field("getactiveuniform", unsafe{if transmute::<_, *const c_void>(self.getactiveuniform) == (dummy_pfnglgetactiveuniformproc as *const c_void) {&null::<PFNGLGETACTIVEUNIFORMPROC>()} else {&self.getactiveuniform}})
6666			.field("getattachedshaders", unsafe{if transmute::<_, *const c_void>(self.getattachedshaders) == (dummy_pfnglgetattachedshadersproc as *const c_void) {&null::<PFNGLGETATTACHEDSHADERSPROC>()} else {&self.getattachedshaders}})
6667			.field("getattriblocation", unsafe{if transmute::<_, *const c_void>(self.getattriblocation) == (dummy_pfnglgetattriblocationproc as *const c_void) {&null::<PFNGLGETATTRIBLOCATIONPROC>()} else {&self.getattriblocation}})
6668			.field("getprogramiv", unsafe{if transmute::<_, *const c_void>(self.getprogramiv) == (dummy_pfnglgetprogramivproc as *const c_void) {&null::<PFNGLGETPROGRAMIVPROC>()} else {&self.getprogramiv}})
6669			.field("getprograminfolog", unsafe{if transmute::<_, *const c_void>(self.getprograminfolog) == (dummy_pfnglgetprograminfologproc as *const c_void) {&null::<PFNGLGETPROGRAMINFOLOGPROC>()} else {&self.getprograminfolog}})
6670			.field("getshaderiv", unsafe{if transmute::<_, *const c_void>(self.getshaderiv) == (dummy_pfnglgetshaderivproc as *const c_void) {&null::<PFNGLGETSHADERIVPROC>()} else {&self.getshaderiv}})
6671			.field("getshaderinfolog", unsafe{if transmute::<_, *const c_void>(self.getshaderinfolog) == (dummy_pfnglgetshaderinfologproc as *const c_void) {&null::<PFNGLGETSHADERINFOLOGPROC>()} else {&self.getshaderinfolog}})
6672			.field("getshadersource", unsafe{if transmute::<_, *const c_void>(self.getshadersource) == (dummy_pfnglgetshadersourceproc as *const c_void) {&null::<PFNGLGETSHADERSOURCEPROC>()} else {&self.getshadersource}})
6673			.field("getuniformlocation", unsafe{if transmute::<_, *const c_void>(self.getuniformlocation) == (dummy_pfnglgetuniformlocationproc as *const c_void) {&null::<PFNGLGETUNIFORMLOCATIONPROC>()} else {&self.getuniformlocation}})
6674			.field("getuniformfv", unsafe{if transmute::<_, *const c_void>(self.getuniformfv) == (dummy_pfnglgetuniformfvproc as *const c_void) {&null::<PFNGLGETUNIFORMFVPROC>()} else {&self.getuniformfv}})
6675			.field("getuniformiv", unsafe{if transmute::<_, *const c_void>(self.getuniformiv) == (dummy_pfnglgetuniformivproc as *const c_void) {&null::<PFNGLGETUNIFORMIVPROC>()} else {&self.getuniformiv}})
6676			.field("getvertexattribdv", unsafe{if transmute::<_, *const c_void>(self.getvertexattribdv) == (dummy_pfnglgetvertexattribdvproc as *const c_void) {&null::<PFNGLGETVERTEXATTRIBDVPROC>()} else {&self.getvertexattribdv}})
6677			.field("getvertexattribfv", unsafe{if transmute::<_, *const c_void>(self.getvertexattribfv) == (dummy_pfnglgetvertexattribfvproc as *const c_void) {&null::<PFNGLGETVERTEXATTRIBFVPROC>()} else {&self.getvertexattribfv}})
6678			.field("getvertexattribiv", unsafe{if transmute::<_, *const c_void>(self.getvertexattribiv) == (dummy_pfnglgetvertexattribivproc as *const c_void) {&null::<PFNGLGETVERTEXATTRIBIVPROC>()} else {&self.getvertexattribiv}})
6679			.field("getvertexattribpointerv", unsafe{if transmute::<_, *const c_void>(self.getvertexattribpointerv) == (dummy_pfnglgetvertexattribpointervproc as *const c_void) {&null::<PFNGLGETVERTEXATTRIBPOINTERVPROC>()} else {&self.getvertexattribpointerv}})
6680			.field("isprogram", unsafe{if transmute::<_, *const c_void>(self.isprogram) == (dummy_pfnglisprogramproc as *const c_void) {&null::<PFNGLISPROGRAMPROC>()} else {&self.isprogram}})
6681			.field("isshader", unsafe{if transmute::<_, *const c_void>(self.isshader) == (dummy_pfnglisshaderproc as *const c_void) {&null::<PFNGLISSHADERPROC>()} else {&self.isshader}})
6682			.field("linkprogram", unsafe{if transmute::<_, *const c_void>(self.linkprogram) == (dummy_pfngllinkprogramproc as *const c_void) {&null::<PFNGLLINKPROGRAMPROC>()} else {&self.linkprogram}})
6683			.field("shadersource", unsafe{if transmute::<_, *const c_void>(self.shadersource) == (dummy_pfnglshadersourceproc as *const c_void) {&null::<PFNGLSHADERSOURCEPROC>()} else {&self.shadersource}})
6684			.field("useprogram", unsafe{if transmute::<_, *const c_void>(self.useprogram) == (dummy_pfngluseprogramproc as *const c_void) {&null::<PFNGLUSEPROGRAMPROC>()} else {&self.useprogram}})
6685			.field("uniform1f", unsafe{if transmute::<_, *const c_void>(self.uniform1f) == (dummy_pfngluniform1fproc as *const c_void) {&null::<PFNGLUNIFORM1FPROC>()} else {&self.uniform1f}})
6686			.field("uniform2f", unsafe{if transmute::<_, *const c_void>(self.uniform2f) == (dummy_pfngluniform2fproc as *const c_void) {&null::<PFNGLUNIFORM2FPROC>()} else {&self.uniform2f}})
6687			.field("uniform3f", unsafe{if transmute::<_, *const c_void>(self.uniform3f) == (dummy_pfngluniform3fproc as *const c_void) {&null::<PFNGLUNIFORM3FPROC>()} else {&self.uniform3f}})
6688			.field("uniform4f", unsafe{if transmute::<_, *const c_void>(self.uniform4f) == (dummy_pfngluniform4fproc as *const c_void) {&null::<PFNGLUNIFORM4FPROC>()} else {&self.uniform4f}})
6689			.field("uniform1i", unsafe{if transmute::<_, *const c_void>(self.uniform1i) == (dummy_pfngluniform1iproc as *const c_void) {&null::<PFNGLUNIFORM1IPROC>()} else {&self.uniform1i}})
6690			.field("uniform2i", unsafe{if transmute::<_, *const c_void>(self.uniform2i) == (dummy_pfngluniform2iproc as *const c_void) {&null::<PFNGLUNIFORM2IPROC>()} else {&self.uniform2i}})
6691			.field("uniform3i", unsafe{if transmute::<_, *const c_void>(self.uniform3i) == (dummy_pfngluniform3iproc as *const c_void) {&null::<PFNGLUNIFORM3IPROC>()} else {&self.uniform3i}})
6692			.field("uniform4i", unsafe{if transmute::<_, *const c_void>(self.uniform4i) == (dummy_pfngluniform4iproc as *const c_void) {&null::<PFNGLUNIFORM4IPROC>()} else {&self.uniform4i}})
6693			.field("uniform1fv", unsafe{if transmute::<_, *const c_void>(self.uniform1fv) == (dummy_pfngluniform1fvproc as *const c_void) {&null::<PFNGLUNIFORM1FVPROC>()} else {&self.uniform1fv}})
6694			.field("uniform2fv", unsafe{if transmute::<_, *const c_void>(self.uniform2fv) == (dummy_pfngluniform2fvproc as *const c_void) {&null::<PFNGLUNIFORM2FVPROC>()} else {&self.uniform2fv}})
6695			.field("uniform3fv", unsafe{if transmute::<_, *const c_void>(self.uniform3fv) == (dummy_pfngluniform3fvproc as *const c_void) {&null::<PFNGLUNIFORM3FVPROC>()} else {&self.uniform3fv}})
6696			.field("uniform4fv", unsafe{if transmute::<_, *const c_void>(self.uniform4fv) == (dummy_pfngluniform4fvproc as *const c_void) {&null::<PFNGLUNIFORM4FVPROC>()} else {&self.uniform4fv}})
6697			.field("uniform1iv", unsafe{if transmute::<_, *const c_void>(self.uniform1iv) == (dummy_pfngluniform1ivproc as *const c_void) {&null::<PFNGLUNIFORM1IVPROC>()} else {&self.uniform1iv}})
6698			.field("uniform2iv", unsafe{if transmute::<_, *const c_void>(self.uniform2iv) == (dummy_pfngluniform2ivproc as *const c_void) {&null::<PFNGLUNIFORM2IVPROC>()} else {&self.uniform2iv}})
6699			.field("uniform3iv", unsafe{if transmute::<_, *const c_void>(self.uniform3iv) == (dummy_pfngluniform3ivproc as *const c_void) {&null::<PFNGLUNIFORM3IVPROC>()} else {&self.uniform3iv}})
6700			.field("uniform4iv", unsafe{if transmute::<_, *const c_void>(self.uniform4iv) == (dummy_pfngluniform4ivproc as *const c_void) {&null::<PFNGLUNIFORM4IVPROC>()} else {&self.uniform4iv}})
6701			.field("uniformmatrix2fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix2fv) == (dummy_pfngluniformmatrix2fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX2FVPROC>()} else {&self.uniformmatrix2fv}})
6702			.field("uniformmatrix3fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix3fv) == (dummy_pfngluniformmatrix3fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX3FVPROC>()} else {&self.uniformmatrix3fv}})
6703			.field("uniformmatrix4fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix4fv) == (dummy_pfngluniformmatrix4fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX4FVPROC>()} else {&self.uniformmatrix4fv}})
6704			.field("validateprogram", unsafe{if transmute::<_, *const c_void>(self.validateprogram) == (dummy_pfnglvalidateprogramproc as *const c_void) {&null::<PFNGLVALIDATEPROGRAMPROC>()} else {&self.validateprogram}})
6705			.field("vertexattrib1d", unsafe{if transmute::<_, *const c_void>(self.vertexattrib1d) == (dummy_pfnglvertexattrib1dproc as *const c_void) {&null::<PFNGLVERTEXATTRIB1DPROC>()} else {&self.vertexattrib1d}})
6706			.field("vertexattrib1dv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib1dv) == (dummy_pfnglvertexattrib1dvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB1DVPROC>()} else {&self.vertexattrib1dv}})
6707			.field("vertexattrib1f", unsafe{if transmute::<_, *const c_void>(self.vertexattrib1f) == (dummy_pfnglvertexattrib1fproc as *const c_void) {&null::<PFNGLVERTEXATTRIB1FPROC>()} else {&self.vertexattrib1f}})
6708			.field("vertexattrib1fv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib1fv) == (dummy_pfnglvertexattrib1fvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB1FVPROC>()} else {&self.vertexattrib1fv}})
6709			.field("vertexattrib1s", unsafe{if transmute::<_, *const c_void>(self.vertexattrib1s) == (dummy_pfnglvertexattrib1sproc as *const c_void) {&null::<PFNGLVERTEXATTRIB1SPROC>()} else {&self.vertexattrib1s}})
6710			.field("vertexattrib1sv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib1sv) == (dummy_pfnglvertexattrib1svproc as *const c_void) {&null::<PFNGLVERTEXATTRIB1SVPROC>()} else {&self.vertexattrib1sv}})
6711			.field("vertexattrib2d", unsafe{if transmute::<_, *const c_void>(self.vertexattrib2d) == (dummy_pfnglvertexattrib2dproc as *const c_void) {&null::<PFNGLVERTEXATTRIB2DPROC>()} else {&self.vertexattrib2d}})
6712			.field("vertexattrib2dv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib2dv) == (dummy_pfnglvertexattrib2dvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB2DVPROC>()} else {&self.vertexattrib2dv}})
6713			.field("vertexattrib2f", unsafe{if transmute::<_, *const c_void>(self.vertexattrib2f) == (dummy_pfnglvertexattrib2fproc as *const c_void) {&null::<PFNGLVERTEXATTRIB2FPROC>()} else {&self.vertexattrib2f}})
6714			.field("vertexattrib2fv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib2fv) == (dummy_pfnglvertexattrib2fvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB2FVPROC>()} else {&self.vertexattrib2fv}})
6715			.field("vertexattrib2s", unsafe{if transmute::<_, *const c_void>(self.vertexattrib2s) == (dummy_pfnglvertexattrib2sproc as *const c_void) {&null::<PFNGLVERTEXATTRIB2SPROC>()} else {&self.vertexattrib2s}})
6716			.field("vertexattrib2sv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib2sv) == (dummy_pfnglvertexattrib2svproc as *const c_void) {&null::<PFNGLVERTEXATTRIB2SVPROC>()} else {&self.vertexattrib2sv}})
6717			.field("vertexattrib3d", unsafe{if transmute::<_, *const c_void>(self.vertexattrib3d) == (dummy_pfnglvertexattrib3dproc as *const c_void) {&null::<PFNGLVERTEXATTRIB3DPROC>()} else {&self.vertexattrib3d}})
6718			.field("vertexattrib3dv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib3dv) == (dummy_pfnglvertexattrib3dvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB3DVPROC>()} else {&self.vertexattrib3dv}})
6719			.field("vertexattrib3f", unsafe{if transmute::<_, *const c_void>(self.vertexattrib3f) == (dummy_pfnglvertexattrib3fproc as *const c_void) {&null::<PFNGLVERTEXATTRIB3FPROC>()} else {&self.vertexattrib3f}})
6720			.field("vertexattrib3fv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib3fv) == (dummy_pfnglvertexattrib3fvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB3FVPROC>()} else {&self.vertexattrib3fv}})
6721			.field("vertexattrib3s", unsafe{if transmute::<_, *const c_void>(self.vertexattrib3s) == (dummy_pfnglvertexattrib3sproc as *const c_void) {&null::<PFNGLVERTEXATTRIB3SPROC>()} else {&self.vertexattrib3s}})
6722			.field("vertexattrib3sv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib3sv) == (dummy_pfnglvertexattrib3svproc as *const c_void) {&null::<PFNGLVERTEXATTRIB3SVPROC>()} else {&self.vertexattrib3sv}})
6723			.field("vertexattrib4nbv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4nbv) == (dummy_pfnglvertexattrib4nbvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4NBVPROC>()} else {&self.vertexattrib4nbv}})
6724			.field("vertexattrib4niv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4niv) == (dummy_pfnglvertexattrib4nivproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4NIVPROC>()} else {&self.vertexattrib4niv}})
6725			.field("vertexattrib4nsv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4nsv) == (dummy_pfnglvertexattrib4nsvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4NSVPROC>()} else {&self.vertexattrib4nsv}})
6726			.field("vertexattrib4nub", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4nub) == (dummy_pfnglvertexattrib4nubproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4NUBPROC>()} else {&self.vertexattrib4nub}})
6727			.field("vertexattrib4nubv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4nubv) == (dummy_pfnglvertexattrib4nubvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4NUBVPROC>()} else {&self.vertexattrib4nubv}})
6728			.field("vertexattrib4nuiv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4nuiv) == (dummy_pfnglvertexattrib4nuivproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4NUIVPROC>()} else {&self.vertexattrib4nuiv}})
6729			.field("vertexattrib4nusv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4nusv) == (dummy_pfnglvertexattrib4nusvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4NUSVPROC>()} else {&self.vertexattrib4nusv}})
6730			.field("vertexattrib4bv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4bv) == (dummy_pfnglvertexattrib4bvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4BVPROC>()} else {&self.vertexattrib4bv}})
6731			.field("vertexattrib4d", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4d) == (dummy_pfnglvertexattrib4dproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4DPROC>()} else {&self.vertexattrib4d}})
6732			.field("vertexattrib4dv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4dv) == (dummy_pfnglvertexattrib4dvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4DVPROC>()} else {&self.vertexattrib4dv}})
6733			.field("vertexattrib4f", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4f) == (dummy_pfnglvertexattrib4fproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4FPROC>()} else {&self.vertexattrib4f}})
6734			.field("vertexattrib4fv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4fv) == (dummy_pfnglvertexattrib4fvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4FVPROC>()} else {&self.vertexattrib4fv}})
6735			.field("vertexattrib4iv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4iv) == (dummy_pfnglvertexattrib4ivproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4IVPROC>()} else {&self.vertexattrib4iv}})
6736			.field("vertexattrib4s", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4s) == (dummy_pfnglvertexattrib4sproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4SPROC>()} else {&self.vertexattrib4s}})
6737			.field("vertexattrib4sv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4sv) == (dummy_pfnglvertexattrib4svproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4SVPROC>()} else {&self.vertexattrib4sv}})
6738			.field("vertexattrib4ubv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4ubv) == (dummy_pfnglvertexattrib4ubvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4UBVPROC>()} else {&self.vertexattrib4ubv}})
6739			.field("vertexattrib4uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4uiv) == (dummy_pfnglvertexattrib4uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4UIVPROC>()} else {&self.vertexattrib4uiv}})
6740			.field("vertexattrib4usv", unsafe{if transmute::<_, *const c_void>(self.vertexattrib4usv) == (dummy_pfnglvertexattrib4usvproc as *const c_void) {&null::<PFNGLVERTEXATTRIB4USVPROC>()} else {&self.vertexattrib4usv}})
6741			.field("vertexattribpointer", unsafe{if transmute::<_, *const c_void>(self.vertexattribpointer) == (dummy_pfnglvertexattribpointerproc as *const c_void) {&null::<PFNGLVERTEXATTRIBPOINTERPROC>()} else {&self.vertexattribpointer}})
6742			.finish()
6743		} else {
6744			f.debug_struct("Version20")
6745			.field("available", &self.available)
6746			.finish_non_exhaustive()
6747		}
6748	}
6749}
6750type PFNGLUNIFORMMATRIX2X3FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
6751type PFNGLUNIFORMMATRIX3X2FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
6752type PFNGLUNIFORMMATRIX2X4FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
6753type PFNGLUNIFORMMATRIX4X2FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
6754type PFNGLUNIFORMMATRIX3X4FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
6755type PFNGLUNIFORMMATRIX4X3FVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLfloat);
6756extern "system" fn dummy_pfngluniformmatrix2x3fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
6757	panic!("OpenGL function pointer `glUniformMatrix2x3fv()` is null.")
6758}
6759extern "system" fn dummy_pfngluniformmatrix3x2fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
6760	panic!("OpenGL function pointer `glUniformMatrix3x2fv()` is null.")
6761}
6762extern "system" fn dummy_pfngluniformmatrix2x4fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
6763	panic!("OpenGL function pointer `glUniformMatrix2x4fv()` is null.")
6764}
6765extern "system" fn dummy_pfngluniformmatrix4x2fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
6766	panic!("OpenGL function pointer `glUniformMatrix4x2fv()` is null.")
6767}
6768extern "system" fn dummy_pfngluniformmatrix3x4fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
6769	panic!("OpenGL function pointer `glUniformMatrix3x4fv()` is null.")
6770}
6771extern "system" fn dummy_pfngluniformmatrix4x3fvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
6772	panic!("OpenGL function pointer `glUniformMatrix4x3fv()` is null.")
6773}
6774pub const GL_PIXEL_PACK_BUFFER: GLenum = 0x88EB;
6775pub const GL_PIXEL_UNPACK_BUFFER: GLenum = 0x88EC;
6776pub const GL_PIXEL_PACK_BUFFER_BINDING: GLenum = 0x88ED;
6777pub const GL_PIXEL_UNPACK_BUFFER_BINDING: GLenum = 0x88EF;
6778pub const GL_FLOAT_MAT2x3: GLenum = 0x8B65;
6779pub const GL_FLOAT_MAT2x4: GLenum = 0x8B66;
6780pub const GL_FLOAT_MAT3x2: GLenum = 0x8B67;
6781pub const GL_FLOAT_MAT3x4: GLenum = 0x8B68;
6782pub const GL_FLOAT_MAT4x2: GLenum = 0x8B69;
6783pub const GL_FLOAT_MAT4x3: GLenum = 0x8B6A;
6784pub const GL_SRGB: GLenum = 0x8C40;
6785pub const GL_SRGB8: GLenum = 0x8C41;
6786pub const GL_SRGB_ALPHA: GLenum = 0x8C42;
6787pub const GL_SRGB8_ALPHA8: GLenum = 0x8C43;
6788pub const GL_COMPRESSED_SRGB: GLenum = 0x8C48;
6789pub const GL_COMPRESSED_SRGB_ALPHA: GLenum = 0x8C49;
6790pub const GL_CURRENT_RASTER_SECONDARY_COLOR: GLenum = 0x845F;
6791pub const GL_SLUMINANCE_ALPHA: GLenum = 0x8C44;
6792pub const GL_SLUMINANCE8_ALPHA8: GLenum = 0x8C45;
6793pub const GL_SLUMINANCE: GLenum = 0x8C46;
6794pub const GL_SLUMINANCE8: GLenum = 0x8C47;
6795pub const GL_COMPRESSED_SLUMINANCE: GLenum = 0x8C4A;
6796pub const GL_COMPRESSED_SLUMINANCE_ALPHA: GLenum = 0x8C4B;
6797
6798pub trait GL_2_1 {
6799	fn glGetError(&self) -> GLenum;
6800	fn glUniformMatrix2x3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
6801	fn glUniformMatrix3x2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
6802	fn glUniformMatrix2x4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
6803	fn glUniformMatrix4x2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
6804	fn glUniformMatrix3x4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
6805	fn glUniformMatrix4x3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
6806}
6807
6808#[derive(Clone, Copy, PartialEq, Eq, Hash)]
6809pub struct Version21 {
6810	available: bool,
6811	geterror: PFNGLGETERRORPROC,
6812	uniformmatrix2x3fv: PFNGLUNIFORMMATRIX2X3FVPROC,
6813	uniformmatrix3x2fv: PFNGLUNIFORMMATRIX3X2FVPROC,
6814	uniformmatrix2x4fv: PFNGLUNIFORMMATRIX2X4FVPROC,
6815	uniformmatrix4x2fv: PFNGLUNIFORMMATRIX4X2FVPROC,
6816	uniformmatrix3x4fv: PFNGLUNIFORMMATRIX3X4FVPROC,
6817	uniformmatrix4x3fv: PFNGLUNIFORMMATRIX4X3FVPROC,
6818}
6819
6820impl GL_2_1 for Version21 {
6821	#[inline(always)]
6822	fn glGetError(&self) -> GLenum {
6823		(self.geterror)()
6824	}
6825	#[inline(always)]
6826	fn glUniformMatrix2x3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
6827		let ret = process_catch("glUniformMatrix2x3fv", catch_unwind(||(self.uniformmatrix2x3fv)(location, count, transpose, value)));
6828		#[cfg(feature = "diagnose")]
6829		if let Ok(ret) = ret {
6830			return to_result("glUniformMatrix2x3fv", ret, self.glGetError());
6831		} else {
6832			return ret
6833		}
6834		#[cfg(not(feature = "diagnose"))]
6835		return ret;
6836	}
6837	#[inline(always)]
6838	fn glUniformMatrix3x2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
6839		let ret = process_catch("glUniformMatrix3x2fv", catch_unwind(||(self.uniformmatrix3x2fv)(location, count, transpose, value)));
6840		#[cfg(feature = "diagnose")]
6841		if let Ok(ret) = ret {
6842			return to_result("glUniformMatrix3x2fv", ret, self.glGetError());
6843		} else {
6844			return ret
6845		}
6846		#[cfg(not(feature = "diagnose"))]
6847		return ret;
6848	}
6849	#[inline(always)]
6850	fn glUniformMatrix2x4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
6851		let ret = process_catch("glUniformMatrix2x4fv", catch_unwind(||(self.uniformmatrix2x4fv)(location, count, transpose, value)));
6852		#[cfg(feature = "diagnose")]
6853		if let Ok(ret) = ret {
6854			return to_result("glUniformMatrix2x4fv", ret, self.glGetError());
6855		} else {
6856			return ret
6857		}
6858		#[cfg(not(feature = "diagnose"))]
6859		return ret;
6860	}
6861	#[inline(always)]
6862	fn glUniformMatrix4x2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
6863		let ret = process_catch("glUniformMatrix4x2fv", catch_unwind(||(self.uniformmatrix4x2fv)(location, count, transpose, value)));
6864		#[cfg(feature = "diagnose")]
6865		if let Ok(ret) = ret {
6866			return to_result("glUniformMatrix4x2fv", ret, self.glGetError());
6867		} else {
6868			return ret
6869		}
6870		#[cfg(not(feature = "diagnose"))]
6871		return ret;
6872	}
6873	#[inline(always)]
6874	fn glUniformMatrix3x4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
6875		let ret = process_catch("glUniformMatrix3x4fv", catch_unwind(||(self.uniformmatrix3x4fv)(location, count, transpose, value)));
6876		#[cfg(feature = "diagnose")]
6877		if let Ok(ret) = ret {
6878			return to_result("glUniformMatrix3x4fv", ret, self.glGetError());
6879		} else {
6880			return ret
6881		}
6882		#[cfg(not(feature = "diagnose"))]
6883		return ret;
6884	}
6885	#[inline(always)]
6886	fn glUniformMatrix4x3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
6887		let ret = process_catch("glUniformMatrix4x3fv", catch_unwind(||(self.uniformmatrix4x3fv)(location, count, transpose, value)));
6888		#[cfg(feature = "diagnose")]
6889		if let Ok(ret) = ret {
6890			return to_result("glUniformMatrix4x3fv", ret, self.glGetError());
6891		} else {
6892			return ret
6893		}
6894		#[cfg(not(feature = "diagnose"))]
6895		return ret;
6896	}
6897}
6898
6899impl Version21 {
6900	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
6901		let (_spec, major, minor, release) = base.get_version();
6902		if (major, minor, release) < (2, 1, 0) {
6903			return Self::default();
6904		}
6905		Self {
6906			available: true,
6907			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
6908			uniformmatrix2x3fv: {let proc = get_proc_address("glUniformMatrix2x3fv"); if proc == null() {dummy_pfngluniformmatrix2x3fvproc} else {unsafe{transmute(proc)}}},
6909			uniformmatrix3x2fv: {let proc = get_proc_address("glUniformMatrix3x2fv"); if proc == null() {dummy_pfngluniformmatrix3x2fvproc} else {unsafe{transmute(proc)}}},
6910			uniformmatrix2x4fv: {let proc = get_proc_address("glUniformMatrix2x4fv"); if proc == null() {dummy_pfngluniformmatrix2x4fvproc} else {unsafe{transmute(proc)}}},
6911			uniformmatrix4x2fv: {let proc = get_proc_address("glUniformMatrix4x2fv"); if proc == null() {dummy_pfngluniformmatrix4x2fvproc} else {unsafe{transmute(proc)}}},
6912			uniformmatrix3x4fv: {let proc = get_proc_address("glUniformMatrix3x4fv"); if proc == null() {dummy_pfngluniformmatrix3x4fvproc} else {unsafe{transmute(proc)}}},
6913			uniformmatrix4x3fv: {let proc = get_proc_address("glUniformMatrix4x3fv"); if proc == null() {dummy_pfngluniformmatrix4x3fvproc} else {unsafe{transmute(proc)}}},
6914		}
6915	}
6916	#[inline(always)]
6917	pub fn get_available(&self) -> bool {
6918		self.available
6919	}
6920}
6921
6922impl Default for Version21 {
6923	fn default() -> Self {
6924		Self {
6925			available: false,
6926			geterror: dummy_pfnglgeterrorproc,
6927			uniformmatrix2x3fv: dummy_pfngluniformmatrix2x3fvproc,
6928			uniformmatrix3x2fv: dummy_pfngluniformmatrix3x2fvproc,
6929			uniformmatrix2x4fv: dummy_pfngluniformmatrix2x4fvproc,
6930			uniformmatrix4x2fv: dummy_pfngluniformmatrix4x2fvproc,
6931			uniformmatrix3x4fv: dummy_pfngluniformmatrix3x4fvproc,
6932			uniformmatrix4x3fv: dummy_pfngluniformmatrix4x3fvproc,
6933		}
6934	}
6935}
6936impl Debug for Version21 {
6937	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
6938		if self.available {
6939			f.debug_struct("Version21")
6940			.field("available", &self.available)
6941			.field("uniformmatrix2x3fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix2x3fv) == (dummy_pfngluniformmatrix2x3fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX2X3FVPROC>()} else {&self.uniformmatrix2x3fv}})
6942			.field("uniformmatrix3x2fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix3x2fv) == (dummy_pfngluniformmatrix3x2fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX3X2FVPROC>()} else {&self.uniformmatrix3x2fv}})
6943			.field("uniformmatrix2x4fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix2x4fv) == (dummy_pfngluniformmatrix2x4fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX2X4FVPROC>()} else {&self.uniformmatrix2x4fv}})
6944			.field("uniformmatrix4x2fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix4x2fv) == (dummy_pfngluniformmatrix4x2fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX4X2FVPROC>()} else {&self.uniformmatrix4x2fv}})
6945			.field("uniformmatrix3x4fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix3x4fv) == (dummy_pfngluniformmatrix3x4fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX3X4FVPROC>()} else {&self.uniformmatrix3x4fv}})
6946			.field("uniformmatrix4x3fv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix4x3fv) == (dummy_pfngluniformmatrix4x3fvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX4X3FVPROC>()} else {&self.uniformmatrix4x3fv}})
6947			.finish()
6948		} else {
6949			f.debug_struct("Version21")
6950			.field("available", &self.available)
6951			.finish_non_exhaustive()
6952		}
6953	}
6954}
6955pub type GLhalf = khronos_uint16_t;
6956type PFNGLCOLORMASKIPROC = extern "system" fn(GLuint, GLboolean, GLboolean, GLboolean, GLboolean);
6957type PFNGLGETBOOLEANI_VPROC = extern "system" fn(GLenum, GLuint, *mut GLboolean);
6958type PFNGLGETINTEGERI_VPROC = extern "system" fn(GLenum, GLuint, *mut GLint);
6959type PFNGLENABLEIPROC = extern "system" fn(GLenum, GLuint);
6960type PFNGLDISABLEIPROC = extern "system" fn(GLenum, GLuint);
6961type PFNGLISENABLEDIPROC = extern "system" fn(GLenum, GLuint) -> GLboolean;
6962type PFNGLBEGINTRANSFORMFEEDBACKPROC = extern "system" fn(GLenum);
6963type PFNGLENDTRANSFORMFEEDBACKPROC = extern "system" fn();
6964type PFNGLBINDBUFFERRANGEPROC = extern "system" fn(GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);
6965type PFNGLBINDBUFFERBASEPROC = extern "system" fn(GLenum, GLuint, GLuint);
6966type PFNGLTRANSFORMFEEDBACKVARYINGSPROC = extern "system" fn(GLuint, GLsizei, *const *const GLchar, GLenum);
6967type PFNGLGETTRANSFORMFEEDBACKVARYINGPROC = extern "system" fn(GLuint, GLuint, GLsizei, *mut GLsizei, *mut GLsizei, *mut GLenum, *mut GLchar);
6968type PFNGLCLAMPCOLORPROC = extern "system" fn(GLenum, GLenum);
6969type PFNGLBEGINCONDITIONALRENDERPROC = extern "system" fn(GLuint, GLenum);
6970type PFNGLENDCONDITIONALRENDERPROC = extern "system" fn();
6971type PFNGLVERTEXATTRIBIPOINTERPROC = extern "system" fn(GLuint, GLint, GLenum, GLsizei, *const c_void);
6972type PFNGLGETVERTEXATTRIBIIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
6973type PFNGLGETVERTEXATTRIBIUIVPROC = extern "system" fn(GLuint, GLenum, *mut GLuint);
6974type PFNGLVERTEXATTRIBI1IPROC = extern "system" fn(GLuint, GLint);
6975type PFNGLVERTEXATTRIBI2IPROC = extern "system" fn(GLuint, GLint, GLint);
6976type PFNGLVERTEXATTRIBI3IPROC = extern "system" fn(GLuint, GLint, GLint, GLint);
6977type PFNGLVERTEXATTRIBI4IPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint);
6978type PFNGLVERTEXATTRIBI1UIPROC = extern "system" fn(GLuint, GLuint);
6979type PFNGLVERTEXATTRIBI2UIPROC = extern "system" fn(GLuint, GLuint, GLuint);
6980type PFNGLVERTEXATTRIBI3UIPROC = extern "system" fn(GLuint, GLuint, GLuint, GLuint);
6981type PFNGLVERTEXATTRIBI4UIPROC = extern "system" fn(GLuint, GLuint, GLuint, GLuint, GLuint);
6982type PFNGLVERTEXATTRIBI1IVPROC = extern "system" fn(GLuint, *const GLint);
6983type PFNGLVERTEXATTRIBI2IVPROC = extern "system" fn(GLuint, *const GLint);
6984type PFNGLVERTEXATTRIBI3IVPROC = extern "system" fn(GLuint, *const GLint);
6985type PFNGLVERTEXATTRIBI4IVPROC = extern "system" fn(GLuint, *const GLint);
6986type PFNGLVERTEXATTRIBI1UIVPROC = extern "system" fn(GLuint, *const GLuint);
6987type PFNGLVERTEXATTRIBI2UIVPROC = extern "system" fn(GLuint, *const GLuint);
6988type PFNGLVERTEXATTRIBI3UIVPROC = extern "system" fn(GLuint, *const GLuint);
6989type PFNGLVERTEXATTRIBI4UIVPROC = extern "system" fn(GLuint, *const GLuint);
6990type PFNGLVERTEXATTRIBI4BVPROC = extern "system" fn(GLuint, *const GLbyte);
6991type PFNGLVERTEXATTRIBI4SVPROC = extern "system" fn(GLuint, *const GLshort);
6992type PFNGLVERTEXATTRIBI4UBVPROC = extern "system" fn(GLuint, *const GLubyte);
6993type PFNGLVERTEXATTRIBI4USVPROC = extern "system" fn(GLuint, *const GLushort);
6994type PFNGLGETUNIFORMUIVPROC = extern "system" fn(GLuint, GLint, *mut GLuint);
6995type PFNGLBINDFRAGDATALOCATIONPROC = extern "system" fn(GLuint, GLuint, *const GLchar);
6996type PFNGLGETFRAGDATALOCATIONPROC = extern "system" fn(GLuint, *const GLchar) -> GLint;
6997type PFNGLUNIFORM1UIPROC = extern "system" fn(GLint, GLuint);
6998type PFNGLUNIFORM2UIPROC = extern "system" fn(GLint, GLuint, GLuint);
6999type PFNGLUNIFORM3UIPROC = extern "system" fn(GLint, GLuint, GLuint, GLuint);
7000type PFNGLUNIFORM4UIPROC = extern "system" fn(GLint, GLuint, GLuint, GLuint, GLuint);
7001type PFNGLUNIFORM1UIVPROC = extern "system" fn(GLint, GLsizei, *const GLuint);
7002type PFNGLUNIFORM2UIVPROC = extern "system" fn(GLint, GLsizei, *const GLuint);
7003type PFNGLUNIFORM3UIVPROC = extern "system" fn(GLint, GLsizei, *const GLuint);
7004type PFNGLUNIFORM4UIVPROC = extern "system" fn(GLint, GLsizei, *const GLuint);
7005type PFNGLTEXPARAMETERIIVPROC = extern "system" fn(GLenum, GLenum, *const GLint);
7006type PFNGLTEXPARAMETERIUIVPROC = extern "system" fn(GLenum, GLenum, *const GLuint);
7007type PFNGLGETTEXPARAMETERIIVPROC = extern "system" fn(GLenum, GLenum, *mut GLint);
7008type PFNGLGETTEXPARAMETERIUIVPROC = extern "system" fn(GLenum, GLenum, *mut GLuint);
7009type PFNGLCLEARBUFFERIVPROC = extern "system" fn(GLenum, GLint, *const GLint);
7010type PFNGLCLEARBUFFERUIVPROC = extern "system" fn(GLenum, GLint, *const GLuint);
7011type PFNGLCLEARBUFFERFVPROC = extern "system" fn(GLenum, GLint, *const GLfloat);
7012type PFNGLCLEARBUFFERFIPROC = extern "system" fn(GLenum, GLint, GLfloat, GLint);
7013type PFNGLGETSTRINGIPROC = extern "system" fn(GLenum, GLuint) -> *const GLubyte;
7014type PFNGLISRENDERBUFFERPROC = extern "system" fn(GLuint) -> GLboolean;
7015type PFNGLBINDRENDERBUFFERPROC = extern "system" fn(GLenum, GLuint);
7016type PFNGLDELETERENDERBUFFERSPROC = extern "system" fn(GLsizei, *const GLuint);
7017type PFNGLGENRENDERBUFFERSPROC = extern "system" fn(GLsizei, *mut GLuint);
7018type PFNGLRENDERBUFFERSTORAGEPROC = extern "system" fn(GLenum, GLenum, GLsizei, GLsizei);
7019type PFNGLGETRENDERBUFFERPARAMETERIVPROC = extern "system" fn(GLenum, GLenum, *mut GLint);
7020type PFNGLISFRAMEBUFFERPROC = extern "system" fn(GLuint) -> GLboolean;
7021type PFNGLBINDFRAMEBUFFERPROC = extern "system" fn(GLenum, GLuint);
7022type PFNGLDELETEFRAMEBUFFERSPROC = extern "system" fn(GLsizei, *const GLuint);
7023type PFNGLGENFRAMEBUFFERSPROC = extern "system" fn(GLsizei, *mut GLuint);
7024type PFNGLCHECKFRAMEBUFFERSTATUSPROC = extern "system" fn(GLenum) -> GLenum;
7025type PFNGLFRAMEBUFFERTEXTURE1DPROC = extern "system" fn(GLenum, GLenum, GLenum, GLuint, GLint);
7026type PFNGLFRAMEBUFFERTEXTURE2DPROC = extern "system" fn(GLenum, GLenum, GLenum, GLuint, GLint);
7027type PFNGLFRAMEBUFFERTEXTURE3DPROC = extern "system" fn(GLenum, GLenum, GLenum, GLuint, GLint, GLint);
7028type PFNGLFRAMEBUFFERRENDERBUFFERPROC = extern "system" fn(GLenum, GLenum, GLenum, GLuint);
7029type PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC = extern "system" fn(GLenum, GLenum, GLenum, *mut GLint);
7030type PFNGLGENERATEMIPMAPPROC = extern "system" fn(GLenum);
7031type PFNGLBLITFRAMEBUFFERPROC = extern "system" fn(GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
7032type PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC = extern "system" fn(GLenum, GLsizei, GLenum, GLsizei, GLsizei);
7033type PFNGLFRAMEBUFFERTEXTURELAYERPROC = extern "system" fn(GLenum, GLenum, GLuint, GLint, GLint);
7034type PFNGLMAPBUFFERRANGEPROC = extern "system" fn(GLenum, GLintptr, GLsizeiptr, GLbitfield) -> *mut c_void;
7035type PFNGLFLUSHMAPPEDBUFFERRANGEPROC = extern "system" fn(GLenum, GLintptr, GLsizeiptr);
7036type PFNGLBINDVERTEXARRAYPROC = extern "system" fn(GLuint);
7037type PFNGLDELETEVERTEXARRAYSPROC = extern "system" fn(GLsizei, *const GLuint);
7038type PFNGLGENVERTEXARRAYSPROC = extern "system" fn(GLsizei, *mut GLuint);
7039type PFNGLISVERTEXARRAYPROC = extern "system" fn(GLuint) -> GLboolean;
7040extern "system" fn dummy_pfnglcolormaskiproc (_: GLuint, _: GLboolean, _: GLboolean, _: GLboolean, _: GLboolean) {
7041	panic!("OpenGL function pointer `glColorMaski()` is null.")
7042}
7043extern "system" fn dummy_pfnglgetbooleani_vproc (_: GLenum, _: GLuint, _: *mut GLboolean) {
7044	panic!("OpenGL function pointer `glGetBooleani_v()` is null.")
7045}
7046extern "system" fn dummy_pfnglgetintegeri_vproc (_: GLenum, _: GLuint, _: *mut GLint) {
7047	panic!("OpenGL function pointer `glGetIntegeri_v()` is null.")
7048}
7049extern "system" fn dummy_pfnglenableiproc (_: GLenum, _: GLuint) {
7050	panic!("OpenGL function pointer `glEnablei()` is null.")
7051}
7052extern "system" fn dummy_pfngldisableiproc (_: GLenum, _: GLuint) {
7053	panic!("OpenGL function pointer `glDisablei()` is null.")
7054}
7055extern "system" fn dummy_pfnglisenablediproc (_: GLenum, _: GLuint) -> GLboolean {
7056	panic!("OpenGL function pointer `glIsEnabledi()` is null.")
7057}
7058extern "system" fn dummy_pfnglbegintransformfeedbackproc (_: GLenum) {
7059	panic!("OpenGL function pointer `glBeginTransformFeedback()` is null.")
7060}
7061extern "system" fn dummy_pfnglendtransformfeedbackproc () {
7062	panic!("OpenGL function pointer `glEndTransformFeedback()` is null.")
7063}
7064extern "system" fn dummy_pfnglbindbufferrangeproc (_: GLenum, _: GLuint, _: GLuint, _: GLintptr, _: GLsizeiptr) {
7065	panic!("OpenGL function pointer `glBindBufferRange()` is null.")
7066}
7067extern "system" fn dummy_pfnglbindbufferbaseproc (_: GLenum, _: GLuint, _: GLuint) {
7068	panic!("OpenGL function pointer `glBindBufferBase()` is null.")
7069}
7070extern "system" fn dummy_pfngltransformfeedbackvaryingsproc (_: GLuint, _: GLsizei, _: *const *const GLchar, _: GLenum) {
7071	panic!("OpenGL function pointer `glTransformFeedbackVaryings()` is null.")
7072}
7073extern "system" fn dummy_pfnglgettransformfeedbackvaryingproc (_: GLuint, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLsizei, _: *mut GLenum, _: *mut GLchar) {
7074	panic!("OpenGL function pointer `glGetTransformFeedbackVarying()` is null.")
7075}
7076extern "system" fn dummy_pfnglclampcolorproc (_: GLenum, _: GLenum) {
7077	panic!("OpenGL function pointer `glClampColor()` is null.")
7078}
7079extern "system" fn dummy_pfnglbeginconditionalrenderproc (_: GLuint, _: GLenum) {
7080	panic!("OpenGL function pointer `glBeginConditionalRender()` is null.")
7081}
7082extern "system" fn dummy_pfnglendconditionalrenderproc () {
7083	panic!("OpenGL function pointer `glEndConditionalRender()` is null.")
7084}
7085extern "system" fn dummy_pfnglvertexattribipointerproc (_: GLuint, _: GLint, _: GLenum, _: GLsizei, _: *const c_void) {
7086	panic!("OpenGL function pointer `glVertexAttribIPointer()` is null.")
7087}
7088extern "system" fn dummy_pfnglgetvertexattribiivproc (_: GLuint, _: GLenum, _: *mut GLint) {
7089	panic!("OpenGL function pointer `glGetVertexAttribIiv()` is null.")
7090}
7091extern "system" fn dummy_pfnglgetvertexattribiuivproc (_: GLuint, _: GLenum, _: *mut GLuint) {
7092	panic!("OpenGL function pointer `glGetVertexAttribIuiv()` is null.")
7093}
7094extern "system" fn dummy_pfnglvertexattribi1iproc (_: GLuint, _: GLint) {
7095	panic!("OpenGL function pointer `glVertexAttribI1i()` is null.")
7096}
7097extern "system" fn dummy_pfnglvertexattribi2iproc (_: GLuint, _: GLint, _: GLint) {
7098	panic!("OpenGL function pointer `glVertexAttribI2i()` is null.")
7099}
7100extern "system" fn dummy_pfnglvertexattribi3iproc (_: GLuint, _: GLint, _: GLint, _: GLint) {
7101	panic!("OpenGL function pointer `glVertexAttribI3i()` is null.")
7102}
7103extern "system" fn dummy_pfnglvertexattribi4iproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint) {
7104	panic!("OpenGL function pointer `glVertexAttribI4i()` is null.")
7105}
7106extern "system" fn dummy_pfnglvertexattribi1uiproc (_: GLuint, _: GLuint) {
7107	panic!("OpenGL function pointer `glVertexAttribI1ui()` is null.")
7108}
7109extern "system" fn dummy_pfnglvertexattribi2uiproc (_: GLuint, _: GLuint, _: GLuint) {
7110	panic!("OpenGL function pointer `glVertexAttribI2ui()` is null.")
7111}
7112extern "system" fn dummy_pfnglvertexattribi3uiproc (_: GLuint, _: GLuint, _: GLuint, _: GLuint) {
7113	panic!("OpenGL function pointer `glVertexAttribI3ui()` is null.")
7114}
7115extern "system" fn dummy_pfnglvertexattribi4uiproc (_: GLuint, _: GLuint, _: GLuint, _: GLuint, _: GLuint) {
7116	panic!("OpenGL function pointer `glVertexAttribI4ui()` is null.")
7117}
7118extern "system" fn dummy_pfnglvertexattribi1ivproc (_: GLuint, _: *const GLint) {
7119	panic!("OpenGL function pointer `glVertexAttribI1iv()` is null.")
7120}
7121extern "system" fn dummy_pfnglvertexattribi2ivproc (_: GLuint, _: *const GLint) {
7122	panic!("OpenGL function pointer `glVertexAttribI2iv()` is null.")
7123}
7124extern "system" fn dummy_pfnglvertexattribi3ivproc (_: GLuint, _: *const GLint) {
7125	panic!("OpenGL function pointer `glVertexAttribI3iv()` is null.")
7126}
7127extern "system" fn dummy_pfnglvertexattribi4ivproc (_: GLuint, _: *const GLint) {
7128	panic!("OpenGL function pointer `glVertexAttribI4iv()` is null.")
7129}
7130extern "system" fn dummy_pfnglvertexattribi1uivproc (_: GLuint, _: *const GLuint) {
7131	panic!("OpenGL function pointer `glVertexAttribI1uiv()` is null.")
7132}
7133extern "system" fn dummy_pfnglvertexattribi2uivproc (_: GLuint, _: *const GLuint) {
7134	panic!("OpenGL function pointer `glVertexAttribI2uiv()` is null.")
7135}
7136extern "system" fn dummy_pfnglvertexattribi3uivproc (_: GLuint, _: *const GLuint) {
7137	panic!("OpenGL function pointer `glVertexAttribI3uiv()` is null.")
7138}
7139extern "system" fn dummy_pfnglvertexattribi4uivproc (_: GLuint, _: *const GLuint) {
7140	panic!("OpenGL function pointer `glVertexAttribI4uiv()` is null.")
7141}
7142extern "system" fn dummy_pfnglvertexattribi4bvproc (_: GLuint, _: *const GLbyte) {
7143	panic!("OpenGL function pointer `glVertexAttribI4bv()` is null.")
7144}
7145extern "system" fn dummy_pfnglvertexattribi4svproc (_: GLuint, _: *const GLshort) {
7146	panic!("OpenGL function pointer `glVertexAttribI4sv()` is null.")
7147}
7148extern "system" fn dummy_pfnglvertexattribi4ubvproc (_: GLuint, _: *const GLubyte) {
7149	panic!("OpenGL function pointer `glVertexAttribI4ubv()` is null.")
7150}
7151extern "system" fn dummy_pfnglvertexattribi4usvproc (_: GLuint, _: *const GLushort) {
7152	panic!("OpenGL function pointer `glVertexAttribI4usv()` is null.")
7153}
7154extern "system" fn dummy_pfnglgetuniformuivproc (_: GLuint, _: GLint, _: *mut GLuint) {
7155	panic!("OpenGL function pointer `glGetUniformuiv()` is null.")
7156}
7157extern "system" fn dummy_pfnglbindfragdatalocationproc (_: GLuint, _: GLuint, _: *const GLchar) {
7158	panic!("OpenGL function pointer `glBindFragDataLocation()` is null.")
7159}
7160extern "system" fn dummy_pfnglgetfragdatalocationproc (_: GLuint, _: *const GLchar) -> GLint {
7161	panic!("OpenGL function pointer `glGetFragDataLocation()` is null.")
7162}
7163extern "system" fn dummy_pfngluniform1uiproc (_: GLint, _: GLuint) {
7164	panic!("OpenGL function pointer `glUniform1ui()` is null.")
7165}
7166extern "system" fn dummy_pfngluniform2uiproc (_: GLint, _: GLuint, _: GLuint) {
7167	panic!("OpenGL function pointer `glUniform2ui()` is null.")
7168}
7169extern "system" fn dummy_pfngluniform3uiproc (_: GLint, _: GLuint, _: GLuint, _: GLuint) {
7170	panic!("OpenGL function pointer `glUniform3ui()` is null.")
7171}
7172extern "system" fn dummy_pfngluniform4uiproc (_: GLint, _: GLuint, _: GLuint, _: GLuint, _: GLuint) {
7173	panic!("OpenGL function pointer `glUniform4ui()` is null.")
7174}
7175extern "system" fn dummy_pfngluniform1uivproc (_: GLint, _: GLsizei, _: *const GLuint) {
7176	panic!("OpenGL function pointer `glUniform1uiv()` is null.")
7177}
7178extern "system" fn dummy_pfngluniform2uivproc (_: GLint, _: GLsizei, _: *const GLuint) {
7179	panic!("OpenGL function pointer `glUniform2uiv()` is null.")
7180}
7181extern "system" fn dummy_pfngluniform3uivproc (_: GLint, _: GLsizei, _: *const GLuint) {
7182	panic!("OpenGL function pointer `glUniform3uiv()` is null.")
7183}
7184extern "system" fn dummy_pfngluniform4uivproc (_: GLint, _: GLsizei, _: *const GLuint) {
7185	panic!("OpenGL function pointer `glUniform4uiv()` is null.")
7186}
7187extern "system" fn dummy_pfngltexparameteriivproc (_: GLenum, _: GLenum, _: *const GLint) {
7188	panic!("OpenGL function pointer `glTexParameterIiv()` is null.")
7189}
7190extern "system" fn dummy_pfngltexparameteriuivproc (_: GLenum, _: GLenum, _: *const GLuint) {
7191	panic!("OpenGL function pointer `glTexParameterIuiv()` is null.")
7192}
7193extern "system" fn dummy_pfnglgettexparameteriivproc (_: GLenum, _: GLenum, _: *mut GLint) {
7194	panic!("OpenGL function pointer `glGetTexParameterIiv()` is null.")
7195}
7196extern "system" fn dummy_pfnglgettexparameteriuivproc (_: GLenum, _: GLenum, _: *mut GLuint) {
7197	panic!("OpenGL function pointer `glGetTexParameterIuiv()` is null.")
7198}
7199extern "system" fn dummy_pfnglclearbufferivproc (_: GLenum, _: GLint, _: *const GLint) {
7200	panic!("OpenGL function pointer `glClearBufferiv()` is null.")
7201}
7202extern "system" fn dummy_pfnglclearbufferuivproc (_: GLenum, _: GLint, _: *const GLuint) {
7203	panic!("OpenGL function pointer `glClearBufferuiv()` is null.")
7204}
7205extern "system" fn dummy_pfnglclearbufferfvproc (_: GLenum, _: GLint, _: *const GLfloat) {
7206	panic!("OpenGL function pointer `glClearBufferfv()` is null.")
7207}
7208extern "system" fn dummy_pfnglclearbufferfiproc (_: GLenum, _: GLint, _: GLfloat, _: GLint) {
7209	panic!("OpenGL function pointer `glClearBufferfi()` is null.")
7210}
7211extern "system" fn dummy_pfnglgetstringiproc (_: GLenum, _: GLuint) -> *const GLubyte {
7212	panic!("OpenGL function pointer `glGetStringi()` is null.")
7213}
7214extern "system" fn dummy_pfnglisrenderbufferproc (_: GLuint) -> GLboolean {
7215	panic!("OpenGL function pointer `glIsRenderbuffer()` is null.")
7216}
7217extern "system" fn dummy_pfnglbindrenderbufferproc (_: GLenum, _: GLuint) {
7218	panic!("OpenGL function pointer `glBindRenderbuffer()` is null.")
7219}
7220extern "system" fn dummy_pfngldeleterenderbuffersproc (_: GLsizei, _: *const GLuint) {
7221	panic!("OpenGL function pointer `glDeleteRenderbuffers()` is null.")
7222}
7223extern "system" fn dummy_pfnglgenrenderbuffersproc (_: GLsizei, _: *mut GLuint) {
7224	panic!("OpenGL function pointer `glGenRenderbuffers()` is null.")
7225}
7226extern "system" fn dummy_pfnglrenderbufferstorageproc (_: GLenum, _: GLenum, _: GLsizei, _: GLsizei) {
7227	panic!("OpenGL function pointer `glRenderbufferStorage()` is null.")
7228}
7229extern "system" fn dummy_pfnglgetrenderbufferparameterivproc (_: GLenum, _: GLenum, _: *mut GLint) {
7230	panic!("OpenGL function pointer `glGetRenderbufferParameteriv()` is null.")
7231}
7232extern "system" fn dummy_pfnglisframebufferproc (_: GLuint) -> GLboolean {
7233	panic!("OpenGL function pointer `glIsFramebuffer()` is null.")
7234}
7235extern "system" fn dummy_pfnglbindframebufferproc (_: GLenum, _: GLuint) {
7236	panic!("OpenGL function pointer `glBindFramebuffer()` is null.")
7237}
7238extern "system" fn dummy_pfngldeleteframebuffersproc (_: GLsizei, _: *const GLuint) {
7239	panic!("OpenGL function pointer `glDeleteFramebuffers()` is null.")
7240}
7241extern "system" fn dummy_pfnglgenframebuffersproc (_: GLsizei, _: *mut GLuint) {
7242	panic!("OpenGL function pointer `glGenFramebuffers()` is null.")
7243}
7244extern "system" fn dummy_pfnglcheckframebufferstatusproc (_: GLenum) -> GLenum {
7245	panic!("OpenGL function pointer `glCheckFramebufferStatus()` is null.")
7246}
7247extern "system" fn dummy_pfnglframebuffertexture1dproc (_: GLenum, _: GLenum, _: GLenum, _: GLuint, _: GLint) {
7248	panic!("OpenGL function pointer `glFramebufferTexture1D()` is null.")
7249}
7250extern "system" fn dummy_pfnglframebuffertexture2dproc (_: GLenum, _: GLenum, _: GLenum, _: GLuint, _: GLint) {
7251	panic!("OpenGL function pointer `glFramebufferTexture2D()` is null.")
7252}
7253extern "system" fn dummy_pfnglframebuffertexture3dproc (_: GLenum, _: GLenum, _: GLenum, _: GLuint, _: GLint, _: GLint) {
7254	panic!("OpenGL function pointer `glFramebufferTexture3D()` is null.")
7255}
7256extern "system" fn dummy_pfnglframebufferrenderbufferproc (_: GLenum, _: GLenum, _: GLenum, _: GLuint) {
7257	panic!("OpenGL function pointer `glFramebufferRenderbuffer()` is null.")
7258}
7259extern "system" fn dummy_pfnglgetframebufferattachmentparameterivproc (_: GLenum, _: GLenum, _: GLenum, _: *mut GLint) {
7260	panic!("OpenGL function pointer `glGetFramebufferAttachmentParameteriv()` is null.")
7261}
7262extern "system" fn dummy_pfnglgeneratemipmapproc (_: GLenum) {
7263	panic!("OpenGL function pointer `glGenerateMipmap()` is null.")
7264}
7265extern "system" fn dummy_pfnglblitframebufferproc (_: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLbitfield, _: GLenum) {
7266	panic!("OpenGL function pointer `glBlitFramebuffer()` is null.")
7267}
7268extern "system" fn dummy_pfnglrenderbufferstoragemultisampleproc (_: GLenum, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei) {
7269	panic!("OpenGL function pointer `glRenderbufferStorageMultisample()` is null.")
7270}
7271extern "system" fn dummy_pfnglframebuffertexturelayerproc (_: GLenum, _: GLenum, _: GLuint, _: GLint, _: GLint) {
7272	panic!("OpenGL function pointer `glFramebufferTextureLayer()` is null.")
7273}
7274extern "system" fn dummy_pfnglmapbufferrangeproc (_: GLenum, _: GLintptr, _: GLsizeiptr, _: GLbitfield) -> *mut c_void {
7275	panic!("OpenGL function pointer `glMapBufferRange()` is null.")
7276}
7277extern "system" fn dummy_pfnglflushmappedbufferrangeproc (_: GLenum, _: GLintptr, _: GLsizeiptr) {
7278	panic!("OpenGL function pointer `glFlushMappedBufferRange()` is null.")
7279}
7280extern "system" fn dummy_pfnglbindvertexarrayproc (_: GLuint) {
7281	panic!("OpenGL function pointer `glBindVertexArray()` is null.")
7282}
7283extern "system" fn dummy_pfngldeletevertexarraysproc (_: GLsizei, _: *const GLuint) {
7284	panic!("OpenGL function pointer `glDeleteVertexArrays()` is null.")
7285}
7286extern "system" fn dummy_pfnglgenvertexarraysproc (_: GLsizei, _: *mut GLuint) {
7287	panic!("OpenGL function pointer `glGenVertexArrays()` is null.")
7288}
7289extern "system" fn dummy_pfnglisvertexarrayproc (_: GLuint) -> GLboolean {
7290	panic!("OpenGL function pointer `glIsVertexArray()` is null.")
7291}
7292pub const GL_COMPARE_REF_TO_TEXTURE: GLenum = 0x884E;
7293pub const GL_CLIP_DISTANCE0: GLenum = 0x3000;
7294pub const GL_CLIP_DISTANCE1: GLenum = 0x3001;
7295pub const GL_CLIP_DISTANCE2: GLenum = 0x3002;
7296pub const GL_CLIP_DISTANCE3: GLenum = 0x3003;
7297pub const GL_CLIP_DISTANCE4: GLenum = 0x3004;
7298pub const GL_CLIP_DISTANCE5: GLenum = 0x3005;
7299pub const GL_CLIP_DISTANCE6: GLenum = 0x3006;
7300pub const GL_CLIP_DISTANCE7: GLenum = 0x3007;
7301pub const GL_MAX_CLIP_DISTANCES: GLenum = 0x0D32;
7302pub const GL_MAJOR_VERSION: GLenum = 0x821B;
7303pub const GL_MINOR_VERSION: GLenum = 0x821C;
7304pub const GL_NUM_EXTENSIONS: GLenum = 0x821D;
7305pub const GL_CONTEXT_FLAGS: GLenum = 0x821E;
7306pub const GL_COMPRESSED_RED: GLenum = 0x8225;
7307pub const GL_COMPRESSED_RG: GLenum = 0x8226;
7308pub const GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT: GLbitfield = 0x00000001;
7309pub const GL_RGBA32F: GLenum = 0x8814;
7310pub const GL_RGB32F: GLenum = 0x8815;
7311pub const GL_RGBA16F: GLenum = 0x881A;
7312pub const GL_RGB16F: GLenum = 0x881B;
7313pub const GL_VERTEX_ATTRIB_ARRAY_INTEGER: GLenum = 0x88FD;
7314pub const GL_MAX_ARRAY_TEXTURE_LAYERS: GLenum = 0x88FF;
7315pub const GL_MIN_PROGRAM_TEXEL_OFFSET: GLenum = 0x8904;
7316pub const GL_MAX_PROGRAM_TEXEL_OFFSET: GLenum = 0x8905;
7317pub const GL_CLAMP_READ_COLOR: GLenum = 0x891C;
7318pub const GL_FIXED_ONLY: GLenum = 0x891D;
7319pub const GL_MAX_VARYING_COMPONENTS: GLenum = 0x8B4B;
7320pub const GL_TEXTURE_1D_ARRAY: GLenum = 0x8C18;
7321pub const GL_PROXY_TEXTURE_1D_ARRAY: GLenum = 0x8C19;
7322pub const GL_TEXTURE_2D_ARRAY: GLenum = 0x8C1A;
7323pub const GL_PROXY_TEXTURE_2D_ARRAY: GLenum = 0x8C1B;
7324pub const GL_TEXTURE_BINDING_1D_ARRAY: GLenum = 0x8C1C;
7325pub const GL_TEXTURE_BINDING_2D_ARRAY: GLenum = 0x8C1D;
7326pub const GL_R11F_G11F_B10F: GLenum = 0x8C3A;
7327pub const GL_UNSIGNED_INT_10F_11F_11F_REV: GLenum = 0x8C3B;
7328pub const GL_RGB9_E5: GLenum = 0x8C3D;
7329pub const GL_UNSIGNED_INT_5_9_9_9_REV: GLenum = 0x8C3E;
7330pub const GL_TEXTURE_SHARED_SIZE: GLenum = 0x8C3F;
7331pub const GL_TRANSFORM_FEEDBACK_VARYING_MAX_LENGTH: GLenum = 0x8C76;
7332pub const GL_TRANSFORM_FEEDBACK_BUFFER_MODE: GLenum = 0x8C7F;
7333pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS: GLenum = 0x8C80;
7334pub const GL_TRANSFORM_FEEDBACK_VARYINGS: GLenum = 0x8C83;
7335pub const GL_TRANSFORM_FEEDBACK_BUFFER_START: GLenum = 0x8C84;
7336pub const GL_TRANSFORM_FEEDBACK_BUFFER_SIZE: GLenum = 0x8C85;
7337pub const GL_PRIMITIVES_GENERATED: GLenum = 0x8C87;
7338pub const GL_TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN: GLenum = 0x8C88;
7339pub const GL_RASTERIZER_DISCARD: GLenum = 0x8C89;
7340pub const GL_MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS: GLenum = 0x8C8A;
7341pub const GL_MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS: GLenum = 0x8C8B;
7342pub const GL_INTERLEAVED_ATTRIBS: GLenum = 0x8C8C;
7343pub const GL_SEPARATE_ATTRIBS: GLenum = 0x8C8D;
7344pub const GL_TRANSFORM_FEEDBACK_BUFFER: GLenum = 0x8C8E;
7345pub const GL_TRANSFORM_FEEDBACK_BUFFER_BINDING: GLenum = 0x8C8F;
7346pub const GL_RGBA32UI: GLenum = 0x8D70;
7347pub const GL_RGB32UI: GLenum = 0x8D71;
7348pub const GL_RGBA16UI: GLenum = 0x8D76;
7349pub const GL_RGB16UI: GLenum = 0x8D77;
7350pub const GL_RGBA8UI: GLenum = 0x8D7C;
7351pub const GL_RGB8UI: GLenum = 0x8D7D;
7352pub const GL_RGBA32I: GLenum = 0x8D82;
7353pub const GL_RGB32I: GLenum = 0x8D83;
7354pub const GL_RGBA16I: GLenum = 0x8D88;
7355pub const GL_RGB16I: GLenum = 0x8D89;
7356pub const GL_RGBA8I: GLenum = 0x8D8E;
7357pub const GL_RGB8I: GLenum = 0x8D8F;
7358pub const GL_RED_INTEGER: GLenum = 0x8D94;
7359pub const GL_GREEN_INTEGER: GLenum = 0x8D95;
7360pub const GL_BLUE_INTEGER: GLenum = 0x8D96;
7361pub const GL_RGB_INTEGER: GLenum = 0x8D98;
7362pub const GL_RGBA_INTEGER: GLenum = 0x8D99;
7363pub const GL_BGR_INTEGER: GLenum = 0x8D9A;
7364pub const GL_BGRA_INTEGER: GLenum = 0x8D9B;
7365pub const GL_SAMPLER_1D_ARRAY: GLenum = 0x8DC0;
7366pub const GL_SAMPLER_2D_ARRAY: GLenum = 0x8DC1;
7367pub const GL_SAMPLER_1D_ARRAY_SHADOW: GLenum = 0x8DC3;
7368pub const GL_SAMPLER_2D_ARRAY_SHADOW: GLenum = 0x8DC4;
7369pub const GL_SAMPLER_CUBE_SHADOW: GLenum = 0x8DC5;
7370pub const GL_UNSIGNED_INT_VEC2: GLenum = 0x8DC6;
7371pub const GL_UNSIGNED_INT_VEC3: GLenum = 0x8DC7;
7372pub const GL_UNSIGNED_INT_VEC4: GLenum = 0x8DC8;
7373pub const GL_INT_SAMPLER_1D: GLenum = 0x8DC9;
7374pub const GL_INT_SAMPLER_2D: GLenum = 0x8DCA;
7375pub const GL_INT_SAMPLER_3D: GLenum = 0x8DCB;
7376pub const GL_INT_SAMPLER_CUBE: GLenum = 0x8DCC;
7377pub const GL_INT_SAMPLER_1D_ARRAY: GLenum = 0x8DCE;
7378pub const GL_INT_SAMPLER_2D_ARRAY: GLenum = 0x8DCF;
7379pub const GL_UNSIGNED_INT_SAMPLER_1D: GLenum = 0x8DD1;
7380pub const GL_UNSIGNED_INT_SAMPLER_2D: GLenum = 0x8DD2;
7381pub const GL_UNSIGNED_INT_SAMPLER_3D: GLenum = 0x8DD3;
7382pub const GL_UNSIGNED_INT_SAMPLER_CUBE: GLenum = 0x8DD4;
7383pub const GL_UNSIGNED_INT_SAMPLER_1D_ARRAY: GLenum = 0x8DD6;
7384pub const GL_UNSIGNED_INT_SAMPLER_2D_ARRAY: GLenum = 0x8DD7;
7385pub const GL_QUERY_WAIT: GLenum = 0x8E13;
7386pub const GL_QUERY_NO_WAIT: GLenum = 0x8E14;
7387pub const GL_QUERY_BY_REGION_WAIT: GLenum = 0x8E15;
7388pub const GL_QUERY_BY_REGION_NO_WAIT: GLenum = 0x8E16;
7389pub const GL_BUFFER_ACCESS_FLAGS: GLenum = 0x911F;
7390pub const GL_BUFFER_MAP_LENGTH: GLenum = 0x9120;
7391pub const GL_BUFFER_MAP_OFFSET: GLenum = 0x9121;
7392pub const GL_DEPTH_COMPONENT32F: GLenum = 0x8CAC;
7393pub const GL_DEPTH32F_STENCIL8: GLenum = 0x8CAD;
7394pub const GL_FLOAT_32_UNSIGNED_INT_24_8_REV: GLenum = 0x8DAD;
7395pub const GL_INVALID_FRAMEBUFFER_OPERATION: GLenum = 0x0506;
7396pub const GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING: GLenum = 0x8210;
7397pub const GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE: GLenum = 0x8211;
7398pub const GL_FRAMEBUFFER_ATTACHMENT_RED_SIZE: GLenum = 0x8212;
7399pub const GL_FRAMEBUFFER_ATTACHMENT_GREEN_SIZE: GLenum = 0x8213;
7400pub const GL_FRAMEBUFFER_ATTACHMENT_BLUE_SIZE: GLenum = 0x8214;
7401pub const GL_FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE: GLenum = 0x8215;
7402pub const GL_FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE: GLenum = 0x8216;
7403pub const GL_FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE: GLenum = 0x8217;
7404pub const GL_FRAMEBUFFER_DEFAULT: GLenum = 0x8218;
7405pub const GL_FRAMEBUFFER_UNDEFINED: GLenum = 0x8219;
7406pub const GL_DEPTH_STENCIL_ATTACHMENT: GLenum = 0x821A;
7407pub const GL_MAX_RENDERBUFFER_SIZE: GLenum = 0x84E8;
7408pub const GL_DEPTH_STENCIL: GLenum = 0x84F9;
7409pub const GL_UNSIGNED_INT_24_8: GLenum = 0x84FA;
7410pub const GL_DEPTH24_STENCIL8: GLenum = 0x88F0;
7411pub const GL_TEXTURE_STENCIL_SIZE: GLenum = 0x88F1;
7412pub const GL_TEXTURE_RED_TYPE: GLenum = 0x8C10;
7413pub const GL_TEXTURE_GREEN_TYPE: GLenum = 0x8C11;
7414pub const GL_TEXTURE_BLUE_TYPE: GLenum = 0x8C12;
7415pub const GL_TEXTURE_ALPHA_TYPE: GLenum = 0x8C13;
7416pub const GL_TEXTURE_DEPTH_TYPE: GLenum = 0x8C16;
7417pub const GL_UNSIGNED_NORMALIZED: GLenum = 0x8C17;
7418pub const GL_FRAMEBUFFER_BINDING: GLenum = 0x8CA6;
7419pub const GL_DRAW_FRAMEBUFFER_BINDING: GLenum = 0x8CA6;
7420pub const GL_RENDERBUFFER_BINDING: GLenum = 0x8CA7;
7421pub const GL_READ_FRAMEBUFFER: GLenum = 0x8CA8;
7422pub const GL_DRAW_FRAMEBUFFER: GLenum = 0x8CA9;
7423pub const GL_READ_FRAMEBUFFER_BINDING: GLenum = 0x8CAA;
7424pub const GL_RENDERBUFFER_SAMPLES: GLenum = 0x8CAB;
7425pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE: GLenum = 0x8CD0;
7426pub const GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME: GLenum = 0x8CD1;
7427pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL: GLenum = 0x8CD2;
7428pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE: GLenum = 0x8CD3;
7429pub const GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER: GLenum = 0x8CD4;
7430pub const GL_FRAMEBUFFER_COMPLETE: GLenum = 0x8CD5;
7431pub const GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT: GLenum = 0x8CD6;
7432pub const GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: GLenum = 0x8CD7;
7433pub const GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: GLenum = 0x8CDB;
7434pub const GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER: GLenum = 0x8CDC;
7435pub const GL_FRAMEBUFFER_UNSUPPORTED: GLenum = 0x8CDD;
7436pub const GL_MAX_COLOR_ATTACHMENTS: GLenum = 0x8CDF;
7437pub const GL_COLOR_ATTACHMENT0: GLenum = 0x8CE0;
7438pub const GL_COLOR_ATTACHMENT1: GLenum = 0x8CE1;
7439pub const GL_COLOR_ATTACHMENT2: GLenum = 0x8CE2;
7440pub const GL_COLOR_ATTACHMENT3: GLenum = 0x8CE3;
7441pub const GL_COLOR_ATTACHMENT4: GLenum = 0x8CE4;
7442pub const GL_COLOR_ATTACHMENT5: GLenum = 0x8CE5;
7443pub const GL_COLOR_ATTACHMENT6: GLenum = 0x8CE6;
7444pub const GL_COLOR_ATTACHMENT7: GLenum = 0x8CE7;
7445pub const GL_COLOR_ATTACHMENT8: GLenum = 0x8CE8;
7446pub const GL_COLOR_ATTACHMENT9: GLenum = 0x8CE9;
7447pub const GL_COLOR_ATTACHMENT10: GLenum = 0x8CEA;
7448pub const GL_COLOR_ATTACHMENT11: GLenum = 0x8CEB;
7449pub const GL_COLOR_ATTACHMENT12: GLenum = 0x8CEC;
7450pub const GL_COLOR_ATTACHMENT13: GLenum = 0x8CED;
7451pub const GL_COLOR_ATTACHMENT14: GLenum = 0x8CEE;
7452pub const GL_COLOR_ATTACHMENT15: GLenum = 0x8CEF;
7453pub const GL_COLOR_ATTACHMENT16: GLenum = 0x8CF0;
7454pub const GL_COLOR_ATTACHMENT17: GLenum = 0x8CF1;
7455pub const GL_COLOR_ATTACHMENT18: GLenum = 0x8CF2;
7456pub const GL_COLOR_ATTACHMENT19: GLenum = 0x8CF3;
7457pub const GL_COLOR_ATTACHMENT20: GLenum = 0x8CF4;
7458pub const GL_COLOR_ATTACHMENT21: GLenum = 0x8CF5;
7459pub const GL_COLOR_ATTACHMENT22: GLenum = 0x8CF6;
7460pub const GL_COLOR_ATTACHMENT23: GLenum = 0x8CF7;
7461pub const GL_COLOR_ATTACHMENT24: GLenum = 0x8CF8;
7462pub const GL_COLOR_ATTACHMENT25: GLenum = 0x8CF9;
7463pub const GL_COLOR_ATTACHMENT26: GLenum = 0x8CFA;
7464pub const GL_COLOR_ATTACHMENT27: GLenum = 0x8CFB;
7465pub const GL_COLOR_ATTACHMENT28: GLenum = 0x8CFC;
7466pub const GL_COLOR_ATTACHMENT29: GLenum = 0x8CFD;
7467pub const GL_COLOR_ATTACHMENT30: GLenum = 0x8CFE;
7468pub const GL_COLOR_ATTACHMENT31: GLenum = 0x8CFF;
7469pub const GL_DEPTH_ATTACHMENT: GLenum = 0x8D00;
7470pub const GL_STENCIL_ATTACHMENT: GLenum = 0x8D20;
7471pub const GL_FRAMEBUFFER: GLenum = 0x8D40;
7472pub const GL_RENDERBUFFER: GLenum = 0x8D41;
7473pub const GL_RENDERBUFFER_WIDTH: GLenum = 0x8D42;
7474pub const GL_RENDERBUFFER_HEIGHT: GLenum = 0x8D43;
7475pub const GL_RENDERBUFFER_INTERNAL_FORMAT: GLenum = 0x8D44;
7476pub const GL_STENCIL_INDEX1: GLenum = 0x8D46;
7477pub const GL_STENCIL_INDEX4: GLenum = 0x8D47;
7478pub const GL_STENCIL_INDEX8: GLenum = 0x8D48;
7479pub const GL_STENCIL_INDEX16: GLenum = 0x8D49;
7480pub const GL_RENDERBUFFER_RED_SIZE: GLenum = 0x8D50;
7481pub const GL_RENDERBUFFER_GREEN_SIZE: GLenum = 0x8D51;
7482pub const GL_RENDERBUFFER_BLUE_SIZE: GLenum = 0x8D52;
7483pub const GL_RENDERBUFFER_ALPHA_SIZE: GLenum = 0x8D53;
7484pub const GL_RENDERBUFFER_DEPTH_SIZE: GLenum = 0x8D54;
7485pub const GL_RENDERBUFFER_STENCIL_SIZE: GLenum = 0x8D55;
7486pub const GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: GLenum = 0x8D56;
7487pub const GL_MAX_SAMPLES: GLenum = 0x8D57;
7488pub const GL_INDEX: GLenum = 0x8222;
7489pub const GL_TEXTURE_LUMINANCE_TYPE: GLenum = 0x8C14;
7490pub const GL_TEXTURE_INTENSITY_TYPE: GLenum = 0x8C15;
7491pub const GL_FRAMEBUFFER_SRGB: GLenum = 0x8DB9;
7492pub const GL_HALF_FLOAT: GLenum = 0x140B;
7493pub const GL_MAP_READ_BIT: GLbitfield = 0x0001;
7494pub const GL_MAP_WRITE_BIT: GLbitfield = 0x0002;
7495pub const GL_MAP_INVALIDATE_RANGE_BIT: GLbitfield = 0x0004;
7496pub const GL_MAP_INVALIDATE_BUFFER_BIT: GLbitfield = 0x0008;
7497pub const GL_MAP_FLUSH_EXPLICIT_BIT: GLbitfield = 0x0010;
7498pub const GL_MAP_UNSYNCHRONIZED_BIT: GLbitfield = 0x0020;
7499pub const GL_COMPRESSED_RED_RGTC1: GLenum = 0x8DBB;
7500pub const GL_COMPRESSED_SIGNED_RED_RGTC1: GLenum = 0x8DBC;
7501pub const GL_COMPRESSED_RG_RGTC2: GLenum = 0x8DBD;
7502pub const GL_COMPRESSED_SIGNED_RG_RGTC2: GLenum = 0x8DBE;
7503pub const GL_RG: GLenum = 0x8227;
7504pub const GL_RG_INTEGER: GLenum = 0x8228;
7505pub const GL_R8: GLenum = 0x8229;
7506pub const GL_R16: GLenum = 0x822A;
7507pub const GL_RG8: GLenum = 0x822B;
7508pub const GL_RG16: GLenum = 0x822C;
7509pub const GL_R16F: GLenum = 0x822D;
7510pub const GL_R32F: GLenum = 0x822E;
7511pub const GL_RG16F: GLenum = 0x822F;
7512pub const GL_RG32F: GLenum = 0x8230;
7513pub const GL_R8I: GLenum = 0x8231;
7514pub const GL_R8UI: GLenum = 0x8232;
7515pub const GL_R16I: GLenum = 0x8233;
7516pub const GL_R16UI: GLenum = 0x8234;
7517pub const GL_R32I: GLenum = 0x8235;
7518pub const GL_R32UI: GLenum = 0x8236;
7519pub const GL_RG8I: GLenum = 0x8237;
7520pub const GL_RG8UI: GLenum = 0x8238;
7521pub const GL_RG16I: GLenum = 0x8239;
7522pub const GL_RG16UI: GLenum = 0x823A;
7523pub const GL_RG32I: GLenum = 0x823B;
7524pub const GL_RG32UI: GLenum = 0x823C;
7525pub const GL_VERTEX_ARRAY_BINDING: GLenum = 0x85B5;
7526pub const GL_CLAMP_VERTEX_COLOR: GLenum = 0x891A;
7527pub const GL_CLAMP_FRAGMENT_COLOR: GLenum = 0x891B;
7528pub const GL_ALPHA_INTEGER: GLenum = 0x8D97;
7529
7530pub trait GL_3_0 {
7531	fn glGetError(&self) -> GLenum;
7532	fn glColorMaski(&self, index: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean) -> Result<()>;
7533	fn glGetBooleani_v(&self, target: GLenum, index: GLuint, data: *mut GLboolean) -> Result<()>;
7534	fn glGetIntegeri_v(&self, target: GLenum, index: GLuint, data: *mut GLint) -> Result<()>;
7535	fn glEnablei(&self, target: GLenum, index: GLuint) -> Result<()>;
7536	fn glDisablei(&self, target: GLenum, index: GLuint) -> Result<()>;
7537	fn glIsEnabledi(&self, target: GLenum, index: GLuint) -> Result<GLboolean>;
7538	fn glBeginTransformFeedback(&self, primitiveMode: GLenum) -> Result<()>;
7539	fn glEndTransformFeedback(&self) -> Result<()>;
7540	fn glBindBufferRange(&self, target: GLenum, index: GLuint, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()>;
7541	fn glBindBufferBase(&self, target: GLenum, index: GLuint, buffer: GLuint) -> Result<()>;
7542	fn glTransformFeedbackVaryings(&self, program: GLuint, count: GLsizei, varyings: *const *const GLchar, bufferMode: GLenum) -> Result<()>;
7543	fn glGetTransformFeedbackVarying(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLsizei, type_: *mut GLenum, name: *mut GLchar) -> Result<()>;
7544	fn glClampColor(&self, target: GLenum, clamp: GLenum) -> Result<()>;
7545	fn glBeginConditionalRender(&self, id: GLuint, mode: GLenum) -> Result<()>;
7546	fn glEndConditionalRender(&self) -> Result<()>;
7547	fn glVertexAttribIPointer(&self, index: GLuint, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()>;
7548	fn glGetVertexAttribIiv(&self, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
7549	fn glGetVertexAttribIuiv(&self, index: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()>;
7550	fn glVertexAttribI1i(&self, index: GLuint, x: GLint) -> Result<()>;
7551	fn glVertexAttribI2i(&self, index: GLuint, x: GLint, y: GLint) -> Result<()>;
7552	fn glVertexAttribI3i(&self, index: GLuint, x: GLint, y: GLint, z: GLint) -> Result<()>;
7553	fn glVertexAttribI4i(&self, index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint) -> Result<()>;
7554	fn glVertexAttribI1ui(&self, index: GLuint, x: GLuint) -> Result<()>;
7555	fn glVertexAttribI2ui(&self, index: GLuint, x: GLuint, y: GLuint) -> Result<()>;
7556	fn glVertexAttribI3ui(&self, index: GLuint, x: GLuint, y: GLuint, z: GLuint) -> Result<()>;
7557	fn glVertexAttribI4ui(&self, index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint) -> Result<()>;
7558	fn glVertexAttribI1iv(&self, index: GLuint, v: *const GLint) -> Result<()>;
7559	fn glVertexAttribI2iv(&self, index: GLuint, v: *const GLint) -> Result<()>;
7560	fn glVertexAttribI3iv(&self, index: GLuint, v: *const GLint) -> Result<()>;
7561	fn glVertexAttribI4iv(&self, index: GLuint, v: *const GLint) -> Result<()>;
7562	fn glVertexAttribI1uiv(&self, index: GLuint, v: *const GLuint) -> Result<()>;
7563	fn glVertexAttribI2uiv(&self, index: GLuint, v: *const GLuint) -> Result<()>;
7564	fn glVertexAttribI3uiv(&self, index: GLuint, v: *const GLuint) -> Result<()>;
7565	fn glVertexAttribI4uiv(&self, index: GLuint, v: *const GLuint) -> Result<()>;
7566	fn glVertexAttribI4bv(&self, index: GLuint, v: *const GLbyte) -> Result<()>;
7567	fn glVertexAttribI4sv(&self, index: GLuint, v: *const GLshort) -> Result<()>;
7568	fn glVertexAttribI4ubv(&self, index: GLuint, v: *const GLubyte) -> Result<()>;
7569	fn glVertexAttribI4usv(&self, index: GLuint, v: *const GLushort) -> Result<()>;
7570	fn glGetUniformuiv(&self, program: GLuint, location: GLint, params: *mut GLuint) -> Result<()>;
7571	fn glBindFragDataLocation(&self, program: GLuint, color: GLuint, name: *const GLchar) -> Result<()>;
7572	fn glGetFragDataLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint>;
7573	fn glUniform1ui(&self, location: GLint, v0: GLuint) -> Result<()>;
7574	fn glUniform2ui(&self, location: GLint, v0: GLuint, v1: GLuint) -> Result<()>;
7575	fn glUniform3ui(&self, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint) -> Result<()>;
7576	fn glUniform4ui(&self, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint) -> Result<()>;
7577	fn glUniform1uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()>;
7578	fn glUniform2uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()>;
7579	fn glUniform3uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()>;
7580	fn glUniform4uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()>;
7581	fn glTexParameterIiv(&self, target: GLenum, pname: GLenum, params: *const GLint) -> Result<()>;
7582	fn glTexParameterIuiv(&self, target: GLenum, pname: GLenum, params: *const GLuint) -> Result<()>;
7583	fn glGetTexParameterIiv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
7584	fn glGetTexParameterIuiv(&self, target: GLenum, pname: GLenum, params: *mut GLuint) -> Result<()>;
7585	fn glClearBufferiv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLint) -> Result<()>;
7586	fn glClearBufferuiv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLuint) -> Result<()>;
7587	fn glClearBufferfv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLfloat) -> Result<()>;
7588	fn glClearBufferfi(&self, buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint) -> Result<()>;
7589	fn glGetStringi(&self, name: GLenum, index: GLuint) -> Result<&'static str>;
7590	fn glIsRenderbuffer(&self, renderbuffer: GLuint) -> Result<GLboolean>;
7591	fn glBindRenderbuffer(&self, target: GLenum, renderbuffer: GLuint) -> Result<()>;
7592	fn glDeleteRenderbuffers(&self, n: GLsizei, renderbuffers: *const GLuint) -> Result<()>;
7593	fn glGenRenderbuffers(&self, n: GLsizei, renderbuffers: *mut GLuint) -> Result<()>;
7594	fn glRenderbufferStorage(&self, target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()>;
7595	fn glGetRenderbufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
7596	fn glIsFramebuffer(&self, framebuffer: GLuint) -> Result<GLboolean>;
7597	fn glBindFramebuffer(&self, target: GLenum, framebuffer: GLuint) -> Result<()>;
7598	fn glDeleteFramebuffers(&self, n: GLsizei, framebuffers: *const GLuint) -> Result<()>;
7599	fn glGenFramebuffers(&self, n: GLsizei, framebuffers: *mut GLuint) -> Result<()>;
7600	fn glCheckFramebufferStatus(&self, target: GLenum) -> Result<GLenum>;
7601	fn glFramebufferTexture1D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint) -> Result<()>;
7602	fn glFramebufferTexture2D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint) -> Result<()>;
7603	fn glFramebufferTexture3D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint, zoffset: GLint) -> Result<()>;
7604	fn glFramebufferRenderbuffer(&self, target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: GLuint) -> Result<()>;
7605	fn glGetFramebufferAttachmentParameteriv(&self, target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
7606	fn glGenerateMipmap(&self, target: GLenum) -> Result<()>;
7607	fn glBlitFramebuffer(&self, srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum) -> Result<()>;
7608	fn glRenderbufferStorageMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()>;
7609	fn glFramebufferTextureLayer(&self, target: GLenum, attachment: GLenum, texture: GLuint, level: GLint, layer: GLint) -> Result<()>;
7610	fn glMapBufferRange(&self, target: GLenum, offset: GLintptr, length: GLsizeiptr, access: GLbitfield) -> Result<*mut c_void>;
7611	fn glFlushMappedBufferRange(&self, target: GLenum, offset: GLintptr, length: GLsizeiptr) -> Result<()>;
7612	fn glBindVertexArray(&self, array: GLuint) -> Result<()>;
7613	fn glDeleteVertexArrays(&self, n: GLsizei, arrays: *const GLuint) -> Result<()>;
7614	fn glGenVertexArrays(&self, n: GLsizei, arrays: *mut GLuint) -> Result<()>;
7615	fn glIsVertexArray(&self, array: GLuint) -> Result<GLboolean>;
7616}
7617
7618#[derive(Clone, Copy, PartialEq, Eq, Hash)]
7619pub struct Version30 {
7620	available: bool,
7621	geterror: PFNGLGETERRORPROC,
7622	colormaski: PFNGLCOLORMASKIPROC,
7623	getbooleani_v: PFNGLGETBOOLEANI_VPROC,
7624	getintegeri_v: PFNGLGETINTEGERI_VPROC,
7625	enablei: PFNGLENABLEIPROC,
7626	disablei: PFNGLDISABLEIPROC,
7627	isenabledi: PFNGLISENABLEDIPROC,
7628	begintransformfeedback: PFNGLBEGINTRANSFORMFEEDBACKPROC,
7629	endtransformfeedback: PFNGLENDTRANSFORMFEEDBACKPROC,
7630	bindbufferrange: PFNGLBINDBUFFERRANGEPROC,
7631	bindbufferbase: PFNGLBINDBUFFERBASEPROC,
7632	transformfeedbackvaryings: PFNGLTRANSFORMFEEDBACKVARYINGSPROC,
7633	gettransformfeedbackvarying: PFNGLGETTRANSFORMFEEDBACKVARYINGPROC,
7634	clampcolor: PFNGLCLAMPCOLORPROC,
7635	beginconditionalrender: PFNGLBEGINCONDITIONALRENDERPROC,
7636	endconditionalrender: PFNGLENDCONDITIONALRENDERPROC,
7637	vertexattribipointer: PFNGLVERTEXATTRIBIPOINTERPROC,
7638	getvertexattribiiv: PFNGLGETVERTEXATTRIBIIVPROC,
7639	getvertexattribiuiv: PFNGLGETVERTEXATTRIBIUIVPROC,
7640	vertexattribi1i: PFNGLVERTEXATTRIBI1IPROC,
7641	vertexattribi2i: PFNGLVERTEXATTRIBI2IPROC,
7642	vertexattribi3i: PFNGLVERTEXATTRIBI3IPROC,
7643	vertexattribi4i: PFNGLVERTEXATTRIBI4IPROC,
7644	vertexattribi1ui: PFNGLVERTEXATTRIBI1UIPROC,
7645	vertexattribi2ui: PFNGLVERTEXATTRIBI2UIPROC,
7646	vertexattribi3ui: PFNGLVERTEXATTRIBI3UIPROC,
7647	vertexattribi4ui: PFNGLVERTEXATTRIBI4UIPROC,
7648	vertexattribi1iv: PFNGLVERTEXATTRIBI1IVPROC,
7649	vertexattribi2iv: PFNGLVERTEXATTRIBI2IVPROC,
7650	vertexattribi3iv: PFNGLVERTEXATTRIBI3IVPROC,
7651	vertexattribi4iv: PFNGLVERTEXATTRIBI4IVPROC,
7652	vertexattribi1uiv: PFNGLVERTEXATTRIBI1UIVPROC,
7653	vertexattribi2uiv: PFNGLVERTEXATTRIBI2UIVPROC,
7654	vertexattribi3uiv: PFNGLVERTEXATTRIBI3UIVPROC,
7655	vertexattribi4uiv: PFNGLVERTEXATTRIBI4UIVPROC,
7656	vertexattribi4bv: PFNGLVERTEXATTRIBI4BVPROC,
7657	vertexattribi4sv: PFNGLVERTEXATTRIBI4SVPROC,
7658	vertexattribi4ubv: PFNGLVERTEXATTRIBI4UBVPROC,
7659	vertexattribi4usv: PFNGLVERTEXATTRIBI4USVPROC,
7660	getuniformuiv: PFNGLGETUNIFORMUIVPROC,
7661	bindfragdatalocation: PFNGLBINDFRAGDATALOCATIONPROC,
7662	getfragdatalocation: PFNGLGETFRAGDATALOCATIONPROC,
7663	uniform1ui: PFNGLUNIFORM1UIPROC,
7664	uniform2ui: PFNGLUNIFORM2UIPROC,
7665	uniform3ui: PFNGLUNIFORM3UIPROC,
7666	uniform4ui: PFNGLUNIFORM4UIPROC,
7667	uniform1uiv: PFNGLUNIFORM1UIVPROC,
7668	uniform2uiv: PFNGLUNIFORM2UIVPROC,
7669	uniform3uiv: PFNGLUNIFORM3UIVPROC,
7670	uniform4uiv: PFNGLUNIFORM4UIVPROC,
7671	texparameteriiv: PFNGLTEXPARAMETERIIVPROC,
7672	texparameteriuiv: PFNGLTEXPARAMETERIUIVPROC,
7673	gettexparameteriiv: PFNGLGETTEXPARAMETERIIVPROC,
7674	gettexparameteriuiv: PFNGLGETTEXPARAMETERIUIVPROC,
7675	clearbufferiv: PFNGLCLEARBUFFERIVPROC,
7676	clearbufferuiv: PFNGLCLEARBUFFERUIVPROC,
7677	clearbufferfv: PFNGLCLEARBUFFERFVPROC,
7678	clearbufferfi: PFNGLCLEARBUFFERFIPROC,
7679	getstringi: PFNGLGETSTRINGIPROC,
7680	isrenderbuffer: PFNGLISRENDERBUFFERPROC,
7681	bindrenderbuffer: PFNGLBINDRENDERBUFFERPROC,
7682	deleterenderbuffers: PFNGLDELETERENDERBUFFERSPROC,
7683	genrenderbuffers: PFNGLGENRENDERBUFFERSPROC,
7684	renderbufferstorage: PFNGLRENDERBUFFERSTORAGEPROC,
7685	getrenderbufferparameteriv: PFNGLGETRENDERBUFFERPARAMETERIVPROC,
7686	isframebuffer: PFNGLISFRAMEBUFFERPROC,
7687	bindframebuffer: PFNGLBINDFRAMEBUFFERPROC,
7688	deleteframebuffers: PFNGLDELETEFRAMEBUFFERSPROC,
7689	genframebuffers: PFNGLGENFRAMEBUFFERSPROC,
7690	checkframebufferstatus: PFNGLCHECKFRAMEBUFFERSTATUSPROC,
7691	framebuffertexture1d: PFNGLFRAMEBUFFERTEXTURE1DPROC,
7692	framebuffertexture2d: PFNGLFRAMEBUFFERTEXTURE2DPROC,
7693	framebuffertexture3d: PFNGLFRAMEBUFFERTEXTURE3DPROC,
7694	framebufferrenderbuffer: PFNGLFRAMEBUFFERRENDERBUFFERPROC,
7695	getframebufferattachmentparameteriv: PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC,
7696	generatemipmap: PFNGLGENERATEMIPMAPPROC,
7697	blitframebuffer: PFNGLBLITFRAMEBUFFERPROC,
7698	renderbufferstoragemultisample: PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC,
7699	framebuffertexturelayer: PFNGLFRAMEBUFFERTEXTURELAYERPROC,
7700	mapbufferrange: PFNGLMAPBUFFERRANGEPROC,
7701	flushmappedbufferrange: PFNGLFLUSHMAPPEDBUFFERRANGEPROC,
7702	bindvertexarray: PFNGLBINDVERTEXARRAYPROC,
7703	deletevertexarrays: PFNGLDELETEVERTEXARRAYSPROC,
7704	genvertexarrays: PFNGLGENVERTEXARRAYSPROC,
7705	isvertexarray: PFNGLISVERTEXARRAYPROC,
7706}
7707
7708impl GL_3_0 for Version30 {
7709	#[inline(always)]
7710	fn glGetError(&self) -> GLenum {
7711		(self.geterror)()
7712	}
7713	#[inline(always)]
7714	fn glColorMaski(&self, index: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean) -> Result<()> {
7715		let ret = process_catch("glColorMaski", catch_unwind(||(self.colormaski)(index, r, g, b, a)));
7716		#[cfg(feature = "diagnose")]
7717		if let Ok(ret) = ret {
7718			return to_result("glColorMaski", ret, self.glGetError());
7719		} else {
7720			return ret
7721		}
7722		#[cfg(not(feature = "diagnose"))]
7723		return ret;
7724	}
7725	#[inline(always)]
7726	fn glGetBooleani_v(&self, target: GLenum, index: GLuint, data: *mut GLboolean) -> Result<()> {
7727		let ret = process_catch("glGetBooleani_v", catch_unwind(||(self.getbooleani_v)(target, index, data)));
7728		#[cfg(feature = "diagnose")]
7729		if let Ok(ret) = ret {
7730			return to_result("glGetBooleani_v", ret, self.glGetError());
7731		} else {
7732			return ret
7733		}
7734		#[cfg(not(feature = "diagnose"))]
7735		return ret;
7736	}
7737	#[inline(always)]
7738	fn glGetIntegeri_v(&self, target: GLenum, index: GLuint, data: *mut GLint) -> Result<()> {
7739		let ret = process_catch("glGetIntegeri_v", catch_unwind(||(self.getintegeri_v)(target, index, data)));
7740		#[cfg(feature = "diagnose")]
7741		if let Ok(ret) = ret {
7742			return to_result("glGetIntegeri_v", ret, self.glGetError());
7743		} else {
7744			return ret
7745		}
7746		#[cfg(not(feature = "diagnose"))]
7747		return ret;
7748	}
7749	#[inline(always)]
7750	fn glEnablei(&self, target: GLenum, index: GLuint) -> Result<()> {
7751		let ret = process_catch("glEnablei", catch_unwind(||(self.enablei)(target, index)));
7752		#[cfg(feature = "diagnose")]
7753		if let Ok(ret) = ret {
7754			return to_result("glEnablei", ret, self.glGetError());
7755		} else {
7756			return ret
7757		}
7758		#[cfg(not(feature = "diagnose"))]
7759		return ret;
7760	}
7761	#[inline(always)]
7762	fn glDisablei(&self, target: GLenum, index: GLuint) -> Result<()> {
7763		let ret = process_catch("glDisablei", catch_unwind(||(self.disablei)(target, index)));
7764		#[cfg(feature = "diagnose")]
7765		if let Ok(ret) = ret {
7766			return to_result("glDisablei", ret, self.glGetError());
7767		} else {
7768			return ret
7769		}
7770		#[cfg(not(feature = "diagnose"))]
7771		return ret;
7772	}
7773	#[inline(always)]
7774	fn glIsEnabledi(&self, target: GLenum, index: GLuint) -> Result<GLboolean> {
7775		let ret = process_catch("glIsEnabledi", catch_unwind(||(self.isenabledi)(target, index)));
7776		#[cfg(feature = "diagnose")]
7777		if let Ok(ret) = ret {
7778			return to_result("glIsEnabledi", ret, self.glGetError());
7779		} else {
7780			return ret
7781		}
7782		#[cfg(not(feature = "diagnose"))]
7783		return ret;
7784	}
7785	#[inline(always)]
7786	fn glBeginTransformFeedback(&self, primitiveMode: GLenum) -> Result<()> {
7787		let ret = process_catch("glBeginTransformFeedback", catch_unwind(||(self.begintransformfeedback)(primitiveMode)));
7788		#[cfg(feature = "diagnose")]
7789		if let Ok(ret) = ret {
7790			return to_result("glBeginTransformFeedback", ret, self.glGetError());
7791		} else {
7792			return ret
7793		}
7794		#[cfg(not(feature = "diagnose"))]
7795		return ret;
7796	}
7797	#[inline(always)]
7798	fn glEndTransformFeedback(&self) -> Result<()> {
7799		let ret = process_catch("glEndTransformFeedback", catch_unwind(||(self.endtransformfeedback)()));
7800		#[cfg(feature = "diagnose")]
7801		if let Ok(ret) = ret {
7802			return to_result("glEndTransformFeedback", ret, self.glGetError());
7803		} else {
7804			return ret
7805		}
7806		#[cfg(not(feature = "diagnose"))]
7807		return ret;
7808	}
7809	#[inline(always)]
7810	fn glBindBufferRange(&self, target: GLenum, index: GLuint, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()> {
7811		let ret = process_catch("glBindBufferRange", catch_unwind(||(self.bindbufferrange)(target, index, buffer, offset, size)));
7812		#[cfg(feature = "diagnose")]
7813		if let Ok(ret) = ret {
7814			return to_result("glBindBufferRange", ret, self.glGetError());
7815		} else {
7816			return ret
7817		}
7818		#[cfg(not(feature = "diagnose"))]
7819		return ret;
7820	}
7821	#[inline(always)]
7822	fn glBindBufferBase(&self, target: GLenum, index: GLuint, buffer: GLuint) -> Result<()> {
7823		let ret = process_catch("glBindBufferBase", catch_unwind(||(self.bindbufferbase)(target, index, buffer)));
7824		#[cfg(feature = "diagnose")]
7825		if let Ok(ret) = ret {
7826			return to_result("glBindBufferBase", ret, self.glGetError());
7827		} else {
7828			return ret
7829		}
7830		#[cfg(not(feature = "diagnose"))]
7831		return ret;
7832	}
7833	#[inline(always)]
7834	fn glTransformFeedbackVaryings(&self, program: GLuint, count: GLsizei, varyings: *const *const GLchar, bufferMode: GLenum) -> Result<()> {
7835		let ret = process_catch("glTransformFeedbackVaryings", catch_unwind(||(self.transformfeedbackvaryings)(program, count, varyings, bufferMode)));
7836		#[cfg(feature = "diagnose")]
7837		if let Ok(ret) = ret {
7838			return to_result("glTransformFeedbackVaryings", ret, self.glGetError());
7839		} else {
7840			return ret
7841		}
7842		#[cfg(not(feature = "diagnose"))]
7843		return ret;
7844	}
7845	#[inline(always)]
7846	fn glGetTransformFeedbackVarying(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLsizei, type_: *mut GLenum, name: *mut GLchar) -> Result<()> {
7847		let ret = process_catch("glGetTransformFeedbackVarying", catch_unwind(||(self.gettransformfeedbackvarying)(program, index, bufSize, length, size, type_, name)));
7848		#[cfg(feature = "diagnose")]
7849		if let Ok(ret) = ret {
7850			return to_result("glGetTransformFeedbackVarying", ret, self.glGetError());
7851		} else {
7852			return ret
7853		}
7854		#[cfg(not(feature = "diagnose"))]
7855		return ret;
7856	}
7857	#[inline(always)]
7858	fn glClampColor(&self, target: GLenum, clamp: GLenum) -> Result<()> {
7859		let ret = process_catch("glClampColor", catch_unwind(||(self.clampcolor)(target, clamp)));
7860		#[cfg(feature = "diagnose")]
7861		if let Ok(ret) = ret {
7862			return to_result("glClampColor", ret, self.glGetError());
7863		} else {
7864			return ret
7865		}
7866		#[cfg(not(feature = "diagnose"))]
7867		return ret;
7868	}
7869	#[inline(always)]
7870	fn glBeginConditionalRender(&self, id: GLuint, mode: GLenum) -> Result<()> {
7871		let ret = process_catch("glBeginConditionalRender", catch_unwind(||(self.beginconditionalrender)(id, mode)));
7872		#[cfg(feature = "diagnose")]
7873		if let Ok(ret) = ret {
7874			return to_result("glBeginConditionalRender", ret, self.glGetError());
7875		} else {
7876			return ret
7877		}
7878		#[cfg(not(feature = "diagnose"))]
7879		return ret;
7880	}
7881	#[inline(always)]
7882	fn glEndConditionalRender(&self) -> Result<()> {
7883		let ret = process_catch("glEndConditionalRender", catch_unwind(||(self.endconditionalrender)()));
7884		#[cfg(feature = "diagnose")]
7885		if let Ok(ret) = ret {
7886			return to_result("glEndConditionalRender", ret, self.glGetError());
7887		} else {
7888			return ret
7889		}
7890		#[cfg(not(feature = "diagnose"))]
7891		return ret;
7892	}
7893	#[inline(always)]
7894	fn glVertexAttribIPointer(&self, index: GLuint, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()> {
7895		let ret = process_catch("glVertexAttribIPointer", catch_unwind(||(self.vertexattribipointer)(index, size, type_, stride, pointer)));
7896		#[cfg(feature = "diagnose")]
7897		if let Ok(ret) = ret {
7898			return to_result("glVertexAttribIPointer", ret, self.glGetError());
7899		} else {
7900			return ret
7901		}
7902		#[cfg(not(feature = "diagnose"))]
7903		return ret;
7904	}
7905	#[inline(always)]
7906	fn glGetVertexAttribIiv(&self, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
7907		let ret = process_catch("glGetVertexAttribIiv", catch_unwind(||(self.getvertexattribiiv)(index, pname, params)));
7908		#[cfg(feature = "diagnose")]
7909		if let Ok(ret) = ret {
7910			return to_result("glGetVertexAttribIiv", ret, self.glGetError());
7911		} else {
7912			return ret
7913		}
7914		#[cfg(not(feature = "diagnose"))]
7915		return ret;
7916	}
7917	#[inline(always)]
7918	fn glGetVertexAttribIuiv(&self, index: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()> {
7919		let ret = process_catch("glGetVertexAttribIuiv", catch_unwind(||(self.getvertexattribiuiv)(index, pname, params)));
7920		#[cfg(feature = "diagnose")]
7921		if let Ok(ret) = ret {
7922			return to_result("glGetVertexAttribIuiv", ret, self.glGetError());
7923		} else {
7924			return ret
7925		}
7926		#[cfg(not(feature = "diagnose"))]
7927		return ret;
7928	}
7929	#[inline(always)]
7930	fn glVertexAttribI1i(&self, index: GLuint, x: GLint) -> Result<()> {
7931		let ret = process_catch("glVertexAttribI1i", catch_unwind(||(self.vertexattribi1i)(index, x)));
7932		#[cfg(feature = "diagnose")]
7933		if let Ok(ret) = ret {
7934			return to_result("glVertexAttribI1i", ret, self.glGetError());
7935		} else {
7936			return ret
7937		}
7938		#[cfg(not(feature = "diagnose"))]
7939		return ret;
7940	}
7941	#[inline(always)]
7942	fn glVertexAttribI2i(&self, index: GLuint, x: GLint, y: GLint) -> Result<()> {
7943		let ret = process_catch("glVertexAttribI2i", catch_unwind(||(self.vertexattribi2i)(index, x, y)));
7944		#[cfg(feature = "diagnose")]
7945		if let Ok(ret) = ret {
7946			return to_result("glVertexAttribI2i", ret, self.glGetError());
7947		} else {
7948			return ret
7949		}
7950		#[cfg(not(feature = "diagnose"))]
7951		return ret;
7952	}
7953	#[inline(always)]
7954	fn glVertexAttribI3i(&self, index: GLuint, x: GLint, y: GLint, z: GLint) -> Result<()> {
7955		let ret = process_catch("glVertexAttribI3i", catch_unwind(||(self.vertexattribi3i)(index, x, y, z)));
7956		#[cfg(feature = "diagnose")]
7957		if let Ok(ret) = ret {
7958			return to_result("glVertexAttribI3i", ret, self.glGetError());
7959		} else {
7960			return ret
7961		}
7962		#[cfg(not(feature = "diagnose"))]
7963		return ret;
7964	}
7965	#[inline(always)]
7966	fn glVertexAttribI4i(&self, index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint) -> Result<()> {
7967		let ret = process_catch("glVertexAttribI4i", catch_unwind(||(self.vertexattribi4i)(index, x, y, z, w)));
7968		#[cfg(feature = "diagnose")]
7969		if let Ok(ret) = ret {
7970			return to_result("glVertexAttribI4i", ret, self.glGetError());
7971		} else {
7972			return ret
7973		}
7974		#[cfg(not(feature = "diagnose"))]
7975		return ret;
7976	}
7977	#[inline(always)]
7978	fn glVertexAttribI1ui(&self, index: GLuint, x: GLuint) -> Result<()> {
7979		let ret = process_catch("glVertexAttribI1ui", catch_unwind(||(self.vertexattribi1ui)(index, x)));
7980		#[cfg(feature = "diagnose")]
7981		if let Ok(ret) = ret {
7982			return to_result("glVertexAttribI1ui", ret, self.glGetError());
7983		} else {
7984			return ret
7985		}
7986		#[cfg(not(feature = "diagnose"))]
7987		return ret;
7988	}
7989	#[inline(always)]
7990	fn glVertexAttribI2ui(&self, index: GLuint, x: GLuint, y: GLuint) -> Result<()> {
7991		let ret = process_catch("glVertexAttribI2ui", catch_unwind(||(self.vertexattribi2ui)(index, x, y)));
7992		#[cfg(feature = "diagnose")]
7993		if let Ok(ret) = ret {
7994			return to_result("glVertexAttribI2ui", ret, self.glGetError());
7995		} else {
7996			return ret
7997		}
7998		#[cfg(not(feature = "diagnose"))]
7999		return ret;
8000	}
8001	#[inline(always)]
8002	fn glVertexAttribI3ui(&self, index: GLuint, x: GLuint, y: GLuint, z: GLuint) -> Result<()> {
8003		let ret = process_catch("glVertexAttribI3ui", catch_unwind(||(self.vertexattribi3ui)(index, x, y, z)));
8004		#[cfg(feature = "diagnose")]
8005		if let Ok(ret) = ret {
8006			return to_result("glVertexAttribI3ui", ret, self.glGetError());
8007		} else {
8008			return ret
8009		}
8010		#[cfg(not(feature = "diagnose"))]
8011		return ret;
8012	}
8013	#[inline(always)]
8014	fn glVertexAttribI4ui(&self, index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint) -> Result<()> {
8015		let ret = process_catch("glVertexAttribI4ui", catch_unwind(||(self.vertexattribi4ui)(index, x, y, z, w)));
8016		#[cfg(feature = "diagnose")]
8017		if let Ok(ret) = ret {
8018			return to_result("glVertexAttribI4ui", ret, self.glGetError());
8019		} else {
8020			return ret
8021		}
8022		#[cfg(not(feature = "diagnose"))]
8023		return ret;
8024	}
8025	#[inline(always)]
8026	fn glVertexAttribI1iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
8027		let ret = process_catch("glVertexAttribI1iv", catch_unwind(||(self.vertexattribi1iv)(index, v)));
8028		#[cfg(feature = "diagnose")]
8029		if let Ok(ret) = ret {
8030			return to_result("glVertexAttribI1iv", ret, self.glGetError());
8031		} else {
8032			return ret
8033		}
8034		#[cfg(not(feature = "diagnose"))]
8035		return ret;
8036	}
8037	#[inline(always)]
8038	fn glVertexAttribI2iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
8039		let ret = process_catch("glVertexAttribI2iv", catch_unwind(||(self.vertexattribi2iv)(index, v)));
8040		#[cfg(feature = "diagnose")]
8041		if let Ok(ret) = ret {
8042			return to_result("glVertexAttribI2iv", ret, self.glGetError());
8043		} else {
8044			return ret
8045		}
8046		#[cfg(not(feature = "diagnose"))]
8047		return ret;
8048	}
8049	#[inline(always)]
8050	fn glVertexAttribI3iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
8051		let ret = process_catch("glVertexAttribI3iv", catch_unwind(||(self.vertexattribi3iv)(index, v)));
8052		#[cfg(feature = "diagnose")]
8053		if let Ok(ret) = ret {
8054			return to_result("glVertexAttribI3iv", ret, self.glGetError());
8055		} else {
8056			return ret
8057		}
8058		#[cfg(not(feature = "diagnose"))]
8059		return ret;
8060	}
8061	#[inline(always)]
8062	fn glVertexAttribI4iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
8063		let ret = process_catch("glVertexAttribI4iv", catch_unwind(||(self.vertexattribi4iv)(index, v)));
8064		#[cfg(feature = "diagnose")]
8065		if let Ok(ret) = ret {
8066			return to_result("glVertexAttribI4iv", ret, self.glGetError());
8067		} else {
8068			return ret
8069		}
8070		#[cfg(not(feature = "diagnose"))]
8071		return ret;
8072	}
8073	#[inline(always)]
8074	fn glVertexAttribI1uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
8075		let ret = process_catch("glVertexAttribI1uiv", catch_unwind(||(self.vertexattribi1uiv)(index, v)));
8076		#[cfg(feature = "diagnose")]
8077		if let Ok(ret) = ret {
8078			return to_result("glVertexAttribI1uiv", ret, self.glGetError());
8079		} else {
8080			return ret
8081		}
8082		#[cfg(not(feature = "diagnose"))]
8083		return ret;
8084	}
8085	#[inline(always)]
8086	fn glVertexAttribI2uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
8087		let ret = process_catch("glVertexAttribI2uiv", catch_unwind(||(self.vertexattribi2uiv)(index, v)));
8088		#[cfg(feature = "diagnose")]
8089		if let Ok(ret) = ret {
8090			return to_result("glVertexAttribI2uiv", ret, self.glGetError());
8091		} else {
8092			return ret
8093		}
8094		#[cfg(not(feature = "diagnose"))]
8095		return ret;
8096	}
8097	#[inline(always)]
8098	fn glVertexAttribI3uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
8099		let ret = process_catch("glVertexAttribI3uiv", catch_unwind(||(self.vertexattribi3uiv)(index, v)));
8100		#[cfg(feature = "diagnose")]
8101		if let Ok(ret) = ret {
8102			return to_result("glVertexAttribI3uiv", ret, self.glGetError());
8103		} else {
8104			return ret
8105		}
8106		#[cfg(not(feature = "diagnose"))]
8107		return ret;
8108	}
8109	#[inline(always)]
8110	fn glVertexAttribI4uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
8111		let ret = process_catch("glVertexAttribI4uiv", catch_unwind(||(self.vertexattribi4uiv)(index, v)));
8112		#[cfg(feature = "diagnose")]
8113		if let Ok(ret) = ret {
8114			return to_result("glVertexAttribI4uiv", ret, self.glGetError());
8115		} else {
8116			return ret
8117		}
8118		#[cfg(not(feature = "diagnose"))]
8119		return ret;
8120	}
8121	#[inline(always)]
8122	fn glVertexAttribI4bv(&self, index: GLuint, v: *const GLbyte) -> Result<()> {
8123		let ret = process_catch("glVertexAttribI4bv", catch_unwind(||(self.vertexattribi4bv)(index, v)));
8124		#[cfg(feature = "diagnose")]
8125		if let Ok(ret) = ret {
8126			return to_result("glVertexAttribI4bv", ret, self.glGetError());
8127		} else {
8128			return ret
8129		}
8130		#[cfg(not(feature = "diagnose"))]
8131		return ret;
8132	}
8133	#[inline(always)]
8134	fn glVertexAttribI4sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
8135		let ret = process_catch("glVertexAttribI4sv", catch_unwind(||(self.vertexattribi4sv)(index, v)));
8136		#[cfg(feature = "diagnose")]
8137		if let Ok(ret) = ret {
8138			return to_result("glVertexAttribI4sv", ret, self.glGetError());
8139		} else {
8140			return ret
8141		}
8142		#[cfg(not(feature = "diagnose"))]
8143		return ret;
8144	}
8145	#[inline(always)]
8146	fn glVertexAttribI4ubv(&self, index: GLuint, v: *const GLubyte) -> Result<()> {
8147		let ret = process_catch("glVertexAttribI4ubv", catch_unwind(||(self.vertexattribi4ubv)(index, v)));
8148		#[cfg(feature = "diagnose")]
8149		if let Ok(ret) = ret {
8150			return to_result("glVertexAttribI4ubv", ret, self.glGetError());
8151		} else {
8152			return ret
8153		}
8154		#[cfg(not(feature = "diagnose"))]
8155		return ret;
8156	}
8157	#[inline(always)]
8158	fn glVertexAttribI4usv(&self, index: GLuint, v: *const GLushort) -> Result<()> {
8159		let ret = process_catch("glVertexAttribI4usv", catch_unwind(||(self.vertexattribi4usv)(index, v)));
8160		#[cfg(feature = "diagnose")]
8161		if let Ok(ret) = ret {
8162			return to_result("glVertexAttribI4usv", ret, self.glGetError());
8163		} else {
8164			return ret
8165		}
8166		#[cfg(not(feature = "diagnose"))]
8167		return ret;
8168	}
8169	#[inline(always)]
8170	fn glGetUniformuiv(&self, program: GLuint, location: GLint, params: *mut GLuint) -> Result<()> {
8171		let ret = process_catch("glGetUniformuiv", catch_unwind(||(self.getuniformuiv)(program, location, params)));
8172		#[cfg(feature = "diagnose")]
8173		if let Ok(ret) = ret {
8174			return to_result("glGetUniformuiv", ret, self.glGetError());
8175		} else {
8176			return ret
8177		}
8178		#[cfg(not(feature = "diagnose"))]
8179		return ret;
8180	}
8181	#[inline(always)]
8182	fn glBindFragDataLocation(&self, program: GLuint, color: GLuint, name: *const GLchar) -> Result<()> {
8183		let ret = process_catch("glBindFragDataLocation", catch_unwind(||(self.bindfragdatalocation)(program, color, name)));
8184		#[cfg(feature = "diagnose")]
8185		if let Ok(ret) = ret {
8186			return to_result("glBindFragDataLocation", ret, self.glGetError());
8187		} else {
8188			return ret
8189		}
8190		#[cfg(not(feature = "diagnose"))]
8191		return ret;
8192	}
8193	#[inline(always)]
8194	fn glGetFragDataLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint> {
8195		let ret = process_catch("glGetFragDataLocation", catch_unwind(||(self.getfragdatalocation)(program, name)));
8196		#[cfg(feature = "diagnose")]
8197		if let Ok(ret) = ret {
8198			return to_result("glGetFragDataLocation", ret, self.glGetError());
8199		} else {
8200			return ret
8201		}
8202		#[cfg(not(feature = "diagnose"))]
8203		return ret;
8204	}
8205	#[inline(always)]
8206	fn glUniform1ui(&self, location: GLint, v0: GLuint) -> Result<()> {
8207		let ret = process_catch("glUniform1ui", catch_unwind(||(self.uniform1ui)(location, v0)));
8208		#[cfg(feature = "diagnose")]
8209		if let Ok(ret) = ret {
8210			return to_result("glUniform1ui", ret, self.glGetError());
8211		} else {
8212			return ret
8213		}
8214		#[cfg(not(feature = "diagnose"))]
8215		return ret;
8216	}
8217	#[inline(always)]
8218	fn glUniform2ui(&self, location: GLint, v0: GLuint, v1: GLuint) -> Result<()> {
8219		let ret = process_catch("glUniform2ui", catch_unwind(||(self.uniform2ui)(location, v0, v1)));
8220		#[cfg(feature = "diagnose")]
8221		if let Ok(ret) = ret {
8222			return to_result("glUniform2ui", ret, self.glGetError());
8223		} else {
8224			return ret
8225		}
8226		#[cfg(not(feature = "diagnose"))]
8227		return ret;
8228	}
8229	#[inline(always)]
8230	fn glUniform3ui(&self, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint) -> Result<()> {
8231		let ret = process_catch("glUniform3ui", catch_unwind(||(self.uniform3ui)(location, v0, v1, v2)));
8232		#[cfg(feature = "diagnose")]
8233		if let Ok(ret) = ret {
8234			return to_result("glUniform3ui", ret, self.glGetError());
8235		} else {
8236			return ret
8237		}
8238		#[cfg(not(feature = "diagnose"))]
8239		return ret;
8240	}
8241	#[inline(always)]
8242	fn glUniform4ui(&self, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint) -> Result<()> {
8243		let ret = process_catch("glUniform4ui", catch_unwind(||(self.uniform4ui)(location, v0, v1, v2, v3)));
8244		#[cfg(feature = "diagnose")]
8245		if let Ok(ret) = ret {
8246			return to_result("glUniform4ui", ret, self.glGetError());
8247		} else {
8248			return ret
8249		}
8250		#[cfg(not(feature = "diagnose"))]
8251		return ret;
8252	}
8253	#[inline(always)]
8254	fn glUniform1uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
8255		let ret = process_catch("glUniform1uiv", catch_unwind(||(self.uniform1uiv)(location, count, value)));
8256		#[cfg(feature = "diagnose")]
8257		if let Ok(ret) = ret {
8258			return to_result("glUniform1uiv", ret, self.glGetError());
8259		} else {
8260			return ret
8261		}
8262		#[cfg(not(feature = "diagnose"))]
8263		return ret;
8264	}
8265	#[inline(always)]
8266	fn glUniform2uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
8267		let ret = process_catch("glUniform2uiv", catch_unwind(||(self.uniform2uiv)(location, count, value)));
8268		#[cfg(feature = "diagnose")]
8269		if let Ok(ret) = ret {
8270			return to_result("glUniform2uiv", ret, self.glGetError());
8271		} else {
8272			return ret
8273		}
8274		#[cfg(not(feature = "diagnose"))]
8275		return ret;
8276	}
8277	#[inline(always)]
8278	fn glUniform3uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
8279		let ret = process_catch("glUniform3uiv", catch_unwind(||(self.uniform3uiv)(location, count, value)));
8280		#[cfg(feature = "diagnose")]
8281		if let Ok(ret) = ret {
8282			return to_result("glUniform3uiv", ret, self.glGetError());
8283		} else {
8284			return ret
8285		}
8286		#[cfg(not(feature = "diagnose"))]
8287		return ret;
8288	}
8289	#[inline(always)]
8290	fn glUniform4uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
8291		let ret = process_catch("glUniform4uiv", catch_unwind(||(self.uniform4uiv)(location, count, value)));
8292		#[cfg(feature = "diagnose")]
8293		if let Ok(ret) = ret {
8294			return to_result("glUniform4uiv", ret, self.glGetError());
8295		} else {
8296			return ret
8297		}
8298		#[cfg(not(feature = "diagnose"))]
8299		return ret;
8300	}
8301	#[inline(always)]
8302	fn glTexParameterIiv(&self, target: GLenum, pname: GLenum, params: *const GLint) -> Result<()> {
8303		let ret = process_catch("glTexParameterIiv", catch_unwind(||(self.texparameteriiv)(target, pname, params)));
8304		#[cfg(feature = "diagnose")]
8305		if let Ok(ret) = ret {
8306			return to_result("glTexParameterIiv", ret, self.glGetError());
8307		} else {
8308			return ret
8309		}
8310		#[cfg(not(feature = "diagnose"))]
8311		return ret;
8312	}
8313	#[inline(always)]
8314	fn glTexParameterIuiv(&self, target: GLenum, pname: GLenum, params: *const GLuint) -> Result<()> {
8315		let ret = process_catch("glTexParameterIuiv", catch_unwind(||(self.texparameteriuiv)(target, pname, params)));
8316		#[cfg(feature = "diagnose")]
8317		if let Ok(ret) = ret {
8318			return to_result("glTexParameterIuiv", ret, self.glGetError());
8319		} else {
8320			return ret
8321		}
8322		#[cfg(not(feature = "diagnose"))]
8323		return ret;
8324	}
8325	#[inline(always)]
8326	fn glGetTexParameterIiv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
8327		let ret = process_catch("glGetTexParameterIiv", catch_unwind(||(self.gettexparameteriiv)(target, pname, params)));
8328		#[cfg(feature = "diagnose")]
8329		if let Ok(ret) = ret {
8330			return to_result("glGetTexParameterIiv", ret, self.glGetError());
8331		} else {
8332			return ret
8333		}
8334		#[cfg(not(feature = "diagnose"))]
8335		return ret;
8336	}
8337	#[inline(always)]
8338	fn glGetTexParameterIuiv(&self, target: GLenum, pname: GLenum, params: *mut GLuint) -> Result<()> {
8339		let ret = process_catch("glGetTexParameterIuiv", catch_unwind(||(self.gettexparameteriuiv)(target, pname, params)));
8340		#[cfg(feature = "diagnose")]
8341		if let Ok(ret) = ret {
8342			return to_result("glGetTexParameterIuiv", ret, self.glGetError());
8343		} else {
8344			return ret
8345		}
8346		#[cfg(not(feature = "diagnose"))]
8347		return ret;
8348	}
8349	#[inline(always)]
8350	fn glClearBufferiv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLint) -> Result<()> {
8351		let ret = process_catch("glClearBufferiv", catch_unwind(||(self.clearbufferiv)(buffer, drawbuffer, value)));
8352		#[cfg(feature = "diagnose")]
8353		if let Ok(ret) = ret {
8354			return to_result("glClearBufferiv", ret, self.glGetError());
8355		} else {
8356			return ret
8357		}
8358		#[cfg(not(feature = "diagnose"))]
8359		return ret;
8360	}
8361	#[inline(always)]
8362	fn glClearBufferuiv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLuint) -> Result<()> {
8363		let ret = process_catch("glClearBufferuiv", catch_unwind(||(self.clearbufferuiv)(buffer, drawbuffer, value)));
8364		#[cfg(feature = "diagnose")]
8365		if let Ok(ret) = ret {
8366			return to_result("glClearBufferuiv", ret, self.glGetError());
8367		} else {
8368			return ret
8369		}
8370		#[cfg(not(feature = "diagnose"))]
8371		return ret;
8372	}
8373	#[inline(always)]
8374	fn glClearBufferfv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLfloat) -> Result<()> {
8375		let ret = process_catch("glClearBufferfv", catch_unwind(||(self.clearbufferfv)(buffer, drawbuffer, value)));
8376		#[cfg(feature = "diagnose")]
8377		if let Ok(ret) = ret {
8378			return to_result("glClearBufferfv", ret, self.glGetError());
8379		} else {
8380			return ret
8381		}
8382		#[cfg(not(feature = "diagnose"))]
8383		return ret;
8384	}
8385	#[inline(always)]
8386	fn glClearBufferfi(&self, buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint) -> Result<()> {
8387		let ret = process_catch("glClearBufferfi", catch_unwind(||(self.clearbufferfi)(buffer, drawbuffer, depth, stencil)));
8388		#[cfg(feature = "diagnose")]
8389		if let Ok(ret) = ret {
8390			return to_result("glClearBufferfi", ret, self.glGetError());
8391		} else {
8392			return ret
8393		}
8394		#[cfg(not(feature = "diagnose"))]
8395		return ret;
8396	}
8397	#[inline(always)]
8398	fn glGetStringi(&self, name: GLenum, index: GLuint) -> Result<&'static str> {
8399		let ret = process_catch("glGetStringi", catch_unwind(||unsafe{CStr::from_ptr((self.getstringi)(name, index) as *const i8)}.to_str().unwrap()));
8400		#[cfg(feature = "diagnose")]
8401		if let Ok(ret) = ret {
8402			return to_result("glGetStringi", ret, self.glGetError());
8403		} else {
8404			return ret
8405		}
8406		#[cfg(not(feature = "diagnose"))]
8407		return ret;
8408	}
8409	#[inline(always)]
8410	fn glIsRenderbuffer(&self, renderbuffer: GLuint) -> Result<GLboolean> {
8411		let ret = process_catch("glIsRenderbuffer", catch_unwind(||(self.isrenderbuffer)(renderbuffer)));
8412		#[cfg(feature = "diagnose")]
8413		if let Ok(ret) = ret {
8414			return to_result("glIsRenderbuffer", ret, self.glGetError());
8415		} else {
8416			return ret
8417		}
8418		#[cfg(not(feature = "diagnose"))]
8419		return ret;
8420	}
8421	#[inline(always)]
8422	fn glBindRenderbuffer(&self, target: GLenum, renderbuffer: GLuint) -> Result<()> {
8423		let ret = process_catch("glBindRenderbuffer", catch_unwind(||(self.bindrenderbuffer)(target, renderbuffer)));
8424		#[cfg(feature = "diagnose")]
8425		if let Ok(ret) = ret {
8426			return to_result("glBindRenderbuffer", ret, self.glGetError());
8427		} else {
8428			return ret
8429		}
8430		#[cfg(not(feature = "diagnose"))]
8431		return ret;
8432	}
8433	#[inline(always)]
8434	fn glDeleteRenderbuffers(&self, n: GLsizei, renderbuffers: *const GLuint) -> Result<()> {
8435		let ret = process_catch("glDeleteRenderbuffers", catch_unwind(||(self.deleterenderbuffers)(n, renderbuffers)));
8436		#[cfg(feature = "diagnose")]
8437		if let Ok(ret) = ret {
8438			return to_result("glDeleteRenderbuffers", ret, self.glGetError());
8439		} else {
8440			return ret
8441		}
8442		#[cfg(not(feature = "diagnose"))]
8443		return ret;
8444	}
8445	#[inline(always)]
8446	fn glGenRenderbuffers(&self, n: GLsizei, renderbuffers: *mut GLuint) -> Result<()> {
8447		let ret = process_catch("glGenRenderbuffers", catch_unwind(||(self.genrenderbuffers)(n, renderbuffers)));
8448		#[cfg(feature = "diagnose")]
8449		if let Ok(ret) = ret {
8450			return to_result("glGenRenderbuffers", ret, self.glGetError());
8451		} else {
8452			return ret
8453		}
8454		#[cfg(not(feature = "diagnose"))]
8455		return ret;
8456	}
8457	#[inline(always)]
8458	fn glRenderbufferStorage(&self, target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
8459		let ret = process_catch("glRenderbufferStorage", catch_unwind(||(self.renderbufferstorage)(target, internalformat, width, height)));
8460		#[cfg(feature = "diagnose")]
8461		if let Ok(ret) = ret {
8462			return to_result("glRenderbufferStorage", ret, self.glGetError());
8463		} else {
8464			return ret
8465		}
8466		#[cfg(not(feature = "diagnose"))]
8467		return ret;
8468	}
8469	#[inline(always)]
8470	fn glGetRenderbufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
8471		let ret = process_catch("glGetRenderbufferParameteriv", catch_unwind(||(self.getrenderbufferparameteriv)(target, pname, params)));
8472		#[cfg(feature = "diagnose")]
8473		if let Ok(ret) = ret {
8474			return to_result("glGetRenderbufferParameteriv", ret, self.glGetError());
8475		} else {
8476			return ret
8477		}
8478		#[cfg(not(feature = "diagnose"))]
8479		return ret;
8480	}
8481	#[inline(always)]
8482	fn glIsFramebuffer(&self, framebuffer: GLuint) -> Result<GLboolean> {
8483		let ret = process_catch("glIsFramebuffer", catch_unwind(||(self.isframebuffer)(framebuffer)));
8484		#[cfg(feature = "diagnose")]
8485		if let Ok(ret) = ret {
8486			return to_result("glIsFramebuffer", ret, self.glGetError());
8487		} else {
8488			return ret
8489		}
8490		#[cfg(not(feature = "diagnose"))]
8491		return ret;
8492	}
8493	#[inline(always)]
8494	fn glBindFramebuffer(&self, target: GLenum, framebuffer: GLuint) -> Result<()> {
8495		let ret = process_catch("glBindFramebuffer", catch_unwind(||(self.bindframebuffer)(target, framebuffer)));
8496		#[cfg(feature = "diagnose")]
8497		if let Ok(ret) = ret {
8498			return to_result("glBindFramebuffer", ret, self.glGetError());
8499		} else {
8500			return ret
8501		}
8502		#[cfg(not(feature = "diagnose"))]
8503		return ret;
8504	}
8505	#[inline(always)]
8506	fn glDeleteFramebuffers(&self, n: GLsizei, framebuffers: *const GLuint) -> Result<()> {
8507		let ret = process_catch("glDeleteFramebuffers", catch_unwind(||(self.deleteframebuffers)(n, framebuffers)));
8508		#[cfg(feature = "diagnose")]
8509		if let Ok(ret) = ret {
8510			return to_result("glDeleteFramebuffers", ret, self.glGetError());
8511		} else {
8512			return ret
8513		}
8514		#[cfg(not(feature = "diagnose"))]
8515		return ret;
8516	}
8517	#[inline(always)]
8518	fn glGenFramebuffers(&self, n: GLsizei, framebuffers: *mut GLuint) -> Result<()> {
8519		let ret = process_catch("glGenFramebuffers", catch_unwind(||(self.genframebuffers)(n, framebuffers)));
8520		#[cfg(feature = "diagnose")]
8521		if let Ok(ret) = ret {
8522			return to_result("glGenFramebuffers", ret, self.glGetError());
8523		} else {
8524			return ret
8525		}
8526		#[cfg(not(feature = "diagnose"))]
8527		return ret;
8528	}
8529	#[inline(always)]
8530	fn glCheckFramebufferStatus(&self, target: GLenum) -> Result<GLenum> {
8531		let ret = process_catch("glCheckFramebufferStatus", catch_unwind(||(self.checkframebufferstatus)(target)));
8532		#[cfg(feature = "diagnose")]
8533		if let Ok(ret) = ret {
8534			return to_result("glCheckFramebufferStatus", ret, self.glGetError());
8535		} else {
8536			return ret
8537		}
8538		#[cfg(not(feature = "diagnose"))]
8539		return ret;
8540	}
8541	#[inline(always)]
8542	fn glFramebufferTexture1D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint) -> Result<()> {
8543		let ret = process_catch("glFramebufferTexture1D", catch_unwind(||(self.framebuffertexture1d)(target, attachment, textarget, texture, level)));
8544		#[cfg(feature = "diagnose")]
8545		if let Ok(ret) = ret {
8546			return to_result("glFramebufferTexture1D", ret, self.glGetError());
8547		} else {
8548			return ret
8549		}
8550		#[cfg(not(feature = "diagnose"))]
8551		return ret;
8552	}
8553	#[inline(always)]
8554	fn glFramebufferTexture2D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint) -> Result<()> {
8555		let ret = process_catch("glFramebufferTexture2D", catch_unwind(||(self.framebuffertexture2d)(target, attachment, textarget, texture, level)));
8556		#[cfg(feature = "diagnose")]
8557		if let Ok(ret) = ret {
8558			return to_result("glFramebufferTexture2D", ret, self.glGetError());
8559		} else {
8560			return ret
8561		}
8562		#[cfg(not(feature = "diagnose"))]
8563		return ret;
8564	}
8565	#[inline(always)]
8566	fn glFramebufferTexture3D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint, zoffset: GLint) -> Result<()> {
8567		let ret = process_catch("glFramebufferTexture3D", catch_unwind(||(self.framebuffertexture3d)(target, attachment, textarget, texture, level, zoffset)));
8568		#[cfg(feature = "diagnose")]
8569		if let Ok(ret) = ret {
8570			return to_result("glFramebufferTexture3D", ret, self.glGetError());
8571		} else {
8572			return ret
8573		}
8574		#[cfg(not(feature = "diagnose"))]
8575		return ret;
8576	}
8577	#[inline(always)]
8578	fn glFramebufferRenderbuffer(&self, target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: GLuint) -> Result<()> {
8579		let ret = process_catch("glFramebufferRenderbuffer", catch_unwind(||(self.framebufferrenderbuffer)(target, attachment, renderbuffertarget, renderbuffer)));
8580		#[cfg(feature = "diagnose")]
8581		if let Ok(ret) = ret {
8582			return to_result("glFramebufferRenderbuffer", ret, self.glGetError());
8583		} else {
8584			return ret
8585		}
8586		#[cfg(not(feature = "diagnose"))]
8587		return ret;
8588	}
8589	#[inline(always)]
8590	fn glGetFramebufferAttachmentParameteriv(&self, target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
8591		let ret = process_catch("glGetFramebufferAttachmentParameteriv", catch_unwind(||(self.getframebufferattachmentparameteriv)(target, attachment, pname, params)));
8592		#[cfg(feature = "diagnose")]
8593		if let Ok(ret) = ret {
8594			return to_result("glGetFramebufferAttachmentParameteriv", ret, self.glGetError());
8595		} else {
8596			return ret
8597		}
8598		#[cfg(not(feature = "diagnose"))]
8599		return ret;
8600	}
8601	#[inline(always)]
8602	fn glGenerateMipmap(&self, target: GLenum) -> Result<()> {
8603		let ret = process_catch("glGenerateMipmap", catch_unwind(||(self.generatemipmap)(target)));
8604		#[cfg(feature = "diagnose")]
8605		if let Ok(ret) = ret {
8606			return to_result("glGenerateMipmap", ret, self.glGetError());
8607		} else {
8608			return ret
8609		}
8610		#[cfg(not(feature = "diagnose"))]
8611		return ret;
8612	}
8613	#[inline(always)]
8614	fn glBlitFramebuffer(&self, srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum) -> Result<()> {
8615		let ret = process_catch("glBlitFramebuffer", catch_unwind(||(self.blitframebuffer)(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)));
8616		#[cfg(feature = "diagnose")]
8617		if let Ok(ret) = ret {
8618			return to_result("glBlitFramebuffer", ret, self.glGetError());
8619		} else {
8620			return ret
8621		}
8622		#[cfg(not(feature = "diagnose"))]
8623		return ret;
8624	}
8625	#[inline(always)]
8626	fn glRenderbufferStorageMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
8627		let ret = process_catch("glRenderbufferStorageMultisample", catch_unwind(||(self.renderbufferstoragemultisample)(target, samples, internalformat, width, height)));
8628		#[cfg(feature = "diagnose")]
8629		if let Ok(ret) = ret {
8630			return to_result("glRenderbufferStorageMultisample", ret, self.glGetError());
8631		} else {
8632			return ret
8633		}
8634		#[cfg(not(feature = "diagnose"))]
8635		return ret;
8636	}
8637	#[inline(always)]
8638	fn glFramebufferTextureLayer(&self, target: GLenum, attachment: GLenum, texture: GLuint, level: GLint, layer: GLint) -> Result<()> {
8639		let ret = process_catch("glFramebufferTextureLayer", catch_unwind(||(self.framebuffertexturelayer)(target, attachment, texture, level, layer)));
8640		#[cfg(feature = "diagnose")]
8641		if let Ok(ret) = ret {
8642			return to_result("glFramebufferTextureLayer", ret, self.glGetError());
8643		} else {
8644			return ret
8645		}
8646		#[cfg(not(feature = "diagnose"))]
8647		return ret;
8648	}
8649	#[inline(always)]
8650	fn glMapBufferRange(&self, target: GLenum, offset: GLintptr, length: GLsizeiptr, access: GLbitfield) -> Result<*mut c_void> {
8651		let ret = process_catch("glMapBufferRange", catch_unwind(||(self.mapbufferrange)(target, offset, length, access)));
8652		#[cfg(feature = "diagnose")]
8653		if let Ok(ret) = ret {
8654			return to_result("glMapBufferRange", ret, self.glGetError());
8655		} else {
8656			return ret
8657		}
8658		#[cfg(not(feature = "diagnose"))]
8659		return ret;
8660	}
8661	#[inline(always)]
8662	fn glFlushMappedBufferRange(&self, target: GLenum, offset: GLintptr, length: GLsizeiptr) -> Result<()> {
8663		let ret = process_catch("glFlushMappedBufferRange", catch_unwind(||(self.flushmappedbufferrange)(target, offset, length)));
8664		#[cfg(feature = "diagnose")]
8665		if let Ok(ret) = ret {
8666			return to_result("glFlushMappedBufferRange", ret, self.glGetError());
8667		} else {
8668			return ret
8669		}
8670		#[cfg(not(feature = "diagnose"))]
8671		return ret;
8672	}
8673	#[inline(always)]
8674	fn glBindVertexArray(&self, array: GLuint) -> Result<()> {
8675		let ret = process_catch("glBindVertexArray", catch_unwind(||(self.bindvertexarray)(array)));
8676		#[cfg(feature = "diagnose")]
8677		if let Ok(ret) = ret {
8678			return to_result("glBindVertexArray", ret, self.glGetError());
8679		} else {
8680			return ret
8681		}
8682		#[cfg(not(feature = "diagnose"))]
8683		return ret;
8684	}
8685	#[inline(always)]
8686	fn glDeleteVertexArrays(&self, n: GLsizei, arrays: *const GLuint) -> Result<()> {
8687		let ret = process_catch("glDeleteVertexArrays", catch_unwind(||(self.deletevertexarrays)(n, arrays)));
8688		#[cfg(feature = "diagnose")]
8689		if let Ok(ret) = ret {
8690			return to_result("glDeleteVertexArrays", ret, self.glGetError());
8691		} else {
8692			return ret
8693		}
8694		#[cfg(not(feature = "diagnose"))]
8695		return ret;
8696	}
8697	#[inline(always)]
8698	fn glGenVertexArrays(&self, n: GLsizei, arrays: *mut GLuint) -> Result<()> {
8699		let ret = process_catch("glGenVertexArrays", catch_unwind(||(self.genvertexarrays)(n, arrays)));
8700		#[cfg(feature = "diagnose")]
8701		if let Ok(ret) = ret {
8702			return to_result("glGenVertexArrays", ret, self.glGetError());
8703		} else {
8704			return ret
8705		}
8706		#[cfg(not(feature = "diagnose"))]
8707		return ret;
8708	}
8709	#[inline(always)]
8710	fn glIsVertexArray(&self, array: GLuint) -> Result<GLboolean> {
8711		let ret = process_catch("glIsVertexArray", catch_unwind(||(self.isvertexarray)(array)));
8712		#[cfg(feature = "diagnose")]
8713		if let Ok(ret) = ret {
8714			return to_result("glIsVertexArray", ret, self.glGetError());
8715		} else {
8716			return ret
8717		}
8718		#[cfg(not(feature = "diagnose"))]
8719		return ret;
8720	}
8721}
8722
8723impl Version30 {
8724	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
8725		let (_spec, major, minor, release) = base.get_version();
8726		if (major, minor, release) < (3, 0, 0) {
8727			return Self::default();
8728		}
8729		Self {
8730			available: true,
8731			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
8732			colormaski: {let proc = get_proc_address("glColorMaski"); if proc == null() {dummy_pfnglcolormaskiproc} else {unsafe{transmute(proc)}}},
8733			getbooleani_v: {let proc = get_proc_address("glGetBooleani_v"); if proc == null() {dummy_pfnglgetbooleani_vproc} else {unsafe{transmute(proc)}}},
8734			getintegeri_v: {let proc = get_proc_address("glGetIntegeri_v"); if proc == null() {dummy_pfnglgetintegeri_vproc} else {unsafe{transmute(proc)}}},
8735			enablei: {let proc = get_proc_address("glEnablei"); if proc == null() {dummy_pfnglenableiproc} else {unsafe{transmute(proc)}}},
8736			disablei: {let proc = get_proc_address("glDisablei"); if proc == null() {dummy_pfngldisableiproc} else {unsafe{transmute(proc)}}},
8737			isenabledi: {let proc = get_proc_address("glIsEnabledi"); if proc == null() {dummy_pfnglisenablediproc} else {unsafe{transmute(proc)}}},
8738			begintransformfeedback: {let proc = get_proc_address("glBeginTransformFeedback"); if proc == null() {dummy_pfnglbegintransformfeedbackproc} else {unsafe{transmute(proc)}}},
8739			endtransformfeedback: {let proc = get_proc_address("glEndTransformFeedback"); if proc == null() {dummy_pfnglendtransformfeedbackproc} else {unsafe{transmute(proc)}}},
8740			bindbufferrange: {let proc = get_proc_address("glBindBufferRange"); if proc == null() {dummy_pfnglbindbufferrangeproc} else {unsafe{transmute(proc)}}},
8741			bindbufferbase: {let proc = get_proc_address("glBindBufferBase"); if proc == null() {dummy_pfnglbindbufferbaseproc} else {unsafe{transmute(proc)}}},
8742			transformfeedbackvaryings: {let proc = get_proc_address("glTransformFeedbackVaryings"); if proc == null() {dummy_pfngltransformfeedbackvaryingsproc} else {unsafe{transmute(proc)}}},
8743			gettransformfeedbackvarying: {let proc = get_proc_address("glGetTransformFeedbackVarying"); if proc == null() {dummy_pfnglgettransformfeedbackvaryingproc} else {unsafe{transmute(proc)}}},
8744			clampcolor: {let proc = get_proc_address("glClampColor"); if proc == null() {dummy_pfnglclampcolorproc} else {unsafe{transmute(proc)}}},
8745			beginconditionalrender: {let proc = get_proc_address("glBeginConditionalRender"); if proc == null() {dummy_pfnglbeginconditionalrenderproc} else {unsafe{transmute(proc)}}},
8746			endconditionalrender: {let proc = get_proc_address("glEndConditionalRender"); if proc == null() {dummy_pfnglendconditionalrenderproc} else {unsafe{transmute(proc)}}},
8747			vertexattribipointer: {let proc = get_proc_address("glVertexAttribIPointer"); if proc == null() {dummy_pfnglvertexattribipointerproc} else {unsafe{transmute(proc)}}},
8748			getvertexattribiiv: {let proc = get_proc_address("glGetVertexAttribIiv"); if proc == null() {dummy_pfnglgetvertexattribiivproc} else {unsafe{transmute(proc)}}},
8749			getvertexattribiuiv: {let proc = get_proc_address("glGetVertexAttribIuiv"); if proc == null() {dummy_pfnglgetvertexattribiuivproc} else {unsafe{transmute(proc)}}},
8750			vertexattribi1i: {let proc = get_proc_address("glVertexAttribI1i"); if proc == null() {dummy_pfnglvertexattribi1iproc} else {unsafe{transmute(proc)}}},
8751			vertexattribi2i: {let proc = get_proc_address("glVertexAttribI2i"); if proc == null() {dummy_pfnglvertexattribi2iproc} else {unsafe{transmute(proc)}}},
8752			vertexattribi3i: {let proc = get_proc_address("glVertexAttribI3i"); if proc == null() {dummy_pfnglvertexattribi3iproc} else {unsafe{transmute(proc)}}},
8753			vertexattribi4i: {let proc = get_proc_address("glVertexAttribI4i"); if proc == null() {dummy_pfnglvertexattribi4iproc} else {unsafe{transmute(proc)}}},
8754			vertexattribi1ui: {let proc = get_proc_address("glVertexAttribI1ui"); if proc == null() {dummy_pfnglvertexattribi1uiproc} else {unsafe{transmute(proc)}}},
8755			vertexattribi2ui: {let proc = get_proc_address("glVertexAttribI2ui"); if proc == null() {dummy_pfnglvertexattribi2uiproc} else {unsafe{transmute(proc)}}},
8756			vertexattribi3ui: {let proc = get_proc_address("glVertexAttribI3ui"); if proc == null() {dummy_pfnglvertexattribi3uiproc} else {unsafe{transmute(proc)}}},
8757			vertexattribi4ui: {let proc = get_proc_address("glVertexAttribI4ui"); if proc == null() {dummy_pfnglvertexattribi4uiproc} else {unsafe{transmute(proc)}}},
8758			vertexattribi1iv: {let proc = get_proc_address("glVertexAttribI1iv"); if proc == null() {dummy_pfnglvertexattribi1ivproc} else {unsafe{transmute(proc)}}},
8759			vertexattribi2iv: {let proc = get_proc_address("glVertexAttribI2iv"); if proc == null() {dummy_pfnglvertexattribi2ivproc} else {unsafe{transmute(proc)}}},
8760			vertexattribi3iv: {let proc = get_proc_address("glVertexAttribI3iv"); if proc == null() {dummy_pfnglvertexattribi3ivproc} else {unsafe{transmute(proc)}}},
8761			vertexattribi4iv: {let proc = get_proc_address("glVertexAttribI4iv"); if proc == null() {dummy_pfnglvertexattribi4ivproc} else {unsafe{transmute(proc)}}},
8762			vertexattribi1uiv: {let proc = get_proc_address("glVertexAttribI1uiv"); if proc == null() {dummy_pfnglvertexattribi1uivproc} else {unsafe{transmute(proc)}}},
8763			vertexattribi2uiv: {let proc = get_proc_address("glVertexAttribI2uiv"); if proc == null() {dummy_pfnglvertexattribi2uivproc} else {unsafe{transmute(proc)}}},
8764			vertexattribi3uiv: {let proc = get_proc_address("glVertexAttribI3uiv"); if proc == null() {dummy_pfnglvertexattribi3uivproc} else {unsafe{transmute(proc)}}},
8765			vertexattribi4uiv: {let proc = get_proc_address("glVertexAttribI4uiv"); if proc == null() {dummy_pfnglvertexattribi4uivproc} else {unsafe{transmute(proc)}}},
8766			vertexattribi4bv: {let proc = get_proc_address("glVertexAttribI4bv"); if proc == null() {dummy_pfnglvertexattribi4bvproc} else {unsafe{transmute(proc)}}},
8767			vertexattribi4sv: {let proc = get_proc_address("glVertexAttribI4sv"); if proc == null() {dummy_pfnglvertexattribi4svproc} else {unsafe{transmute(proc)}}},
8768			vertexattribi4ubv: {let proc = get_proc_address("glVertexAttribI4ubv"); if proc == null() {dummy_pfnglvertexattribi4ubvproc} else {unsafe{transmute(proc)}}},
8769			vertexattribi4usv: {let proc = get_proc_address("glVertexAttribI4usv"); if proc == null() {dummy_pfnglvertexattribi4usvproc} else {unsafe{transmute(proc)}}},
8770			getuniformuiv: {let proc = get_proc_address("glGetUniformuiv"); if proc == null() {dummy_pfnglgetuniformuivproc} else {unsafe{transmute(proc)}}},
8771			bindfragdatalocation: {let proc = get_proc_address("glBindFragDataLocation"); if proc == null() {dummy_pfnglbindfragdatalocationproc} else {unsafe{transmute(proc)}}},
8772			getfragdatalocation: {let proc = get_proc_address("glGetFragDataLocation"); if proc == null() {dummy_pfnglgetfragdatalocationproc} else {unsafe{transmute(proc)}}},
8773			uniform1ui: {let proc = get_proc_address("glUniform1ui"); if proc == null() {dummy_pfngluniform1uiproc} else {unsafe{transmute(proc)}}},
8774			uniform2ui: {let proc = get_proc_address("glUniform2ui"); if proc == null() {dummy_pfngluniform2uiproc} else {unsafe{transmute(proc)}}},
8775			uniform3ui: {let proc = get_proc_address("glUniform3ui"); if proc == null() {dummy_pfngluniform3uiproc} else {unsafe{transmute(proc)}}},
8776			uniform4ui: {let proc = get_proc_address("glUniform4ui"); if proc == null() {dummy_pfngluniform4uiproc} else {unsafe{transmute(proc)}}},
8777			uniform1uiv: {let proc = get_proc_address("glUniform1uiv"); if proc == null() {dummy_pfngluniform1uivproc} else {unsafe{transmute(proc)}}},
8778			uniform2uiv: {let proc = get_proc_address("glUniform2uiv"); if proc == null() {dummy_pfngluniform2uivproc} else {unsafe{transmute(proc)}}},
8779			uniform3uiv: {let proc = get_proc_address("glUniform3uiv"); if proc == null() {dummy_pfngluniform3uivproc} else {unsafe{transmute(proc)}}},
8780			uniform4uiv: {let proc = get_proc_address("glUniform4uiv"); if proc == null() {dummy_pfngluniform4uivproc} else {unsafe{transmute(proc)}}},
8781			texparameteriiv: {let proc = get_proc_address("glTexParameterIiv"); if proc == null() {dummy_pfngltexparameteriivproc} else {unsafe{transmute(proc)}}},
8782			texparameteriuiv: {let proc = get_proc_address("glTexParameterIuiv"); if proc == null() {dummy_pfngltexparameteriuivproc} else {unsafe{transmute(proc)}}},
8783			gettexparameteriiv: {let proc = get_proc_address("glGetTexParameterIiv"); if proc == null() {dummy_pfnglgettexparameteriivproc} else {unsafe{transmute(proc)}}},
8784			gettexparameteriuiv: {let proc = get_proc_address("glGetTexParameterIuiv"); if proc == null() {dummy_pfnglgettexparameteriuivproc} else {unsafe{transmute(proc)}}},
8785			clearbufferiv: {let proc = get_proc_address("glClearBufferiv"); if proc == null() {dummy_pfnglclearbufferivproc} else {unsafe{transmute(proc)}}},
8786			clearbufferuiv: {let proc = get_proc_address("glClearBufferuiv"); if proc == null() {dummy_pfnglclearbufferuivproc} else {unsafe{transmute(proc)}}},
8787			clearbufferfv: {let proc = get_proc_address("glClearBufferfv"); if proc == null() {dummy_pfnglclearbufferfvproc} else {unsafe{transmute(proc)}}},
8788			clearbufferfi: {let proc = get_proc_address("glClearBufferfi"); if proc == null() {dummy_pfnglclearbufferfiproc} else {unsafe{transmute(proc)}}},
8789			getstringi: {let proc = get_proc_address("glGetStringi"); if proc == null() {dummy_pfnglgetstringiproc} else {unsafe{transmute(proc)}}},
8790			isrenderbuffer: {let proc = get_proc_address("glIsRenderbuffer"); if proc == null() {dummy_pfnglisrenderbufferproc} else {unsafe{transmute(proc)}}},
8791			bindrenderbuffer: {let proc = get_proc_address("glBindRenderbuffer"); if proc == null() {dummy_pfnglbindrenderbufferproc} else {unsafe{transmute(proc)}}},
8792			deleterenderbuffers: {let proc = get_proc_address("glDeleteRenderbuffers"); if proc == null() {dummy_pfngldeleterenderbuffersproc} else {unsafe{transmute(proc)}}},
8793			genrenderbuffers: {let proc = get_proc_address("glGenRenderbuffers"); if proc == null() {dummy_pfnglgenrenderbuffersproc} else {unsafe{transmute(proc)}}},
8794			renderbufferstorage: {let proc = get_proc_address("glRenderbufferStorage"); if proc == null() {dummy_pfnglrenderbufferstorageproc} else {unsafe{transmute(proc)}}},
8795			getrenderbufferparameteriv: {let proc = get_proc_address("glGetRenderbufferParameteriv"); if proc == null() {dummy_pfnglgetrenderbufferparameterivproc} else {unsafe{transmute(proc)}}},
8796			isframebuffer: {let proc = get_proc_address("glIsFramebuffer"); if proc == null() {dummy_pfnglisframebufferproc} else {unsafe{transmute(proc)}}},
8797			bindframebuffer: {let proc = get_proc_address("glBindFramebuffer"); if proc == null() {dummy_pfnglbindframebufferproc} else {unsafe{transmute(proc)}}},
8798			deleteframebuffers: {let proc = get_proc_address("glDeleteFramebuffers"); if proc == null() {dummy_pfngldeleteframebuffersproc} else {unsafe{transmute(proc)}}},
8799			genframebuffers: {let proc = get_proc_address("glGenFramebuffers"); if proc == null() {dummy_pfnglgenframebuffersproc} else {unsafe{transmute(proc)}}},
8800			checkframebufferstatus: {let proc = get_proc_address("glCheckFramebufferStatus"); if proc == null() {dummy_pfnglcheckframebufferstatusproc} else {unsafe{transmute(proc)}}},
8801			framebuffertexture1d: {let proc = get_proc_address("glFramebufferTexture1D"); if proc == null() {dummy_pfnglframebuffertexture1dproc} else {unsafe{transmute(proc)}}},
8802			framebuffertexture2d: {let proc = get_proc_address("glFramebufferTexture2D"); if proc == null() {dummy_pfnglframebuffertexture2dproc} else {unsafe{transmute(proc)}}},
8803			framebuffertexture3d: {let proc = get_proc_address("glFramebufferTexture3D"); if proc == null() {dummy_pfnglframebuffertexture3dproc} else {unsafe{transmute(proc)}}},
8804			framebufferrenderbuffer: {let proc = get_proc_address("glFramebufferRenderbuffer"); if proc == null() {dummy_pfnglframebufferrenderbufferproc} else {unsafe{transmute(proc)}}},
8805			getframebufferattachmentparameteriv: {let proc = get_proc_address("glGetFramebufferAttachmentParameteriv"); if proc == null() {dummy_pfnglgetframebufferattachmentparameterivproc} else {unsafe{transmute(proc)}}},
8806			generatemipmap: {let proc = get_proc_address("glGenerateMipmap"); if proc == null() {dummy_pfnglgeneratemipmapproc} else {unsafe{transmute(proc)}}},
8807			blitframebuffer: {let proc = get_proc_address("glBlitFramebuffer"); if proc == null() {dummy_pfnglblitframebufferproc} else {unsafe{transmute(proc)}}},
8808			renderbufferstoragemultisample: {let proc = get_proc_address("glRenderbufferStorageMultisample"); if proc == null() {dummy_pfnglrenderbufferstoragemultisampleproc} else {unsafe{transmute(proc)}}},
8809			framebuffertexturelayer: {let proc = get_proc_address("glFramebufferTextureLayer"); if proc == null() {dummy_pfnglframebuffertexturelayerproc} else {unsafe{transmute(proc)}}},
8810			mapbufferrange: {let proc = get_proc_address("glMapBufferRange"); if proc == null() {dummy_pfnglmapbufferrangeproc} else {unsafe{transmute(proc)}}},
8811			flushmappedbufferrange: {let proc = get_proc_address("glFlushMappedBufferRange"); if proc == null() {dummy_pfnglflushmappedbufferrangeproc} else {unsafe{transmute(proc)}}},
8812			bindvertexarray: {let proc = get_proc_address("glBindVertexArray"); if proc == null() {dummy_pfnglbindvertexarrayproc} else {unsafe{transmute(proc)}}},
8813			deletevertexarrays: {let proc = get_proc_address("glDeleteVertexArrays"); if proc == null() {dummy_pfngldeletevertexarraysproc} else {unsafe{transmute(proc)}}},
8814			genvertexarrays: {let proc = get_proc_address("glGenVertexArrays"); if proc == null() {dummy_pfnglgenvertexarraysproc} else {unsafe{transmute(proc)}}},
8815			isvertexarray: {let proc = get_proc_address("glIsVertexArray"); if proc == null() {dummy_pfnglisvertexarrayproc} else {unsafe{transmute(proc)}}},
8816		}
8817	}
8818	#[inline(always)]
8819	pub fn get_available(&self) -> bool {
8820		self.available
8821	}
8822}
8823
8824impl Default for Version30 {
8825	fn default() -> Self {
8826		Self {
8827			available: false,
8828			geterror: dummy_pfnglgeterrorproc,
8829			colormaski: dummy_pfnglcolormaskiproc,
8830			getbooleani_v: dummy_pfnglgetbooleani_vproc,
8831			getintegeri_v: dummy_pfnglgetintegeri_vproc,
8832			enablei: dummy_pfnglenableiproc,
8833			disablei: dummy_pfngldisableiproc,
8834			isenabledi: dummy_pfnglisenablediproc,
8835			begintransformfeedback: dummy_pfnglbegintransformfeedbackproc,
8836			endtransformfeedback: dummy_pfnglendtransformfeedbackproc,
8837			bindbufferrange: dummy_pfnglbindbufferrangeproc,
8838			bindbufferbase: dummy_pfnglbindbufferbaseproc,
8839			transformfeedbackvaryings: dummy_pfngltransformfeedbackvaryingsproc,
8840			gettransformfeedbackvarying: dummy_pfnglgettransformfeedbackvaryingproc,
8841			clampcolor: dummy_pfnglclampcolorproc,
8842			beginconditionalrender: dummy_pfnglbeginconditionalrenderproc,
8843			endconditionalrender: dummy_pfnglendconditionalrenderproc,
8844			vertexattribipointer: dummy_pfnglvertexattribipointerproc,
8845			getvertexattribiiv: dummy_pfnglgetvertexattribiivproc,
8846			getvertexattribiuiv: dummy_pfnglgetvertexattribiuivproc,
8847			vertexattribi1i: dummy_pfnglvertexattribi1iproc,
8848			vertexattribi2i: dummy_pfnglvertexattribi2iproc,
8849			vertexattribi3i: dummy_pfnglvertexattribi3iproc,
8850			vertexattribi4i: dummy_pfnglvertexattribi4iproc,
8851			vertexattribi1ui: dummy_pfnglvertexattribi1uiproc,
8852			vertexattribi2ui: dummy_pfnglvertexattribi2uiproc,
8853			vertexattribi3ui: dummy_pfnglvertexattribi3uiproc,
8854			vertexattribi4ui: dummy_pfnglvertexattribi4uiproc,
8855			vertexattribi1iv: dummy_pfnglvertexattribi1ivproc,
8856			vertexattribi2iv: dummy_pfnglvertexattribi2ivproc,
8857			vertexattribi3iv: dummy_pfnglvertexattribi3ivproc,
8858			vertexattribi4iv: dummy_pfnglvertexattribi4ivproc,
8859			vertexattribi1uiv: dummy_pfnglvertexattribi1uivproc,
8860			vertexattribi2uiv: dummy_pfnglvertexattribi2uivproc,
8861			vertexattribi3uiv: dummy_pfnglvertexattribi3uivproc,
8862			vertexattribi4uiv: dummy_pfnglvertexattribi4uivproc,
8863			vertexattribi4bv: dummy_pfnglvertexattribi4bvproc,
8864			vertexattribi4sv: dummy_pfnglvertexattribi4svproc,
8865			vertexattribi4ubv: dummy_pfnglvertexattribi4ubvproc,
8866			vertexattribi4usv: dummy_pfnglvertexattribi4usvproc,
8867			getuniformuiv: dummy_pfnglgetuniformuivproc,
8868			bindfragdatalocation: dummy_pfnglbindfragdatalocationproc,
8869			getfragdatalocation: dummy_pfnglgetfragdatalocationproc,
8870			uniform1ui: dummy_pfngluniform1uiproc,
8871			uniform2ui: dummy_pfngluniform2uiproc,
8872			uniform3ui: dummy_pfngluniform3uiproc,
8873			uniform4ui: dummy_pfngluniform4uiproc,
8874			uniform1uiv: dummy_pfngluniform1uivproc,
8875			uniform2uiv: dummy_pfngluniform2uivproc,
8876			uniform3uiv: dummy_pfngluniform3uivproc,
8877			uniform4uiv: dummy_pfngluniform4uivproc,
8878			texparameteriiv: dummy_pfngltexparameteriivproc,
8879			texparameteriuiv: dummy_pfngltexparameteriuivproc,
8880			gettexparameteriiv: dummy_pfnglgettexparameteriivproc,
8881			gettexparameteriuiv: dummy_pfnglgettexparameteriuivproc,
8882			clearbufferiv: dummy_pfnglclearbufferivproc,
8883			clearbufferuiv: dummy_pfnglclearbufferuivproc,
8884			clearbufferfv: dummy_pfnglclearbufferfvproc,
8885			clearbufferfi: dummy_pfnglclearbufferfiproc,
8886			getstringi: dummy_pfnglgetstringiproc,
8887			isrenderbuffer: dummy_pfnglisrenderbufferproc,
8888			bindrenderbuffer: dummy_pfnglbindrenderbufferproc,
8889			deleterenderbuffers: dummy_pfngldeleterenderbuffersproc,
8890			genrenderbuffers: dummy_pfnglgenrenderbuffersproc,
8891			renderbufferstorage: dummy_pfnglrenderbufferstorageproc,
8892			getrenderbufferparameteriv: dummy_pfnglgetrenderbufferparameterivproc,
8893			isframebuffer: dummy_pfnglisframebufferproc,
8894			bindframebuffer: dummy_pfnglbindframebufferproc,
8895			deleteframebuffers: dummy_pfngldeleteframebuffersproc,
8896			genframebuffers: dummy_pfnglgenframebuffersproc,
8897			checkframebufferstatus: dummy_pfnglcheckframebufferstatusproc,
8898			framebuffertexture1d: dummy_pfnglframebuffertexture1dproc,
8899			framebuffertexture2d: dummy_pfnglframebuffertexture2dproc,
8900			framebuffertexture3d: dummy_pfnglframebuffertexture3dproc,
8901			framebufferrenderbuffer: dummy_pfnglframebufferrenderbufferproc,
8902			getframebufferattachmentparameteriv: dummy_pfnglgetframebufferattachmentparameterivproc,
8903			generatemipmap: dummy_pfnglgeneratemipmapproc,
8904			blitframebuffer: dummy_pfnglblitframebufferproc,
8905			renderbufferstoragemultisample: dummy_pfnglrenderbufferstoragemultisampleproc,
8906			framebuffertexturelayer: dummy_pfnglframebuffertexturelayerproc,
8907			mapbufferrange: dummy_pfnglmapbufferrangeproc,
8908			flushmappedbufferrange: dummy_pfnglflushmappedbufferrangeproc,
8909			bindvertexarray: dummy_pfnglbindvertexarrayproc,
8910			deletevertexarrays: dummy_pfngldeletevertexarraysproc,
8911			genvertexarrays: dummy_pfnglgenvertexarraysproc,
8912			isvertexarray: dummy_pfnglisvertexarrayproc,
8913		}
8914	}
8915}
8916impl Debug for Version30 {
8917	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
8918		if self.available {
8919			f.debug_struct("Version30")
8920			.field("available", &self.available)
8921			.field("colormaski", unsafe{if transmute::<_, *const c_void>(self.colormaski) == (dummy_pfnglcolormaskiproc as *const c_void) {&null::<PFNGLCOLORMASKIPROC>()} else {&self.colormaski}})
8922			.field("getbooleani_v", unsafe{if transmute::<_, *const c_void>(self.getbooleani_v) == (dummy_pfnglgetbooleani_vproc as *const c_void) {&null::<PFNGLGETBOOLEANI_VPROC>()} else {&self.getbooleani_v}})
8923			.field("getintegeri_v", unsafe{if transmute::<_, *const c_void>(self.getintegeri_v) == (dummy_pfnglgetintegeri_vproc as *const c_void) {&null::<PFNGLGETINTEGERI_VPROC>()} else {&self.getintegeri_v}})
8924			.field("enablei", unsafe{if transmute::<_, *const c_void>(self.enablei) == (dummy_pfnglenableiproc as *const c_void) {&null::<PFNGLENABLEIPROC>()} else {&self.enablei}})
8925			.field("disablei", unsafe{if transmute::<_, *const c_void>(self.disablei) == (dummy_pfngldisableiproc as *const c_void) {&null::<PFNGLDISABLEIPROC>()} else {&self.disablei}})
8926			.field("isenabledi", unsafe{if transmute::<_, *const c_void>(self.isenabledi) == (dummy_pfnglisenablediproc as *const c_void) {&null::<PFNGLISENABLEDIPROC>()} else {&self.isenabledi}})
8927			.field("begintransformfeedback", unsafe{if transmute::<_, *const c_void>(self.begintransformfeedback) == (dummy_pfnglbegintransformfeedbackproc as *const c_void) {&null::<PFNGLBEGINTRANSFORMFEEDBACKPROC>()} else {&self.begintransformfeedback}})
8928			.field("endtransformfeedback", unsafe{if transmute::<_, *const c_void>(self.endtransformfeedback) == (dummy_pfnglendtransformfeedbackproc as *const c_void) {&null::<PFNGLENDTRANSFORMFEEDBACKPROC>()} else {&self.endtransformfeedback}})
8929			.field("bindbufferrange", unsafe{if transmute::<_, *const c_void>(self.bindbufferrange) == (dummy_pfnglbindbufferrangeproc as *const c_void) {&null::<PFNGLBINDBUFFERRANGEPROC>()} else {&self.bindbufferrange}})
8930			.field("bindbufferbase", unsafe{if transmute::<_, *const c_void>(self.bindbufferbase) == (dummy_pfnglbindbufferbaseproc as *const c_void) {&null::<PFNGLBINDBUFFERBASEPROC>()} else {&self.bindbufferbase}})
8931			.field("transformfeedbackvaryings", unsafe{if transmute::<_, *const c_void>(self.transformfeedbackvaryings) == (dummy_pfngltransformfeedbackvaryingsproc as *const c_void) {&null::<PFNGLTRANSFORMFEEDBACKVARYINGSPROC>()} else {&self.transformfeedbackvaryings}})
8932			.field("gettransformfeedbackvarying", unsafe{if transmute::<_, *const c_void>(self.gettransformfeedbackvarying) == (dummy_pfnglgettransformfeedbackvaryingproc as *const c_void) {&null::<PFNGLGETTRANSFORMFEEDBACKVARYINGPROC>()} else {&self.gettransformfeedbackvarying}})
8933			.field("clampcolor", unsafe{if transmute::<_, *const c_void>(self.clampcolor) == (dummy_pfnglclampcolorproc as *const c_void) {&null::<PFNGLCLAMPCOLORPROC>()} else {&self.clampcolor}})
8934			.field("beginconditionalrender", unsafe{if transmute::<_, *const c_void>(self.beginconditionalrender) == (dummy_pfnglbeginconditionalrenderproc as *const c_void) {&null::<PFNGLBEGINCONDITIONALRENDERPROC>()} else {&self.beginconditionalrender}})
8935			.field("endconditionalrender", unsafe{if transmute::<_, *const c_void>(self.endconditionalrender) == (dummy_pfnglendconditionalrenderproc as *const c_void) {&null::<PFNGLENDCONDITIONALRENDERPROC>()} else {&self.endconditionalrender}})
8936			.field("vertexattribipointer", unsafe{if transmute::<_, *const c_void>(self.vertexattribipointer) == (dummy_pfnglvertexattribipointerproc as *const c_void) {&null::<PFNGLVERTEXATTRIBIPOINTERPROC>()} else {&self.vertexattribipointer}})
8937			.field("getvertexattribiiv", unsafe{if transmute::<_, *const c_void>(self.getvertexattribiiv) == (dummy_pfnglgetvertexattribiivproc as *const c_void) {&null::<PFNGLGETVERTEXATTRIBIIVPROC>()} else {&self.getvertexattribiiv}})
8938			.field("getvertexattribiuiv", unsafe{if transmute::<_, *const c_void>(self.getvertexattribiuiv) == (dummy_pfnglgetvertexattribiuivproc as *const c_void) {&null::<PFNGLGETVERTEXATTRIBIUIVPROC>()} else {&self.getvertexattribiuiv}})
8939			.field("vertexattribi1i", unsafe{if transmute::<_, *const c_void>(self.vertexattribi1i) == (dummy_pfnglvertexattribi1iproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI1IPROC>()} else {&self.vertexattribi1i}})
8940			.field("vertexattribi2i", unsafe{if transmute::<_, *const c_void>(self.vertexattribi2i) == (dummy_pfnglvertexattribi2iproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI2IPROC>()} else {&self.vertexattribi2i}})
8941			.field("vertexattribi3i", unsafe{if transmute::<_, *const c_void>(self.vertexattribi3i) == (dummy_pfnglvertexattribi3iproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI3IPROC>()} else {&self.vertexattribi3i}})
8942			.field("vertexattribi4i", unsafe{if transmute::<_, *const c_void>(self.vertexattribi4i) == (dummy_pfnglvertexattribi4iproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI4IPROC>()} else {&self.vertexattribi4i}})
8943			.field("vertexattribi1ui", unsafe{if transmute::<_, *const c_void>(self.vertexattribi1ui) == (dummy_pfnglvertexattribi1uiproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI1UIPROC>()} else {&self.vertexattribi1ui}})
8944			.field("vertexattribi2ui", unsafe{if transmute::<_, *const c_void>(self.vertexattribi2ui) == (dummy_pfnglvertexattribi2uiproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI2UIPROC>()} else {&self.vertexattribi2ui}})
8945			.field("vertexattribi3ui", unsafe{if transmute::<_, *const c_void>(self.vertexattribi3ui) == (dummy_pfnglvertexattribi3uiproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI3UIPROC>()} else {&self.vertexattribi3ui}})
8946			.field("vertexattribi4ui", unsafe{if transmute::<_, *const c_void>(self.vertexattribi4ui) == (dummy_pfnglvertexattribi4uiproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI4UIPROC>()} else {&self.vertexattribi4ui}})
8947			.field("vertexattribi1iv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi1iv) == (dummy_pfnglvertexattribi1ivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI1IVPROC>()} else {&self.vertexattribi1iv}})
8948			.field("vertexattribi2iv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi2iv) == (dummy_pfnglvertexattribi2ivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI2IVPROC>()} else {&self.vertexattribi2iv}})
8949			.field("vertexattribi3iv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi3iv) == (dummy_pfnglvertexattribi3ivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI3IVPROC>()} else {&self.vertexattribi3iv}})
8950			.field("vertexattribi4iv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi4iv) == (dummy_pfnglvertexattribi4ivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI4IVPROC>()} else {&self.vertexattribi4iv}})
8951			.field("vertexattribi1uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi1uiv) == (dummy_pfnglvertexattribi1uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI1UIVPROC>()} else {&self.vertexattribi1uiv}})
8952			.field("vertexattribi2uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi2uiv) == (dummy_pfnglvertexattribi2uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI2UIVPROC>()} else {&self.vertexattribi2uiv}})
8953			.field("vertexattribi3uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi3uiv) == (dummy_pfnglvertexattribi3uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI3UIVPROC>()} else {&self.vertexattribi3uiv}})
8954			.field("vertexattribi4uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi4uiv) == (dummy_pfnglvertexattribi4uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI4UIVPROC>()} else {&self.vertexattribi4uiv}})
8955			.field("vertexattribi4bv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi4bv) == (dummy_pfnglvertexattribi4bvproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI4BVPROC>()} else {&self.vertexattribi4bv}})
8956			.field("vertexattribi4sv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi4sv) == (dummy_pfnglvertexattribi4svproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI4SVPROC>()} else {&self.vertexattribi4sv}})
8957			.field("vertexattribi4ubv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi4ubv) == (dummy_pfnglvertexattribi4ubvproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI4UBVPROC>()} else {&self.vertexattribi4ubv}})
8958			.field("vertexattribi4usv", unsafe{if transmute::<_, *const c_void>(self.vertexattribi4usv) == (dummy_pfnglvertexattribi4usvproc as *const c_void) {&null::<PFNGLVERTEXATTRIBI4USVPROC>()} else {&self.vertexattribi4usv}})
8959			.field("getuniformuiv", unsafe{if transmute::<_, *const c_void>(self.getuniformuiv) == (dummy_pfnglgetuniformuivproc as *const c_void) {&null::<PFNGLGETUNIFORMUIVPROC>()} else {&self.getuniformuiv}})
8960			.field("bindfragdatalocation", unsafe{if transmute::<_, *const c_void>(self.bindfragdatalocation) == (dummy_pfnglbindfragdatalocationproc as *const c_void) {&null::<PFNGLBINDFRAGDATALOCATIONPROC>()} else {&self.bindfragdatalocation}})
8961			.field("getfragdatalocation", unsafe{if transmute::<_, *const c_void>(self.getfragdatalocation) == (dummy_pfnglgetfragdatalocationproc as *const c_void) {&null::<PFNGLGETFRAGDATALOCATIONPROC>()} else {&self.getfragdatalocation}})
8962			.field("uniform1ui", unsafe{if transmute::<_, *const c_void>(self.uniform1ui) == (dummy_pfngluniform1uiproc as *const c_void) {&null::<PFNGLUNIFORM1UIPROC>()} else {&self.uniform1ui}})
8963			.field("uniform2ui", unsafe{if transmute::<_, *const c_void>(self.uniform2ui) == (dummy_pfngluniform2uiproc as *const c_void) {&null::<PFNGLUNIFORM2UIPROC>()} else {&self.uniform2ui}})
8964			.field("uniform3ui", unsafe{if transmute::<_, *const c_void>(self.uniform3ui) == (dummy_pfngluniform3uiproc as *const c_void) {&null::<PFNGLUNIFORM3UIPROC>()} else {&self.uniform3ui}})
8965			.field("uniform4ui", unsafe{if transmute::<_, *const c_void>(self.uniform4ui) == (dummy_pfngluniform4uiproc as *const c_void) {&null::<PFNGLUNIFORM4UIPROC>()} else {&self.uniform4ui}})
8966			.field("uniform1uiv", unsafe{if transmute::<_, *const c_void>(self.uniform1uiv) == (dummy_pfngluniform1uivproc as *const c_void) {&null::<PFNGLUNIFORM1UIVPROC>()} else {&self.uniform1uiv}})
8967			.field("uniform2uiv", unsafe{if transmute::<_, *const c_void>(self.uniform2uiv) == (dummy_pfngluniform2uivproc as *const c_void) {&null::<PFNGLUNIFORM2UIVPROC>()} else {&self.uniform2uiv}})
8968			.field("uniform3uiv", unsafe{if transmute::<_, *const c_void>(self.uniform3uiv) == (dummy_pfngluniform3uivproc as *const c_void) {&null::<PFNGLUNIFORM3UIVPROC>()} else {&self.uniform3uiv}})
8969			.field("uniform4uiv", unsafe{if transmute::<_, *const c_void>(self.uniform4uiv) == (dummy_pfngluniform4uivproc as *const c_void) {&null::<PFNGLUNIFORM4UIVPROC>()} else {&self.uniform4uiv}})
8970			.field("texparameteriiv", unsafe{if transmute::<_, *const c_void>(self.texparameteriiv) == (dummy_pfngltexparameteriivproc as *const c_void) {&null::<PFNGLTEXPARAMETERIIVPROC>()} else {&self.texparameteriiv}})
8971			.field("texparameteriuiv", unsafe{if transmute::<_, *const c_void>(self.texparameteriuiv) == (dummy_pfngltexparameteriuivproc as *const c_void) {&null::<PFNGLTEXPARAMETERIUIVPROC>()} else {&self.texparameteriuiv}})
8972			.field("gettexparameteriiv", unsafe{if transmute::<_, *const c_void>(self.gettexparameteriiv) == (dummy_pfnglgettexparameteriivproc as *const c_void) {&null::<PFNGLGETTEXPARAMETERIIVPROC>()} else {&self.gettexparameteriiv}})
8973			.field("gettexparameteriuiv", unsafe{if transmute::<_, *const c_void>(self.gettexparameteriuiv) == (dummy_pfnglgettexparameteriuivproc as *const c_void) {&null::<PFNGLGETTEXPARAMETERIUIVPROC>()} else {&self.gettexparameteriuiv}})
8974			.field("clearbufferiv", unsafe{if transmute::<_, *const c_void>(self.clearbufferiv) == (dummy_pfnglclearbufferivproc as *const c_void) {&null::<PFNGLCLEARBUFFERIVPROC>()} else {&self.clearbufferiv}})
8975			.field("clearbufferuiv", unsafe{if transmute::<_, *const c_void>(self.clearbufferuiv) == (dummy_pfnglclearbufferuivproc as *const c_void) {&null::<PFNGLCLEARBUFFERUIVPROC>()} else {&self.clearbufferuiv}})
8976			.field("clearbufferfv", unsafe{if transmute::<_, *const c_void>(self.clearbufferfv) == (dummy_pfnglclearbufferfvproc as *const c_void) {&null::<PFNGLCLEARBUFFERFVPROC>()} else {&self.clearbufferfv}})
8977			.field("clearbufferfi", unsafe{if transmute::<_, *const c_void>(self.clearbufferfi) == (dummy_pfnglclearbufferfiproc as *const c_void) {&null::<PFNGLCLEARBUFFERFIPROC>()} else {&self.clearbufferfi}})
8978			.field("getstringi", unsafe{if transmute::<_, *const c_void>(self.getstringi) == (dummy_pfnglgetstringiproc as *const c_void) {&null::<PFNGLGETSTRINGIPROC>()} else {&self.getstringi}})
8979			.field("isrenderbuffer", unsafe{if transmute::<_, *const c_void>(self.isrenderbuffer) == (dummy_pfnglisrenderbufferproc as *const c_void) {&null::<PFNGLISRENDERBUFFERPROC>()} else {&self.isrenderbuffer}})
8980			.field("bindrenderbuffer", unsafe{if transmute::<_, *const c_void>(self.bindrenderbuffer) == (dummy_pfnglbindrenderbufferproc as *const c_void) {&null::<PFNGLBINDRENDERBUFFERPROC>()} else {&self.bindrenderbuffer}})
8981			.field("deleterenderbuffers", unsafe{if transmute::<_, *const c_void>(self.deleterenderbuffers) == (dummy_pfngldeleterenderbuffersproc as *const c_void) {&null::<PFNGLDELETERENDERBUFFERSPROC>()} else {&self.deleterenderbuffers}})
8982			.field("genrenderbuffers", unsafe{if transmute::<_, *const c_void>(self.genrenderbuffers) == (dummy_pfnglgenrenderbuffersproc as *const c_void) {&null::<PFNGLGENRENDERBUFFERSPROC>()} else {&self.genrenderbuffers}})
8983			.field("renderbufferstorage", unsafe{if transmute::<_, *const c_void>(self.renderbufferstorage) == (dummy_pfnglrenderbufferstorageproc as *const c_void) {&null::<PFNGLRENDERBUFFERSTORAGEPROC>()} else {&self.renderbufferstorage}})
8984			.field("getrenderbufferparameteriv", unsafe{if transmute::<_, *const c_void>(self.getrenderbufferparameteriv) == (dummy_pfnglgetrenderbufferparameterivproc as *const c_void) {&null::<PFNGLGETRENDERBUFFERPARAMETERIVPROC>()} else {&self.getrenderbufferparameteriv}})
8985			.field("isframebuffer", unsafe{if transmute::<_, *const c_void>(self.isframebuffer) == (dummy_pfnglisframebufferproc as *const c_void) {&null::<PFNGLISFRAMEBUFFERPROC>()} else {&self.isframebuffer}})
8986			.field("bindframebuffer", unsafe{if transmute::<_, *const c_void>(self.bindframebuffer) == (dummy_pfnglbindframebufferproc as *const c_void) {&null::<PFNGLBINDFRAMEBUFFERPROC>()} else {&self.bindframebuffer}})
8987			.field("deleteframebuffers", unsafe{if transmute::<_, *const c_void>(self.deleteframebuffers) == (dummy_pfngldeleteframebuffersproc as *const c_void) {&null::<PFNGLDELETEFRAMEBUFFERSPROC>()} else {&self.deleteframebuffers}})
8988			.field("genframebuffers", unsafe{if transmute::<_, *const c_void>(self.genframebuffers) == (dummy_pfnglgenframebuffersproc as *const c_void) {&null::<PFNGLGENFRAMEBUFFERSPROC>()} else {&self.genframebuffers}})
8989			.field("checkframebufferstatus", unsafe{if transmute::<_, *const c_void>(self.checkframebufferstatus) == (dummy_pfnglcheckframebufferstatusproc as *const c_void) {&null::<PFNGLCHECKFRAMEBUFFERSTATUSPROC>()} else {&self.checkframebufferstatus}})
8990			.field("framebuffertexture1d", unsafe{if transmute::<_, *const c_void>(self.framebuffertexture1d) == (dummy_pfnglframebuffertexture1dproc as *const c_void) {&null::<PFNGLFRAMEBUFFERTEXTURE1DPROC>()} else {&self.framebuffertexture1d}})
8991			.field("framebuffertexture2d", unsafe{if transmute::<_, *const c_void>(self.framebuffertexture2d) == (dummy_pfnglframebuffertexture2dproc as *const c_void) {&null::<PFNGLFRAMEBUFFERTEXTURE2DPROC>()} else {&self.framebuffertexture2d}})
8992			.field("framebuffertexture3d", unsafe{if transmute::<_, *const c_void>(self.framebuffertexture3d) == (dummy_pfnglframebuffertexture3dproc as *const c_void) {&null::<PFNGLFRAMEBUFFERTEXTURE3DPROC>()} else {&self.framebuffertexture3d}})
8993			.field("framebufferrenderbuffer", unsafe{if transmute::<_, *const c_void>(self.framebufferrenderbuffer) == (dummy_pfnglframebufferrenderbufferproc as *const c_void) {&null::<PFNGLFRAMEBUFFERRENDERBUFFERPROC>()} else {&self.framebufferrenderbuffer}})
8994			.field("getframebufferattachmentparameteriv", unsafe{if transmute::<_, *const c_void>(self.getframebufferattachmentparameteriv) == (dummy_pfnglgetframebufferattachmentparameterivproc as *const c_void) {&null::<PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVPROC>()} else {&self.getframebufferattachmentparameteriv}})
8995			.field("generatemipmap", unsafe{if transmute::<_, *const c_void>(self.generatemipmap) == (dummy_pfnglgeneratemipmapproc as *const c_void) {&null::<PFNGLGENERATEMIPMAPPROC>()} else {&self.generatemipmap}})
8996			.field("blitframebuffer", unsafe{if transmute::<_, *const c_void>(self.blitframebuffer) == (dummy_pfnglblitframebufferproc as *const c_void) {&null::<PFNGLBLITFRAMEBUFFERPROC>()} else {&self.blitframebuffer}})
8997			.field("renderbufferstoragemultisample", unsafe{if transmute::<_, *const c_void>(self.renderbufferstoragemultisample) == (dummy_pfnglrenderbufferstoragemultisampleproc as *const c_void) {&null::<PFNGLRENDERBUFFERSTORAGEMULTISAMPLEPROC>()} else {&self.renderbufferstoragemultisample}})
8998			.field("framebuffertexturelayer", unsafe{if transmute::<_, *const c_void>(self.framebuffertexturelayer) == (dummy_pfnglframebuffertexturelayerproc as *const c_void) {&null::<PFNGLFRAMEBUFFERTEXTURELAYERPROC>()} else {&self.framebuffertexturelayer}})
8999			.field("mapbufferrange", unsafe{if transmute::<_, *const c_void>(self.mapbufferrange) == (dummy_pfnglmapbufferrangeproc as *const c_void) {&null::<PFNGLMAPBUFFERRANGEPROC>()} else {&self.mapbufferrange}})
9000			.field("flushmappedbufferrange", unsafe{if transmute::<_, *const c_void>(self.flushmappedbufferrange) == (dummy_pfnglflushmappedbufferrangeproc as *const c_void) {&null::<PFNGLFLUSHMAPPEDBUFFERRANGEPROC>()} else {&self.flushmappedbufferrange}})
9001			.field("bindvertexarray", unsafe{if transmute::<_, *const c_void>(self.bindvertexarray) == (dummy_pfnglbindvertexarrayproc as *const c_void) {&null::<PFNGLBINDVERTEXARRAYPROC>()} else {&self.bindvertexarray}})
9002			.field("deletevertexarrays", unsafe{if transmute::<_, *const c_void>(self.deletevertexarrays) == (dummy_pfngldeletevertexarraysproc as *const c_void) {&null::<PFNGLDELETEVERTEXARRAYSPROC>()} else {&self.deletevertexarrays}})
9003			.field("genvertexarrays", unsafe{if transmute::<_, *const c_void>(self.genvertexarrays) == (dummy_pfnglgenvertexarraysproc as *const c_void) {&null::<PFNGLGENVERTEXARRAYSPROC>()} else {&self.genvertexarrays}})
9004			.field("isvertexarray", unsafe{if transmute::<_, *const c_void>(self.isvertexarray) == (dummy_pfnglisvertexarrayproc as *const c_void) {&null::<PFNGLISVERTEXARRAYPROC>()} else {&self.isvertexarray}})
9005			.finish()
9006		} else {
9007			f.debug_struct("Version30")
9008			.field("available", &self.available)
9009			.finish_non_exhaustive()
9010		}
9011	}
9012}
9013type PFNGLDRAWARRAYSINSTANCEDPROC = extern "system" fn(GLenum, GLint, GLsizei, GLsizei);
9014type PFNGLDRAWELEMENTSINSTANCEDPROC = extern "system" fn(GLenum, GLsizei, GLenum, *const c_void, GLsizei);
9015type PFNGLTEXBUFFERPROC = extern "system" fn(GLenum, GLenum, GLuint);
9016type PFNGLPRIMITIVERESTARTINDEXPROC = extern "system" fn(GLuint);
9017type PFNGLCOPYBUFFERSUBDATAPROC = extern "system" fn(GLenum, GLenum, GLintptr, GLintptr, GLsizeiptr);
9018type PFNGLGETUNIFORMINDICESPROC = extern "system" fn(GLuint, GLsizei, *const *const GLchar, *mut GLuint);
9019type PFNGLGETACTIVEUNIFORMSIVPROC = extern "system" fn(GLuint, GLsizei, *const GLuint, GLenum, *mut GLint);
9020type PFNGLGETACTIVEUNIFORMNAMEPROC = extern "system" fn(GLuint, GLuint, GLsizei, *mut GLsizei, *mut GLchar);
9021type PFNGLGETUNIFORMBLOCKINDEXPROC = extern "system" fn(GLuint, *const GLchar) -> GLuint;
9022type PFNGLGETACTIVEUNIFORMBLOCKIVPROC = extern "system" fn(GLuint, GLuint, GLenum, *mut GLint);
9023type PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC = extern "system" fn(GLuint, GLuint, GLsizei, *mut GLsizei, *mut GLchar);
9024type PFNGLUNIFORMBLOCKBINDINGPROC = extern "system" fn(GLuint, GLuint, GLuint);
9025extern "system" fn dummy_pfngldrawarraysinstancedproc (_: GLenum, _: GLint, _: GLsizei, _: GLsizei) {
9026	panic!("OpenGL function pointer `glDrawArraysInstanced()` is null.")
9027}
9028extern "system" fn dummy_pfngldrawelementsinstancedproc (_: GLenum, _: GLsizei, _: GLenum, _: *const c_void, _: GLsizei) {
9029	panic!("OpenGL function pointer `glDrawElementsInstanced()` is null.")
9030}
9031extern "system" fn dummy_pfngltexbufferproc (_: GLenum, _: GLenum, _: GLuint) {
9032	panic!("OpenGL function pointer `glTexBuffer()` is null.")
9033}
9034extern "system" fn dummy_pfnglprimitiverestartindexproc (_: GLuint) {
9035	panic!("OpenGL function pointer `glPrimitiveRestartIndex()` is null.")
9036}
9037extern "system" fn dummy_pfnglcopybuffersubdataproc (_: GLenum, _: GLenum, _: GLintptr, _: GLintptr, _: GLsizeiptr) {
9038	panic!("OpenGL function pointer `glCopyBufferSubData()` is null.")
9039}
9040extern "system" fn dummy_pfnglgetuniformindicesproc (_: GLuint, _: GLsizei, _: *const *const GLchar, _: *mut GLuint) {
9041	panic!("OpenGL function pointer `glGetUniformIndices()` is null.")
9042}
9043extern "system" fn dummy_pfnglgetactiveuniformsivproc (_: GLuint, _: GLsizei, _: *const GLuint, _: GLenum, _: *mut GLint) {
9044	panic!("OpenGL function pointer `glGetActiveUniformsiv()` is null.")
9045}
9046extern "system" fn dummy_pfnglgetactiveuniformnameproc (_: GLuint, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
9047	panic!("OpenGL function pointer `glGetActiveUniformName()` is null.")
9048}
9049extern "system" fn dummy_pfnglgetuniformblockindexproc (_: GLuint, _: *const GLchar) -> GLuint {
9050	panic!("OpenGL function pointer `glGetUniformBlockIndex()` is null.")
9051}
9052extern "system" fn dummy_pfnglgetactiveuniformblockivproc (_: GLuint, _: GLuint, _: GLenum, _: *mut GLint) {
9053	panic!("OpenGL function pointer `glGetActiveUniformBlockiv()` is null.")
9054}
9055extern "system" fn dummy_pfnglgetactiveuniformblocknameproc (_: GLuint, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
9056	panic!("OpenGL function pointer `glGetActiveUniformBlockName()` is null.")
9057}
9058extern "system" fn dummy_pfngluniformblockbindingproc (_: GLuint, _: GLuint, _: GLuint) {
9059	panic!("OpenGL function pointer `glUniformBlockBinding()` is null.")
9060}
9061pub const GL_SAMPLER_2D_RECT: GLenum = 0x8B63;
9062pub const GL_SAMPLER_2D_RECT_SHADOW: GLenum = 0x8B64;
9063pub const GL_SAMPLER_BUFFER: GLenum = 0x8DC2;
9064pub const GL_INT_SAMPLER_2D_RECT: GLenum = 0x8DCD;
9065pub const GL_INT_SAMPLER_BUFFER: GLenum = 0x8DD0;
9066pub const GL_UNSIGNED_INT_SAMPLER_2D_RECT: GLenum = 0x8DD5;
9067pub const GL_UNSIGNED_INT_SAMPLER_BUFFER: GLenum = 0x8DD8;
9068pub const GL_TEXTURE_BUFFER: GLenum = 0x8C2A;
9069pub const GL_MAX_TEXTURE_BUFFER_SIZE: GLenum = 0x8C2B;
9070pub const GL_TEXTURE_BINDING_BUFFER: GLenum = 0x8C2C;
9071pub const GL_TEXTURE_BUFFER_DATA_STORE_BINDING: GLenum = 0x8C2D;
9072pub const GL_TEXTURE_RECTANGLE: GLenum = 0x84F5;
9073pub const GL_TEXTURE_BINDING_RECTANGLE: GLenum = 0x84F6;
9074pub const GL_PROXY_TEXTURE_RECTANGLE: GLenum = 0x84F7;
9075pub const GL_MAX_RECTANGLE_TEXTURE_SIZE: GLenum = 0x84F8;
9076pub const GL_R8_SNORM: GLenum = 0x8F94;
9077pub const GL_RG8_SNORM: GLenum = 0x8F95;
9078pub const GL_RGB8_SNORM: GLenum = 0x8F96;
9079pub const GL_RGBA8_SNORM: GLenum = 0x8F97;
9080pub const GL_R16_SNORM: GLenum = 0x8F98;
9081pub const GL_RG16_SNORM: GLenum = 0x8F99;
9082pub const GL_RGB16_SNORM: GLenum = 0x8F9A;
9083pub const GL_RGBA16_SNORM: GLenum = 0x8F9B;
9084pub const GL_SIGNED_NORMALIZED: GLenum = 0x8F9C;
9085pub const GL_PRIMITIVE_RESTART: GLenum = 0x8F9D;
9086pub const GL_PRIMITIVE_RESTART_INDEX: GLenum = 0x8F9E;
9087pub const GL_COPY_READ_BUFFER: GLenum = 0x8F36;
9088pub const GL_COPY_WRITE_BUFFER: GLenum = 0x8F37;
9089pub const GL_UNIFORM_BUFFER: GLenum = 0x8A11;
9090pub const GL_UNIFORM_BUFFER_BINDING: GLenum = 0x8A28;
9091pub const GL_UNIFORM_BUFFER_START: GLenum = 0x8A29;
9092pub const GL_UNIFORM_BUFFER_SIZE: GLenum = 0x8A2A;
9093pub const GL_MAX_VERTEX_UNIFORM_BLOCKS: GLenum = 0x8A2B;
9094pub const GL_MAX_GEOMETRY_UNIFORM_BLOCKS: GLenum = 0x8A2C;
9095pub const GL_MAX_FRAGMENT_UNIFORM_BLOCKS: GLenum = 0x8A2D;
9096pub const GL_MAX_COMBINED_UNIFORM_BLOCKS: GLenum = 0x8A2E;
9097pub const GL_MAX_UNIFORM_BUFFER_BINDINGS: GLenum = 0x8A2F;
9098pub const GL_MAX_UNIFORM_BLOCK_SIZE: GLenum = 0x8A30;
9099pub const GL_MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS: GLenum = 0x8A31;
9100pub const GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS: GLenum = 0x8A32;
9101pub const GL_MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS: GLenum = 0x8A33;
9102pub const GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT: GLenum = 0x8A34;
9103pub const GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH: GLenum = 0x8A35;
9104pub const GL_ACTIVE_UNIFORM_BLOCKS: GLenum = 0x8A36;
9105pub const GL_UNIFORM_TYPE: GLenum = 0x8A37;
9106pub const GL_UNIFORM_SIZE: GLenum = 0x8A38;
9107pub const GL_UNIFORM_NAME_LENGTH: GLenum = 0x8A39;
9108pub const GL_UNIFORM_BLOCK_INDEX: GLenum = 0x8A3A;
9109pub const GL_UNIFORM_OFFSET: GLenum = 0x8A3B;
9110pub const GL_UNIFORM_ARRAY_STRIDE: GLenum = 0x8A3C;
9111pub const GL_UNIFORM_MATRIX_STRIDE: GLenum = 0x8A3D;
9112pub const GL_UNIFORM_IS_ROW_MAJOR: GLenum = 0x8A3E;
9113pub const GL_UNIFORM_BLOCK_BINDING: GLenum = 0x8A3F;
9114pub const GL_UNIFORM_BLOCK_DATA_SIZE: GLenum = 0x8A40;
9115pub const GL_UNIFORM_BLOCK_NAME_LENGTH: GLenum = 0x8A41;
9116pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORMS: GLenum = 0x8A42;
9117pub const GL_UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES: GLenum = 0x8A43;
9118pub const GL_UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER: GLenum = 0x8A44;
9119pub const GL_UNIFORM_BLOCK_REFERENCED_BY_GEOMETRY_SHADER: GLenum = 0x8A45;
9120pub const GL_UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER: GLenum = 0x8A46;
9121pub const GL_INVALID_INDEX: GLuint = 0xFFFFFFFFu32;
9122
9123pub trait GL_3_1 {
9124	fn glGetError(&self) -> GLenum;
9125	fn glDrawArraysInstanced(&self, mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei) -> Result<()>;
9126	fn glDrawElementsInstanced(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei) -> Result<()>;
9127	fn glTexBuffer(&self, target: GLenum, internalformat: GLenum, buffer: GLuint) -> Result<()>;
9128	fn glPrimitiveRestartIndex(&self, index: GLuint) -> Result<()>;
9129	fn glCopyBufferSubData(&self, readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) -> Result<()>;
9130	fn glGetUniformIndices(&self, program: GLuint, uniformCount: GLsizei, uniformNames: *const *const GLchar, uniformIndices: *mut GLuint) -> Result<()>;
9131	fn glGetActiveUniformsiv(&self, program: GLuint, uniformCount: GLsizei, uniformIndices: *const GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
9132	fn glGetActiveUniformName(&self, program: GLuint, uniformIndex: GLuint, bufSize: GLsizei, length: *mut GLsizei, uniformName: *mut GLchar) -> Result<()>;
9133	fn glGetUniformBlockIndex(&self, program: GLuint, uniformBlockName: *const GLchar) -> Result<GLuint>;
9134	fn glGetActiveUniformBlockiv(&self, program: GLuint, uniformBlockIndex: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
9135	fn glGetActiveUniformBlockName(&self, program: GLuint, uniformBlockIndex: GLuint, bufSize: GLsizei, length: *mut GLsizei, uniformBlockName: *mut GLchar) -> Result<()>;
9136	fn glUniformBlockBinding(&self, program: GLuint, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint) -> Result<()>;
9137}
9138
9139#[derive(Clone, Copy, PartialEq, Eq, Hash)]
9140pub struct Version31 {
9141	available: bool,
9142	geterror: PFNGLGETERRORPROC,
9143	drawarraysinstanced: PFNGLDRAWARRAYSINSTANCEDPROC,
9144	drawelementsinstanced: PFNGLDRAWELEMENTSINSTANCEDPROC,
9145	texbuffer: PFNGLTEXBUFFERPROC,
9146	primitiverestartindex: PFNGLPRIMITIVERESTARTINDEXPROC,
9147	copybuffersubdata: PFNGLCOPYBUFFERSUBDATAPROC,
9148	getuniformindices: PFNGLGETUNIFORMINDICESPROC,
9149	getactiveuniformsiv: PFNGLGETACTIVEUNIFORMSIVPROC,
9150	getactiveuniformname: PFNGLGETACTIVEUNIFORMNAMEPROC,
9151	getuniformblockindex: PFNGLGETUNIFORMBLOCKINDEXPROC,
9152	getactiveuniformblockiv: PFNGLGETACTIVEUNIFORMBLOCKIVPROC,
9153	getactiveuniformblockname: PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC,
9154	uniformblockbinding: PFNGLUNIFORMBLOCKBINDINGPROC,
9155}
9156
9157impl GL_3_1 for Version31 {
9158	#[inline(always)]
9159	fn glGetError(&self) -> GLenum {
9160		(self.geterror)()
9161	}
9162	#[inline(always)]
9163	fn glDrawArraysInstanced(&self, mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei) -> Result<()> {
9164		let ret = process_catch("glDrawArraysInstanced", catch_unwind(||(self.drawarraysinstanced)(mode, first, count, instancecount)));
9165		#[cfg(feature = "diagnose")]
9166		if let Ok(ret) = ret {
9167			return to_result("glDrawArraysInstanced", ret, self.glGetError());
9168		} else {
9169			return ret
9170		}
9171		#[cfg(not(feature = "diagnose"))]
9172		return ret;
9173	}
9174	#[inline(always)]
9175	fn glDrawElementsInstanced(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei) -> Result<()> {
9176		let ret = process_catch("glDrawElementsInstanced", catch_unwind(||(self.drawelementsinstanced)(mode, count, type_, indices, instancecount)));
9177		#[cfg(feature = "diagnose")]
9178		if let Ok(ret) = ret {
9179			return to_result("glDrawElementsInstanced", ret, self.glGetError());
9180		} else {
9181			return ret
9182		}
9183		#[cfg(not(feature = "diagnose"))]
9184		return ret;
9185	}
9186	#[inline(always)]
9187	fn glTexBuffer(&self, target: GLenum, internalformat: GLenum, buffer: GLuint) -> Result<()> {
9188		let ret = process_catch("glTexBuffer", catch_unwind(||(self.texbuffer)(target, internalformat, buffer)));
9189		#[cfg(feature = "diagnose")]
9190		if let Ok(ret) = ret {
9191			return to_result("glTexBuffer", ret, self.glGetError());
9192		} else {
9193			return ret
9194		}
9195		#[cfg(not(feature = "diagnose"))]
9196		return ret;
9197	}
9198	#[inline(always)]
9199	fn glPrimitiveRestartIndex(&self, index: GLuint) -> Result<()> {
9200		let ret = process_catch("glPrimitiveRestartIndex", catch_unwind(||(self.primitiverestartindex)(index)));
9201		#[cfg(feature = "diagnose")]
9202		if let Ok(ret) = ret {
9203			return to_result("glPrimitiveRestartIndex", ret, self.glGetError());
9204		} else {
9205			return ret
9206		}
9207		#[cfg(not(feature = "diagnose"))]
9208		return ret;
9209	}
9210	#[inline(always)]
9211	fn glCopyBufferSubData(&self, readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) -> Result<()> {
9212		let ret = process_catch("glCopyBufferSubData", catch_unwind(||(self.copybuffersubdata)(readTarget, writeTarget, readOffset, writeOffset, size)));
9213		#[cfg(feature = "diagnose")]
9214		if let Ok(ret) = ret {
9215			return to_result("glCopyBufferSubData", ret, self.glGetError());
9216		} else {
9217			return ret
9218		}
9219		#[cfg(not(feature = "diagnose"))]
9220		return ret;
9221	}
9222	#[inline(always)]
9223	fn glGetUniformIndices(&self, program: GLuint, uniformCount: GLsizei, uniformNames: *const *const GLchar, uniformIndices: *mut GLuint) -> Result<()> {
9224		let ret = process_catch("glGetUniformIndices", catch_unwind(||(self.getuniformindices)(program, uniformCount, uniformNames, uniformIndices)));
9225		#[cfg(feature = "diagnose")]
9226		if let Ok(ret) = ret {
9227			return to_result("glGetUniformIndices", ret, self.glGetError());
9228		} else {
9229			return ret
9230		}
9231		#[cfg(not(feature = "diagnose"))]
9232		return ret;
9233	}
9234	#[inline(always)]
9235	fn glGetActiveUniformsiv(&self, program: GLuint, uniformCount: GLsizei, uniformIndices: *const GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
9236		let ret = process_catch("glGetActiveUniformsiv", catch_unwind(||(self.getactiveuniformsiv)(program, uniformCount, uniformIndices, pname, params)));
9237		#[cfg(feature = "diagnose")]
9238		if let Ok(ret) = ret {
9239			return to_result("glGetActiveUniformsiv", ret, self.glGetError());
9240		} else {
9241			return ret
9242		}
9243		#[cfg(not(feature = "diagnose"))]
9244		return ret;
9245	}
9246	#[inline(always)]
9247	fn glGetActiveUniformName(&self, program: GLuint, uniformIndex: GLuint, bufSize: GLsizei, length: *mut GLsizei, uniformName: *mut GLchar) -> Result<()> {
9248		let ret = process_catch("glGetActiveUniformName", catch_unwind(||(self.getactiveuniformname)(program, uniformIndex, bufSize, length, uniformName)));
9249		#[cfg(feature = "diagnose")]
9250		if let Ok(ret) = ret {
9251			return to_result("glGetActiveUniformName", ret, self.glGetError());
9252		} else {
9253			return ret
9254		}
9255		#[cfg(not(feature = "diagnose"))]
9256		return ret;
9257	}
9258	#[inline(always)]
9259	fn glGetUniformBlockIndex(&self, program: GLuint, uniformBlockName: *const GLchar) -> Result<GLuint> {
9260		let ret = process_catch("glGetUniformBlockIndex", catch_unwind(||(self.getuniformblockindex)(program, uniformBlockName)));
9261		#[cfg(feature = "diagnose")]
9262		if let Ok(ret) = ret {
9263			return to_result("glGetUniformBlockIndex", ret, self.glGetError());
9264		} else {
9265			return ret
9266		}
9267		#[cfg(not(feature = "diagnose"))]
9268		return ret;
9269	}
9270	#[inline(always)]
9271	fn glGetActiveUniformBlockiv(&self, program: GLuint, uniformBlockIndex: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
9272		let ret = process_catch("glGetActiveUniformBlockiv", catch_unwind(||(self.getactiveuniformblockiv)(program, uniformBlockIndex, pname, params)));
9273		#[cfg(feature = "diagnose")]
9274		if let Ok(ret) = ret {
9275			return to_result("glGetActiveUniformBlockiv", ret, self.glGetError());
9276		} else {
9277			return ret
9278		}
9279		#[cfg(not(feature = "diagnose"))]
9280		return ret;
9281	}
9282	#[inline(always)]
9283	fn glGetActiveUniformBlockName(&self, program: GLuint, uniformBlockIndex: GLuint, bufSize: GLsizei, length: *mut GLsizei, uniformBlockName: *mut GLchar) -> Result<()> {
9284		let ret = process_catch("glGetActiveUniformBlockName", catch_unwind(||(self.getactiveuniformblockname)(program, uniformBlockIndex, bufSize, length, uniformBlockName)));
9285		#[cfg(feature = "diagnose")]
9286		if let Ok(ret) = ret {
9287			return to_result("glGetActiveUniformBlockName", ret, self.glGetError());
9288		} else {
9289			return ret
9290		}
9291		#[cfg(not(feature = "diagnose"))]
9292		return ret;
9293	}
9294	#[inline(always)]
9295	fn glUniformBlockBinding(&self, program: GLuint, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint) -> Result<()> {
9296		let ret = process_catch("glUniformBlockBinding", catch_unwind(||(self.uniformblockbinding)(program, uniformBlockIndex, uniformBlockBinding)));
9297		#[cfg(feature = "diagnose")]
9298		if let Ok(ret) = ret {
9299			return to_result("glUniformBlockBinding", ret, self.glGetError());
9300		} else {
9301			return ret
9302		}
9303		#[cfg(not(feature = "diagnose"))]
9304		return ret;
9305	}
9306}
9307
9308impl Version31 {
9309	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
9310		let (_spec, major, minor, release) = base.get_version();
9311		if (major, minor, release) < (3, 1, 0) {
9312			return Self::default();
9313		}
9314		Self {
9315			available: true,
9316			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
9317			drawarraysinstanced: {let proc = get_proc_address("glDrawArraysInstanced"); if proc == null() {dummy_pfngldrawarraysinstancedproc} else {unsafe{transmute(proc)}}},
9318			drawelementsinstanced: {let proc = get_proc_address("glDrawElementsInstanced"); if proc == null() {dummy_pfngldrawelementsinstancedproc} else {unsafe{transmute(proc)}}},
9319			texbuffer: {let proc = get_proc_address("glTexBuffer"); if proc == null() {dummy_pfngltexbufferproc} else {unsafe{transmute(proc)}}},
9320			primitiverestartindex: {let proc = get_proc_address("glPrimitiveRestartIndex"); if proc == null() {dummy_pfnglprimitiverestartindexproc} else {unsafe{transmute(proc)}}},
9321			copybuffersubdata: {let proc = get_proc_address("glCopyBufferSubData"); if proc == null() {dummy_pfnglcopybuffersubdataproc} else {unsafe{transmute(proc)}}},
9322			getuniformindices: {let proc = get_proc_address("glGetUniformIndices"); if proc == null() {dummy_pfnglgetuniformindicesproc} else {unsafe{transmute(proc)}}},
9323			getactiveuniformsiv: {let proc = get_proc_address("glGetActiveUniformsiv"); if proc == null() {dummy_pfnglgetactiveuniformsivproc} else {unsafe{transmute(proc)}}},
9324			getactiveuniformname: {let proc = get_proc_address("glGetActiveUniformName"); if proc == null() {dummy_pfnglgetactiveuniformnameproc} else {unsafe{transmute(proc)}}},
9325			getuniformblockindex: {let proc = get_proc_address("glGetUniformBlockIndex"); if proc == null() {dummy_pfnglgetuniformblockindexproc} else {unsafe{transmute(proc)}}},
9326			getactiveuniformblockiv: {let proc = get_proc_address("glGetActiveUniformBlockiv"); if proc == null() {dummy_pfnglgetactiveuniformblockivproc} else {unsafe{transmute(proc)}}},
9327			getactiveuniformblockname: {let proc = get_proc_address("glGetActiveUniformBlockName"); if proc == null() {dummy_pfnglgetactiveuniformblocknameproc} else {unsafe{transmute(proc)}}},
9328			uniformblockbinding: {let proc = get_proc_address("glUniformBlockBinding"); if proc == null() {dummy_pfngluniformblockbindingproc} else {unsafe{transmute(proc)}}},
9329		}
9330	}
9331	#[inline(always)]
9332	pub fn get_available(&self) -> bool {
9333		self.available
9334	}
9335}
9336
9337impl Default for Version31 {
9338	fn default() -> Self {
9339		Self {
9340			available: false,
9341			geterror: dummy_pfnglgeterrorproc,
9342			drawarraysinstanced: dummy_pfngldrawarraysinstancedproc,
9343			drawelementsinstanced: dummy_pfngldrawelementsinstancedproc,
9344			texbuffer: dummy_pfngltexbufferproc,
9345			primitiverestartindex: dummy_pfnglprimitiverestartindexproc,
9346			copybuffersubdata: dummy_pfnglcopybuffersubdataproc,
9347			getuniformindices: dummy_pfnglgetuniformindicesproc,
9348			getactiveuniformsiv: dummy_pfnglgetactiveuniformsivproc,
9349			getactiveuniformname: dummy_pfnglgetactiveuniformnameproc,
9350			getuniformblockindex: dummy_pfnglgetuniformblockindexproc,
9351			getactiveuniformblockiv: dummy_pfnglgetactiveuniformblockivproc,
9352			getactiveuniformblockname: dummy_pfnglgetactiveuniformblocknameproc,
9353			uniformblockbinding: dummy_pfngluniformblockbindingproc,
9354		}
9355	}
9356}
9357impl Debug for Version31 {
9358	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
9359		if self.available {
9360			f.debug_struct("Version31")
9361			.field("available", &self.available)
9362			.field("drawarraysinstanced", unsafe{if transmute::<_, *const c_void>(self.drawarraysinstanced) == (dummy_pfngldrawarraysinstancedproc as *const c_void) {&null::<PFNGLDRAWARRAYSINSTANCEDPROC>()} else {&self.drawarraysinstanced}})
9363			.field("drawelementsinstanced", unsafe{if transmute::<_, *const c_void>(self.drawelementsinstanced) == (dummy_pfngldrawelementsinstancedproc as *const c_void) {&null::<PFNGLDRAWELEMENTSINSTANCEDPROC>()} else {&self.drawelementsinstanced}})
9364			.field("texbuffer", unsafe{if transmute::<_, *const c_void>(self.texbuffer) == (dummy_pfngltexbufferproc as *const c_void) {&null::<PFNGLTEXBUFFERPROC>()} else {&self.texbuffer}})
9365			.field("primitiverestartindex", unsafe{if transmute::<_, *const c_void>(self.primitiverestartindex) == (dummy_pfnglprimitiverestartindexproc as *const c_void) {&null::<PFNGLPRIMITIVERESTARTINDEXPROC>()} else {&self.primitiverestartindex}})
9366			.field("copybuffersubdata", unsafe{if transmute::<_, *const c_void>(self.copybuffersubdata) == (dummy_pfnglcopybuffersubdataproc as *const c_void) {&null::<PFNGLCOPYBUFFERSUBDATAPROC>()} else {&self.copybuffersubdata}})
9367			.field("getuniformindices", unsafe{if transmute::<_, *const c_void>(self.getuniformindices) == (dummy_pfnglgetuniformindicesproc as *const c_void) {&null::<PFNGLGETUNIFORMINDICESPROC>()} else {&self.getuniformindices}})
9368			.field("getactiveuniformsiv", unsafe{if transmute::<_, *const c_void>(self.getactiveuniformsiv) == (dummy_pfnglgetactiveuniformsivproc as *const c_void) {&null::<PFNGLGETACTIVEUNIFORMSIVPROC>()} else {&self.getactiveuniformsiv}})
9369			.field("getactiveuniformname", unsafe{if transmute::<_, *const c_void>(self.getactiveuniformname) == (dummy_pfnglgetactiveuniformnameproc as *const c_void) {&null::<PFNGLGETACTIVEUNIFORMNAMEPROC>()} else {&self.getactiveuniformname}})
9370			.field("getuniformblockindex", unsafe{if transmute::<_, *const c_void>(self.getuniformblockindex) == (dummy_pfnglgetuniformblockindexproc as *const c_void) {&null::<PFNGLGETUNIFORMBLOCKINDEXPROC>()} else {&self.getuniformblockindex}})
9371			.field("getactiveuniformblockiv", unsafe{if transmute::<_, *const c_void>(self.getactiveuniformblockiv) == (dummy_pfnglgetactiveuniformblockivproc as *const c_void) {&null::<PFNGLGETACTIVEUNIFORMBLOCKIVPROC>()} else {&self.getactiveuniformblockiv}})
9372			.field("getactiveuniformblockname", unsafe{if transmute::<_, *const c_void>(self.getactiveuniformblockname) == (dummy_pfnglgetactiveuniformblocknameproc as *const c_void) {&null::<PFNGLGETACTIVEUNIFORMBLOCKNAMEPROC>()} else {&self.getactiveuniformblockname}})
9373			.field("uniformblockbinding", unsafe{if transmute::<_, *const c_void>(self.uniformblockbinding) == (dummy_pfngluniformblockbindingproc as *const c_void) {&null::<PFNGLUNIFORMBLOCKBINDINGPROC>()} else {&self.uniformblockbinding}})
9374			.finish()
9375		} else {
9376			f.debug_struct("Version31")
9377			.field("available", &self.available)
9378			.finish_non_exhaustive()
9379		}
9380	}
9381}
9382pub type GLsync = *mut c_void;
9383pub type GLuint64 = khronos_uint64_t;
9384pub type GLint64 = khronos_int64_t;
9385type PFNGLDRAWELEMENTSBASEVERTEXPROC = extern "system" fn(GLenum, GLsizei, GLenum, *const c_void, GLint);
9386type PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC = extern "system" fn(GLenum, GLuint, GLuint, GLsizei, GLenum, *const c_void, GLint);
9387type PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC = extern "system" fn(GLenum, GLsizei, GLenum, *const c_void, GLsizei, GLint);
9388type PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC = extern "system" fn(GLenum, *const GLsizei, GLenum, *const *const c_void, GLsizei, *const GLint);
9389type PFNGLPROVOKINGVERTEXPROC = extern "system" fn(GLenum);
9390type PFNGLFENCESYNCPROC = extern "system" fn(GLenum, GLbitfield) -> GLsync;
9391type PFNGLISSYNCPROC = extern "system" fn(GLsync) -> GLboolean;
9392type PFNGLDELETESYNCPROC = extern "system" fn(GLsync);
9393type PFNGLCLIENTWAITSYNCPROC = extern "system" fn(GLsync, GLbitfield, GLuint64) -> GLenum;
9394type PFNGLWAITSYNCPROC = extern "system" fn(GLsync, GLbitfield, GLuint64);
9395type PFNGLGETINTEGER64VPROC = extern "system" fn(GLenum, *mut GLint64);
9396type PFNGLGETSYNCIVPROC = extern "system" fn(GLsync, GLenum, GLsizei, *mut GLsizei, *mut GLint);
9397type PFNGLGETINTEGER64I_VPROC = extern "system" fn(GLenum, GLuint, *mut GLint64);
9398type PFNGLGETBUFFERPARAMETERI64VPROC = extern "system" fn(GLenum, GLenum, *mut GLint64);
9399type PFNGLFRAMEBUFFERTEXTUREPROC = extern "system" fn(GLenum, GLenum, GLuint, GLint);
9400type PFNGLTEXIMAGE2DMULTISAMPLEPROC = extern "system" fn(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean);
9401type PFNGLTEXIMAGE3DMULTISAMPLEPROC = extern "system" fn(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
9402type PFNGLGETMULTISAMPLEFVPROC = extern "system" fn(GLenum, GLuint, *mut GLfloat);
9403type PFNGLSAMPLEMASKIPROC = extern "system" fn(GLuint, GLbitfield);
9404extern "system" fn dummy_pfngldrawelementsbasevertexproc (_: GLenum, _: GLsizei, _: GLenum, _: *const c_void, _: GLint) {
9405	panic!("OpenGL function pointer `glDrawElementsBaseVertex()` is null.")
9406}
9407extern "system" fn dummy_pfngldrawrangeelementsbasevertexproc (_: GLenum, _: GLuint, _: GLuint, _: GLsizei, _: GLenum, _: *const c_void, _: GLint) {
9408	panic!("OpenGL function pointer `glDrawRangeElementsBaseVertex()` is null.")
9409}
9410extern "system" fn dummy_pfngldrawelementsinstancedbasevertexproc (_: GLenum, _: GLsizei, _: GLenum, _: *const c_void, _: GLsizei, _: GLint) {
9411	panic!("OpenGL function pointer `glDrawElementsInstancedBaseVertex()` is null.")
9412}
9413extern "system" fn dummy_pfnglmultidrawelementsbasevertexproc (_: GLenum, _: *const GLsizei, _: GLenum, _: *const *const c_void, _: GLsizei, _: *const GLint) {
9414	panic!("OpenGL function pointer `glMultiDrawElementsBaseVertex()` is null.")
9415}
9416extern "system" fn dummy_pfnglprovokingvertexproc (_: GLenum) {
9417	panic!("OpenGL function pointer `glProvokingVertex()` is null.")
9418}
9419extern "system" fn dummy_pfnglfencesyncproc (_: GLenum, _: GLbitfield) -> GLsync {
9420	panic!("OpenGL function pointer `glFenceSync()` is null.")
9421}
9422extern "system" fn dummy_pfnglissyncproc (_: GLsync) -> GLboolean {
9423	panic!("OpenGL function pointer `glIsSync()` is null.")
9424}
9425extern "system" fn dummy_pfngldeletesyncproc (_: GLsync) {
9426	panic!("OpenGL function pointer `glDeleteSync()` is null.")
9427}
9428extern "system" fn dummy_pfnglclientwaitsyncproc (_: GLsync, _: GLbitfield, _: GLuint64) -> GLenum {
9429	panic!("OpenGL function pointer `glClientWaitSync()` is null.")
9430}
9431extern "system" fn dummy_pfnglwaitsyncproc (_: GLsync, _: GLbitfield, _: GLuint64) {
9432	panic!("OpenGL function pointer `glWaitSync()` is null.")
9433}
9434extern "system" fn dummy_pfnglgetinteger64vproc (_: GLenum, _: *mut GLint64) {
9435	panic!("OpenGL function pointer `glGetInteger64v()` is null.")
9436}
9437extern "system" fn dummy_pfnglgetsyncivproc (_: GLsync, _: GLenum, _: GLsizei, _: *mut GLsizei, _: *mut GLint) {
9438	panic!("OpenGL function pointer `glGetSynciv()` is null.")
9439}
9440extern "system" fn dummy_pfnglgetinteger64i_vproc (_: GLenum, _: GLuint, _: *mut GLint64) {
9441	panic!("OpenGL function pointer `glGetInteger64i_v()` is null.")
9442}
9443extern "system" fn dummy_pfnglgetbufferparameteri64vproc (_: GLenum, _: GLenum, _: *mut GLint64) {
9444	panic!("OpenGL function pointer `glGetBufferParameteri64v()` is null.")
9445}
9446extern "system" fn dummy_pfnglframebuffertextureproc (_: GLenum, _: GLenum, _: GLuint, _: GLint) {
9447	panic!("OpenGL function pointer `glFramebufferTexture()` is null.")
9448}
9449extern "system" fn dummy_pfnglteximage2dmultisampleproc (_: GLenum, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei, _: GLboolean) {
9450	panic!("OpenGL function pointer `glTexImage2DMultisample()` is null.")
9451}
9452extern "system" fn dummy_pfnglteximage3dmultisampleproc (_: GLenum, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei, _: GLsizei, _: GLboolean) {
9453	panic!("OpenGL function pointer `glTexImage3DMultisample()` is null.")
9454}
9455extern "system" fn dummy_pfnglgetmultisamplefvproc (_: GLenum, _: GLuint, _: *mut GLfloat) {
9456	panic!("OpenGL function pointer `glGetMultisamplefv()` is null.")
9457}
9458extern "system" fn dummy_pfnglsamplemaskiproc (_: GLuint, _: GLbitfield) {
9459	panic!("OpenGL function pointer `glSampleMaski()` is null.")
9460}
9461pub const GL_CONTEXT_CORE_PROFILE_BIT: GLbitfield = 0x00000001;
9462pub const GL_CONTEXT_COMPATIBILITY_PROFILE_BIT: GLbitfield = 0x00000002;
9463pub const GL_LINES_ADJACENCY: GLenum = 0x000A;
9464pub const GL_LINE_STRIP_ADJACENCY: GLenum = 0x000B;
9465pub const GL_TRIANGLES_ADJACENCY: GLenum = 0x000C;
9466pub const GL_TRIANGLE_STRIP_ADJACENCY: GLenum = 0x000D;
9467pub const GL_PROGRAM_POINT_SIZE: GLenum = 0x8642;
9468pub const GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS: GLenum = 0x8C29;
9469pub const GL_FRAMEBUFFER_ATTACHMENT_LAYERED: GLenum = 0x8DA7;
9470pub const GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: GLenum = 0x8DA8;
9471pub const GL_GEOMETRY_SHADER: GLenum = 0x8DD9;
9472pub const GL_GEOMETRY_VERTICES_OUT: GLenum = 0x8916;
9473pub const GL_GEOMETRY_INPUT_TYPE: GLenum = 0x8917;
9474pub const GL_GEOMETRY_OUTPUT_TYPE: GLenum = 0x8918;
9475pub const GL_MAX_GEOMETRY_UNIFORM_COMPONENTS: GLenum = 0x8DDF;
9476pub const GL_MAX_GEOMETRY_OUTPUT_VERTICES: GLenum = 0x8DE0;
9477pub const GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS: GLenum = 0x8DE1;
9478pub const GL_MAX_VERTEX_OUTPUT_COMPONENTS: GLenum = 0x9122;
9479pub const GL_MAX_GEOMETRY_INPUT_COMPONENTS: GLenum = 0x9123;
9480pub const GL_MAX_GEOMETRY_OUTPUT_COMPONENTS: GLenum = 0x9124;
9481pub const GL_MAX_FRAGMENT_INPUT_COMPONENTS: GLenum = 0x9125;
9482pub const GL_CONTEXT_PROFILE_MASK: GLenum = 0x9126;
9483pub const GL_DEPTH_CLAMP: GLenum = 0x864F;
9484pub const GL_QUADS_FOLLOW_PROVOKING_VERTEX_CONVENTION: GLenum = 0x8E4C;
9485pub const GL_FIRST_VERTEX_CONVENTION: GLenum = 0x8E4D;
9486pub const GL_LAST_VERTEX_CONVENTION: GLenum = 0x8E4E;
9487pub const GL_PROVOKING_VERTEX: GLenum = 0x8E4F;
9488pub const GL_TEXTURE_CUBE_MAP_SEAMLESS: GLenum = 0x884F;
9489pub const GL_MAX_SERVER_WAIT_TIMEOUT: GLenum = 0x9111;
9490pub const GL_OBJECT_TYPE: GLenum = 0x9112;
9491pub const GL_SYNC_CONDITION: GLenum = 0x9113;
9492pub const GL_SYNC_STATUS: GLenum = 0x9114;
9493pub const GL_SYNC_FLAGS: GLenum = 0x9115;
9494pub const GL_SYNC_FENCE: GLenum = 0x9116;
9495pub const GL_SYNC_GPU_COMMANDS_COMPLETE: GLenum = 0x9117;
9496pub const GL_UNSIGNALED: GLenum = 0x9118;
9497pub const GL_SIGNALED: GLenum = 0x9119;
9498pub const GL_ALREADY_SIGNALED: GLenum = 0x911A;
9499pub const GL_TIMEOUT_EXPIRED: GLenum = 0x911B;
9500pub const GL_CONDITION_SATISFIED: GLenum = 0x911C;
9501pub const GL_WAIT_FAILED: GLenum = 0x911D;
9502pub const GL_TIMEOUT_IGNORED: GLuint64 = 0xFFFFFFFFFFFFFFFFu64;
9503pub const GL_SYNC_FLUSH_COMMANDS_BIT: GLbitfield = 0x00000001;
9504pub const GL_SAMPLE_POSITION: GLenum = 0x8E50;
9505pub const GL_SAMPLE_MASK: GLenum = 0x8E51;
9506pub const GL_SAMPLE_MASK_VALUE: GLenum = 0x8E52;
9507pub const GL_MAX_SAMPLE_MASK_WORDS: GLenum = 0x8E59;
9508pub const GL_TEXTURE_2D_MULTISAMPLE: GLenum = 0x9100;
9509pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE: GLenum = 0x9101;
9510pub const GL_TEXTURE_2D_MULTISAMPLE_ARRAY: GLenum = 0x9102;
9511pub const GL_PROXY_TEXTURE_2D_MULTISAMPLE_ARRAY: GLenum = 0x9103;
9512pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE: GLenum = 0x9104;
9513pub const GL_TEXTURE_BINDING_2D_MULTISAMPLE_ARRAY: GLenum = 0x9105;
9514pub const GL_TEXTURE_SAMPLES: GLenum = 0x9106;
9515pub const GL_TEXTURE_FIXED_SAMPLE_LOCATIONS: GLenum = 0x9107;
9516pub const GL_SAMPLER_2D_MULTISAMPLE: GLenum = 0x9108;
9517pub const GL_INT_SAMPLER_2D_MULTISAMPLE: GLenum = 0x9109;
9518pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE: GLenum = 0x910A;
9519pub const GL_SAMPLER_2D_MULTISAMPLE_ARRAY: GLenum = 0x910B;
9520pub const GL_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: GLenum = 0x910C;
9521pub const GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE_ARRAY: GLenum = 0x910D;
9522pub const GL_MAX_COLOR_TEXTURE_SAMPLES: GLenum = 0x910E;
9523pub const GL_MAX_DEPTH_TEXTURE_SAMPLES: GLenum = 0x910F;
9524pub const GL_MAX_INTEGER_SAMPLES: GLenum = 0x9110;
9525
9526pub trait GL_3_2 {
9527	fn glGetError(&self) -> GLenum;
9528	fn glDrawElementsBaseVertex(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, basevertex: GLint) -> Result<()>;
9529	fn glDrawRangeElementsBaseVertex(&self, mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type_: GLenum, indices: *const c_void, basevertex: GLint) -> Result<()>;
9530	fn glDrawElementsInstancedBaseVertex(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, basevertex: GLint) -> Result<()>;
9531	fn glMultiDrawElementsBaseVertex(&self, mode: GLenum, count: *const GLsizei, type_: GLenum, indices: *const *const c_void, drawcount: GLsizei, basevertex: *const GLint) -> Result<()>;
9532	fn glProvokingVertex(&self, mode: GLenum) -> Result<()>;
9533	fn glFenceSync(&self, condition: GLenum, flags: GLbitfield) -> Result<GLsync>;
9534	fn glIsSync(&self, sync: GLsync) -> Result<GLboolean>;
9535	fn glDeleteSync(&self, sync: GLsync) -> Result<()>;
9536	fn glClientWaitSync(&self, sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> Result<GLenum>;
9537	fn glWaitSync(&self, sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> Result<()>;
9538	fn glGetInteger64v(&self, pname: GLenum, data: *mut GLint64) -> Result<()>;
9539	fn glGetSynciv(&self, sync: GLsync, pname: GLenum, count: GLsizei, length: *mut GLsizei, values: *mut GLint) -> Result<()>;
9540	fn glGetInteger64i_v(&self, target: GLenum, index: GLuint, data: *mut GLint64) -> Result<()>;
9541	fn glGetBufferParameteri64v(&self, target: GLenum, pname: GLenum, params: *mut GLint64) -> Result<()>;
9542	fn glFramebufferTexture(&self, target: GLenum, attachment: GLenum, texture: GLuint, level: GLint) -> Result<()>;
9543	fn glTexImage2DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()>;
9544	fn glTexImage3DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()>;
9545	fn glGetMultisamplefv(&self, pname: GLenum, index: GLuint, val: *mut GLfloat) -> Result<()>;
9546	fn glSampleMaski(&self, maskNumber: GLuint, mask: GLbitfield) -> Result<()>;
9547}
9548
9549#[derive(Clone, Copy, PartialEq, Eq, Hash)]
9550pub struct Version32 {
9551	available: bool,
9552	geterror: PFNGLGETERRORPROC,
9553	drawelementsbasevertex: PFNGLDRAWELEMENTSBASEVERTEXPROC,
9554	drawrangeelementsbasevertex: PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC,
9555	drawelementsinstancedbasevertex: PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC,
9556	multidrawelementsbasevertex: PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC,
9557	provokingvertex: PFNGLPROVOKINGVERTEXPROC,
9558	fencesync: PFNGLFENCESYNCPROC,
9559	issync: PFNGLISSYNCPROC,
9560	deletesync: PFNGLDELETESYNCPROC,
9561	clientwaitsync: PFNGLCLIENTWAITSYNCPROC,
9562	waitsync: PFNGLWAITSYNCPROC,
9563	getinteger64v: PFNGLGETINTEGER64VPROC,
9564	getsynciv: PFNGLGETSYNCIVPROC,
9565	getinteger64i_v: PFNGLGETINTEGER64I_VPROC,
9566	getbufferparameteri64v: PFNGLGETBUFFERPARAMETERI64VPROC,
9567	framebuffertexture: PFNGLFRAMEBUFFERTEXTUREPROC,
9568	teximage2dmultisample: PFNGLTEXIMAGE2DMULTISAMPLEPROC,
9569	teximage3dmultisample: PFNGLTEXIMAGE3DMULTISAMPLEPROC,
9570	getmultisamplefv: PFNGLGETMULTISAMPLEFVPROC,
9571	samplemaski: PFNGLSAMPLEMASKIPROC,
9572}
9573
9574impl GL_3_2 for Version32 {
9575	#[inline(always)]
9576	fn glGetError(&self) -> GLenum {
9577		(self.geterror)()
9578	}
9579	#[inline(always)]
9580	fn glDrawElementsBaseVertex(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, basevertex: GLint) -> Result<()> {
9581		let ret = process_catch("glDrawElementsBaseVertex", catch_unwind(||(self.drawelementsbasevertex)(mode, count, type_, indices, basevertex)));
9582		#[cfg(feature = "diagnose")]
9583		if let Ok(ret) = ret {
9584			return to_result("glDrawElementsBaseVertex", ret, self.glGetError());
9585		} else {
9586			return ret
9587		}
9588		#[cfg(not(feature = "diagnose"))]
9589		return ret;
9590	}
9591	#[inline(always)]
9592	fn glDrawRangeElementsBaseVertex(&self, mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type_: GLenum, indices: *const c_void, basevertex: GLint) -> Result<()> {
9593		let ret = process_catch("glDrawRangeElementsBaseVertex", catch_unwind(||(self.drawrangeelementsbasevertex)(mode, start, end, count, type_, indices, basevertex)));
9594		#[cfg(feature = "diagnose")]
9595		if let Ok(ret) = ret {
9596			return to_result("glDrawRangeElementsBaseVertex", ret, self.glGetError());
9597		} else {
9598			return ret
9599		}
9600		#[cfg(not(feature = "diagnose"))]
9601		return ret;
9602	}
9603	#[inline(always)]
9604	fn glDrawElementsInstancedBaseVertex(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, basevertex: GLint) -> Result<()> {
9605		let ret = process_catch("glDrawElementsInstancedBaseVertex", catch_unwind(||(self.drawelementsinstancedbasevertex)(mode, count, type_, indices, instancecount, basevertex)));
9606		#[cfg(feature = "diagnose")]
9607		if let Ok(ret) = ret {
9608			return to_result("glDrawElementsInstancedBaseVertex", ret, self.glGetError());
9609		} else {
9610			return ret
9611		}
9612		#[cfg(not(feature = "diagnose"))]
9613		return ret;
9614	}
9615	#[inline(always)]
9616	fn glMultiDrawElementsBaseVertex(&self, mode: GLenum, count: *const GLsizei, type_: GLenum, indices: *const *const c_void, drawcount: GLsizei, basevertex: *const GLint) -> Result<()> {
9617		let ret = process_catch("glMultiDrawElementsBaseVertex", catch_unwind(||(self.multidrawelementsbasevertex)(mode, count, type_, indices, drawcount, basevertex)));
9618		#[cfg(feature = "diagnose")]
9619		if let Ok(ret) = ret {
9620			return to_result("glMultiDrawElementsBaseVertex", ret, self.glGetError());
9621		} else {
9622			return ret
9623		}
9624		#[cfg(not(feature = "diagnose"))]
9625		return ret;
9626	}
9627	#[inline(always)]
9628	fn glProvokingVertex(&self, mode: GLenum) -> Result<()> {
9629		let ret = process_catch("glProvokingVertex", catch_unwind(||(self.provokingvertex)(mode)));
9630		#[cfg(feature = "diagnose")]
9631		if let Ok(ret) = ret {
9632			return to_result("glProvokingVertex", ret, self.glGetError());
9633		} else {
9634			return ret
9635		}
9636		#[cfg(not(feature = "diagnose"))]
9637		return ret;
9638	}
9639	#[inline(always)]
9640	fn glFenceSync(&self, condition: GLenum, flags: GLbitfield) -> Result<GLsync> {
9641		let ret = process_catch("glFenceSync", catch_unwind(||(self.fencesync)(condition, flags)));
9642		#[cfg(feature = "diagnose")]
9643		if let Ok(ret) = ret {
9644			return to_result("glFenceSync", ret, self.glGetError());
9645		} else {
9646			return ret
9647		}
9648		#[cfg(not(feature = "diagnose"))]
9649		return ret;
9650	}
9651	#[inline(always)]
9652	fn glIsSync(&self, sync: GLsync) -> Result<GLboolean> {
9653		let ret = process_catch("glIsSync", catch_unwind(||(self.issync)(sync)));
9654		#[cfg(feature = "diagnose")]
9655		if let Ok(ret) = ret {
9656			return to_result("glIsSync", ret, self.glGetError());
9657		} else {
9658			return ret
9659		}
9660		#[cfg(not(feature = "diagnose"))]
9661		return ret;
9662	}
9663	#[inline(always)]
9664	fn glDeleteSync(&self, sync: GLsync) -> Result<()> {
9665		let ret = process_catch("glDeleteSync", catch_unwind(||(self.deletesync)(sync)));
9666		#[cfg(feature = "diagnose")]
9667		if let Ok(ret) = ret {
9668			return to_result("glDeleteSync", ret, self.glGetError());
9669		} else {
9670			return ret
9671		}
9672		#[cfg(not(feature = "diagnose"))]
9673		return ret;
9674	}
9675	#[inline(always)]
9676	fn glClientWaitSync(&self, sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> Result<GLenum> {
9677		let ret = process_catch("glClientWaitSync", catch_unwind(||(self.clientwaitsync)(sync, flags, timeout)));
9678		#[cfg(feature = "diagnose")]
9679		if let Ok(ret) = ret {
9680			return to_result("glClientWaitSync", ret, self.glGetError());
9681		} else {
9682			return ret
9683		}
9684		#[cfg(not(feature = "diagnose"))]
9685		return ret;
9686	}
9687	#[inline(always)]
9688	fn glWaitSync(&self, sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> Result<()> {
9689		let ret = process_catch("glWaitSync", catch_unwind(||(self.waitsync)(sync, flags, timeout)));
9690		#[cfg(feature = "diagnose")]
9691		if let Ok(ret) = ret {
9692			return to_result("glWaitSync", ret, self.glGetError());
9693		} else {
9694			return ret
9695		}
9696		#[cfg(not(feature = "diagnose"))]
9697		return ret;
9698	}
9699	#[inline(always)]
9700	fn glGetInteger64v(&self, pname: GLenum, data: *mut GLint64) -> Result<()> {
9701		let ret = process_catch("glGetInteger64v", catch_unwind(||(self.getinteger64v)(pname, data)));
9702		#[cfg(feature = "diagnose")]
9703		if let Ok(ret) = ret {
9704			return to_result("glGetInteger64v", ret, self.glGetError());
9705		} else {
9706			return ret
9707		}
9708		#[cfg(not(feature = "diagnose"))]
9709		return ret;
9710	}
9711	#[inline(always)]
9712	fn glGetSynciv(&self, sync: GLsync, pname: GLenum, count: GLsizei, length: *mut GLsizei, values: *mut GLint) -> Result<()> {
9713		let ret = process_catch("glGetSynciv", catch_unwind(||(self.getsynciv)(sync, pname, count, length, values)));
9714		#[cfg(feature = "diagnose")]
9715		if let Ok(ret) = ret {
9716			return to_result("glGetSynciv", ret, self.glGetError());
9717		} else {
9718			return ret
9719		}
9720		#[cfg(not(feature = "diagnose"))]
9721		return ret;
9722	}
9723	#[inline(always)]
9724	fn glGetInteger64i_v(&self, target: GLenum, index: GLuint, data: *mut GLint64) -> Result<()> {
9725		let ret = process_catch("glGetInteger64i_v", catch_unwind(||(self.getinteger64i_v)(target, index, data)));
9726		#[cfg(feature = "diagnose")]
9727		if let Ok(ret) = ret {
9728			return to_result("glGetInteger64i_v", ret, self.glGetError());
9729		} else {
9730			return ret
9731		}
9732		#[cfg(not(feature = "diagnose"))]
9733		return ret;
9734	}
9735	#[inline(always)]
9736	fn glGetBufferParameteri64v(&self, target: GLenum, pname: GLenum, params: *mut GLint64) -> Result<()> {
9737		let ret = process_catch("glGetBufferParameteri64v", catch_unwind(||(self.getbufferparameteri64v)(target, pname, params)));
9738		#[cfg(feature = "diagnose")]
9739		if let Ok(ret) = ret {
9740			return to_result("glGetBufferParameteri64v", ret, self.glGetError());
9741		} else {
9742			return ret
9743		}
9744		#[cfg(not(feature = "diagnose"))]
9745		return ret;
9746	}
9747	#[inline(always)]
9748	fn glFramebufferTexture(&self, target: GLenum, attachment: GLenum, texture: GLuint, level: GLint) -> Result<()> {
9749		let ret = process_catch("glFramebufferTexture", catch_unwind(||(self.framebuffertexture)(target, attachment, texture, level)));
9750		#[cfg(feature = "diagnose")]
9751		if let Ok(ret) = ret {
9752			return to_result("glFramebufferTexture", ret, self.glGetError());
9753		} else {
9754			return ret
9755		}
9756		#[cfg(not(feature = "diagnose"))]
9757		return ret;
9758	}
9759	#[inline(always)]
9760	fn glTexImage2DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
9761		let ret = process_catch("glTexImage2DMultisample", catch_unwind(||(self.teximage2dmultisample)(target, samples, internalformat, width, height, fixedsamplelocations)));
9762		#[cfg(feature = "diagnose")]
9763		if let Ok(ret) = ret {
9764			return to_result("glTexImage2DMultisample", ret, self.glGetError());
9765		} else {
9766			return ret
9767		}
9768		#[cfg(not(feature = "diagnose"))]
9769		return ret;
9770	}
9771	#[inline(always)]
9772	fn glTexImage3DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
9773		let ret = process_catch("glTexImage3DMultisample", catch_unwind(||(self.teximage3dmultisample)(target, samples, internalformat, width, height, depth, fixedsamplelocations)));
9774		#[cfg(feature = "diagnose")]
9775		if let Ok(ret) = ret {
9776			return to_result("glTexImage3DMultisample", ret, self.glGetError());
9777		} else {
9778			return ret
9779		}
9780		#[cfg(not(feature = "diagnose"))]
9781		return ret;
9782	}
9783	#[inline(always)]
9784	fn glGetMultisamplefv(&self, pname: GLenum, index: GLuint, val: *mut GLfloat) -> Result<()> {
9785		let ret = process_catch("glGetMultisamplefv", catch_unwind(||(self.getmultisamplefv)(pname, index, val)));
9786		#[cfg(feature = "diagnose")]
9787		if let Ok(ret) = ret {
9788			return to_result("glGetMultisamplefv", ret, self.glGetError());
9789		} else {
9790			return ret
9791		}
9792		#[cfg(not(feature = "diagnose"))]
9793		return ret;
9794	}
9795	#[inline(always)]
9796	fn glSampleMaski(&self, maskNumber: GLuint, mask: GLbitfield) -> Result<()> {
9797		let ret = process_catch("glSampleMaski", catch_unwind(||(self.samplemaski)(maskNumber, mask)));
9798		#[cfg(feature = "diagnose")]
9799		if let Ok(ret) = ret {
9800			return to_result("glSampleMaski", ret, self.glGetError());
9801		} else {
9802			return ret
9803		}
9804		#[cfg(not(feature = "diagnose"))]
9805		return ret;
9806	}
9807}
9808
9809impl Version32 {
9810	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
9811		let (_spec, major, minor, release) = base.get_version();
9812		if (major, minor, release) < (3, 2, 0) {
9813			return Self::default();
9814		}
9815		Self {
9816			available: true,
9817			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
9818			drawelementsbasevertex: {let proc = get_proc_address("glDrawElementsBaseVertex"); if proc == null() {dummy_pfngldrawelementsbasevertexproc} else {unsafe{transmute(proc)}}},
9819			drawrangeelementsbasevertex: {let proc = get_proc_address("glDrawRangeElementsBaseVertex"); if proc == null() {dummy_pfngldrawrangeelementsbasevertexproc} else {unsafe{transmute(proc)}}},
9820			drawelementsinstancedbasevertex: {let proc = get_proc_address("glDrawElementsInstancedBaseVertex"); if proc == null() {dummy_pfngldrawelementsinstancedbasevertexproc} else {unsafe{transmute(proc)}}},
9821			multidrawelementsbasevertex: {let proc = get_proc_address("glMultiDrawElementsBaseVertex"); if proc == null() {dummy_pfnglmultidrawelementsbasevertexproc} else {unsafe{transmute(proc)}}},
9822			provokingvertex: {let proc = get_proc_address("glProvokingVertex"); if proc == null() {dummy_pfnglprovokingvertexproc} else {unsafe{transmute(proc)}}},
9823			fencesync: {let proc = get_proc_address("glFenceSync"); if proc == null() {dummy_pfnglfencesyncproc} else {unsafe{transmute(proc)}}},
9824			issync: {let proc = get_proc_address("glIsSync"); if proc == null() {dummy_pfnglissyncproc} else {unsafe{transmute(proc)}}},
9825			deletesync: {let proc = get_proc_address("glDeleteSync"); if proc == null() {dummy_pfngldeletesyncproc} else {unsafe{transmute(proc)}}},
9826			clientwaitsync: {let proc = get_proc_address("glClientWaitSync"); if proc == null() {dummy_pfnglclientwaitsyncproc} else {unsafe{transmute(proc)}}},
9827			waitsync: {let proc = get_proc_address("glWaitSync"); if proc == null() {dummy_pfnglwaitsyncproc} else {unsafe{transmute(proc)}}},
9828			getinteger64v: {let proc = get_proc_address("glGetInteger64v"); if proc == null() {dummy_pfnglgetinteger64vproc} else {unsafe{transmute(proc)}}},
9829			getsynciv: {let proc = get_proc_address("glGetSynciv"); if proc == null() {dummy_pfnglgetsyncivproc} else {unsafe{transmute(proc)}}},
9830			getinteger64i_v: {let proc = get_proc_address("glGetInteger64i_v"); if proc == null() {dummy_pfnglgetinteger64i_vproc} else {unsafe{transmute(proc)}}},
9831			getbufferparameteri64v: {let proc = get_proc_address("glGetBufferParameteri64v"); if proc == null() {dummy_pfnglgetbufferparameteri64vproc} else {unsafe{transmute(proc)}}},
9832			framebuffertexture: {let proc = get_proc_address("glFramebufferTexture"); if proc == null() {dummy_pfnglframebuffertextureproc} else {unsafe{transmute(proc)}}},
9833			teximage2dmultisample: {let proc = get_proc_address("glTexImage2DMultisample"); if proc == null() {dummy_pfnglteximage2dmultisampleproc} else {unsafe{transmute(proc)}}},
9834			teximage3dmultisample: {let proc = get_proc_address("glTexImage3DMultisample"); if proc == null() {dummy_pfnglteximage3dmultisampleproc} else {unsafe{transmute(proc)}}},
9835			getmultisamplefv: {let proc = get_proc_address("glGetMultisamplefv"); if proc == null() {dummy_pfnglgetmultisamplefvproc} else {unsafe{transmute(proc)}}},
9836			samplemaski: {let proc = get_proc_address("glSampleMaski"); if proc == null() {dummy_pfnglsamplemaskiproc} else {unsafe{transmute(proc)}}},
9837		}
9838	}
9839	#[inline(always)]
9840	pub fn get_available(&self) -> bool {
9841		self.available
9842	}
9843}
9844
9845impl Default for Version32 {
9846	fn default() -> Self {
9847		Self {
9848			available: false,
9849			geterror: dummy_pfnglgeterrorproc,
9850			drawelementsbasevertex: dummy_pfngldrawelementsbasevertexproc,
9851			drawrangeelementsbasevertex: dummy_pfngldrawrangeelementsbasevertexproc,
9852			drawelementsinstancedbasevertex: dummy_pfngldrawelementsinstancedbasevertexproc,
9853			multidrawelementsbasevertex: dummy_pfnglmultidrawelementsbasevertexproc,
9854			provokingvertex: dummy_pfnglprovokingvertexproc,
9855			fencesync: dummy_pfnglfencesyncproc,
9856			issync: dummy_pfnglissyncproc,
9857			deletesync: dummy_pfngldeletesyncproc,
9858			clientwaitsync: dummy_pfnglclientwaitsyncproc,
9859			waitsync: dummy_pfnglwaitsyncproc,
9860			getinteger64v: dummy_pfnglgetinteger64vproc,
9861			getsynciv: dummy_pfnglgetsyncivproc,
9862			getinteger64i_v: dummy_pfnglgetinteger64i_vproc,
9863			getbufferparameteri64v: dummy_pfnglgetbufferparameteri64vproc,
9864			framebuffertexture: dummy_pfnglframebuffertextureproc,
9865			teximage2dmultisample: dummy_pfnglteximage2dmultisampleproc,
9866			teximage3dmultisample: dummy_pfnglteximage3dmultisampleproc,
9867			getmultisamplefv: dummy_pfnglgetmultisamplefvproc,
9868			samplemaski: dummy_pfnglsamplemaskiproc,
9869		}
9870	}
9871}
9872impl Debug for Version32 {
9873	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
9874		if self.available {
9875			f.debug_struct("Version32")
9876			.field("available", &self.available)
9877			.field("drawelementsbasevertex", unsafe{if transmute::<_, *const c_void>(self.drawelementsbasevertex) == (dummy_pfngldrawelementsbasevertexproc as *const c_void) {&null::<PFNGLDRAWELEMENTSBASEVERTEXPROC>()} else {&self.drawelementsbasevertex}})
9878			.field("drawrangeelementsbasevertex", unsafe{if transmute::<_, *const c_void>(self.drawrangeelementsbasevertex) == (dummy_pfngldrawrangeelementsbasevertexproc as *const c_void) {&null::<PFNGLDRAWRANGEELEMENTSBASEVERTEXPROC>()} else {&self.drawrangeelementsbasevertex}})
9879			.field("drawelementsinstancedbasevertex", unsafe{if transmute::<_, *const c_void>(self.drawelementsinstancedbasevertex) == (dummy_pfngldrawelementsinstancedbasevertexproc as *const c_void) {&null::<PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXPROC>()} else {&self.drawelementsinstancedbasevertex}})
9880			.field("multidrawelementsbasevertex", unsafe{if transmute::<_, *const c_void>(self.multidrawelementsbasevertex) == (dummy_pfnglmultidrawelementsbasevertexproc as *const c_void) {&null::<PFNGLMULTIDRAWELEMENTSBASEVERTEXPROC>()} else {&self.multidrawelementsbasevertex}})
9881			.field("provokingvertex", unsafe{if transmute::<_, *const c_void>(self.provokingvertex) == (dummy_pfnglprovokingvertexproc as *const c_void) {&null::<PFNGLPROVOKINGVERTEXPROC>()} else {&self.provokingvertex}})
9882			.field("fencesync", unsafe{if transmute::<_, *const c_void>(self.fencesync) == (dummy_pfnglfencesyncproc as *const c_void) {&null::<PFNGLFENCESYNCPROC>()} else {&self.fencesync}})
9883			.field("issync", unsafe{if transmute::<_, *const c_void>(self.issync) == (dummy_pfnglissyncproc as *const c_void) {&null::<PFNGLISSYNCPROC>()} else {&self.issync}})
9884			.field("deletesync", unsafe{if transmute::<_, *const c_void>(self.deletesync) == (dummy_pfngldeletesyncproc as *const c_void) {&null::<PFNGLDELETESYNCPROC>()} else {&self.deletesync}})
9885			.field("clientwaitsync", unsafe{if transmute::<_, *const c_void>(self.clientwaitsync) == (dummy_pfnglclientwaitsyncproc as *const c_void) {&null::<PFNGLCLIENTWAITSYNCPROC>()} else {&self.clientwaitsync}})
9886			.field("waitsync", unsafe{if transmute::<_, *const c_void>(self.waitsync) == (dummy_pfnglwaitsyncproc as *const c_void) {&null::<PFNGLWAITSYNCPROC>()} else {&self.waitsync}})
9887			.field("getinteger64v", unsafe{if transmute::<_, *const c_void>(self.getinteger64v) == (dummy_pfnglgetinteger64vproc as *const c_void) {&null::<PFNGLGETINTEGER64VPROC>()} else {&self.getinteger64v}})
9888			.field("getsynciv", unsafe{if transmute::<_, *const c_void>(self.getsynciv) == (dummy_pfnglgetsyncivproc as *const c_void) {&null::<PFNGLGETSYNCIVPROC>()} else {&self.getsynciv}})
9889			.field("getinteger64i_v", unsafe{if transmute::<_, *const c_void>(self.getinteger64i_v) == (dummy_pfnglgetinteger64i_vproc as *const c_void) {&null::<PFNGLGETINTEGER64I_VPROC>()} else {&self.getinteger64i_v}})
9890			.field("getbufferparameteri64v", unsafe{if transmute::<_, *const c_void>(self.getbufferparameteri64v) == (dummy_pfnglgetbufferparameteri64vproc as *const c_void) {&null::<PFNGLGETBUFFERPARAMETERI64VPROC>()} else {&self.getbufferparameteri64v}})
9891			.field("framebuffertexture", unsafe{if transmute::<_, *const c_void>(self.framebuffertexture) == (dummy_pfnglframebuffertextureproc as *const c_void) {&null::<PFNGLFRAMEBUFFERTEXTUREPROC>()} else {&self.framebuffertexture}})
9892			.field("teximage2dmultisample", unsafe{if transmute::<_, *const c_void>(self.teximage2dmultisample) == (dummy_pfnglteximage2dmultisampleproc as *const c_void) {&null::<PFNGLTEXIMAGE2DMULTISAMPLEPROC>()} else {&self.teximage2dmultisample}})
9893			.field("teximage3dmultisample", unsafe{if transmute::<_, *const c_void>(self.teximage3dmultisample) == (dummy_pfnglteximage3dmultisampleproc as *const c_void) {&null::<PFNGLTEXIMAGE3DMULTISAMPLEPROC>()} else {&self.teximage3dmultisample}})
9894			.field("getmultisamplefv", unsafe{if transmute::<_, *const c_void>(self.getmultisamplefv) == (dummy_pfnglgetmultisamplefvproc as *const c_void) {&null::<PFNGLGETMULTISAMPLEFVPROC>()} else {&self.getmultisamplefv}})
9895			.field("samplemaski", unsafe{if transmute::<_, *const c_void>(self.samplemaski) == (dummy_pfnglsamplemaskiproc as *const c_void) {&null::<PFNGLSAMPLEMASKIPROC>()} else {&self.samplemaski}})
9896			.finish()
9897		} else {
9898			f.debug_struct("Version32")
9899			.field("available", &self.available)
9900			.finish_non_exhaustive()
9901		}
9902	}
9903}
9904type PFNGLBINDFRAGDATALOCATIONINDEXEDPROC = extern "system" fn(GLuint, GLuint, GLuint, *const GLchar);
9905type PFNGLGETFRAGDATAINDEXPROC = extern "system" fn(GLuint, *const GLchar) -> GLint;
9906type PFNGLGENSAMPLERSPROC = extern "system" fn(GLsizei, *mut GLuint);
9907type PFNGLDELETESAMPLERSPROC = extern "system" fn(GLsizei, *const GLuint);
9908type PFNGLISSAMPLERPROC = extern "system" fn(GLuint) -> GLboolean;
9909type PFNGLBINDSAMPLERPROC = extern "system" fn(GLuint, GLuint);
9910type PFNGLSAMPLERPARAMETERIPROC = extern "system" fn(GLuint, GLenum, GLint);
9911type PFNGLSAMPLERPARAMETERIVPROC = extern "system" fn(GLuint, GLenum, *const GLint);
9912type PFNGLSAMPLERPARAMETERFPROC = extern "system" fn(GLuint, GLenum, GLfloat);
9913type PFNGLSAMPLERPARAMETERFVPROC = extern "system" fn(GLuint, GLenum, *const GLfloat);
9914type PFNGLSAMPLERPARAMETERIIVPROC = extern "system" fn(GLuint, GLenum, *const GLint);
9915type PFNGLSAMPLERPARAMETERIUIVPROC = extern "system" fn(GLuint, GLenum, *const GLuint);
9916type PFNGLGETSAMPLERPARAMETERIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
9917type PFNGLGETSAMPLERPARAMETERIIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
9918type PFNGLGETSAMPLERPARAMETERFVPROC = extern "system" fn(GLuint, GLenum, *mut GLfloat);
9919type PFNGLGETSAMPLERPARAMETERIUIVPROC = extern "system" fn(GLuint, GLenum, *mut GLuint);
9920type PFNGLQUERYCOUNTERPROC = extern "system" fn(GLuint, GLenum);
9921type PFNGLGETQUERYOBJECTI64VPROC = extern "system" fn(GLuint, GLenum, *mut GLint64);
9922type PFNGLGETQUERYOBJECTUI64VPROC = extern "system" fn(GLuint, GLenum, *mut GLuint64);
9923type PFNGLVERTEXATTRIBDIVISORPROC = extern "system" fn(GLuint, GLuint);
9924type PFNGLVERTEXATTRIBP1UIPROC = extern "system" fn(GLuint, GLenum, GLboolean, GLuint);
9925type PFNGLVERTEXATTRIBP1UIVPROC = extern "system" fn(GLuint, GLenum, GLboolean, *const GLuint);
9926type PFNGLVERTEXATTRIBP2UIPROC = extern "system" fn(GLuint, GLenum, GLboolean, GLuint);
9927type PFNGLVERTEXATTRIBP2UIVPROC = extern "system" fn(GLuint, GLenum, GLboolean, *const GLuint);
9928type PFNGLVERTEXATTRIBP3UIPROC = extern "system" fn(GLuint, GLenum, GLboolean, GLuint);
9929type PFNGLVERTEXATTRIBP3UIVPROC = extern "system" fn(GLuint, GLenum, GLboolean, *const GLuint);
9930type PFNGLVERTEXATTRIBP4UIPROC = extern "system" fn(GLuint, GLenum, GLboolean, GLuint);
9931type PFNGLVERTEXATTRIBP4UIVPROC = extern "system" fn(GLuint, GLenum, GLboolean, *const GLuint);
9932type PFNGLVERTEXP2UIPROC = extern "system" fn(GLenum, GLuint);
9933type PFNGLVERTEXP2UIVPROC = extern "system" fn(GLenum, *const GLuint);
9934type PFNGLVERTEXP3UIPROC = extern "system" fn(GLenum, GLuint);
9935type PFNGLVERTEXP3UIVPROC = extern "system" fn(GLenum, *const GLuint);
9936type PFNGLVERTEXP4UIPROC = extern "system" fn(GLenum, GLuint);
9937type PFNGLVERTEXP4UIVPROC = extern "system" fn(GLenum, *const GLuint);
9938type PFNGLTEXCOORDP1UIPROC = extern "system" fn(GLenum, GLuint);
9939type PFNGLTEXCOORDP1UIVPROC = extern "system" fn(GLenum, *const GLuint);
9940type PFNGLTEXCOORDP2UIPROC = extern "system" fn(GLenum, GLuint);
9941type PFNGLTEXCOORDP2UIVPROC = extern "system" fn(GLenum, *const GLuint);
9942type PFNGLTEXCOORDP3UIPROC = extern "system" fn(GLenum, GLuint);
9943type PFNGLTEXCOORDP3UIVPROC = extern "system" fn(GLenum, *const GLuint);
9944type PFNGLTEXCOORDP4UIPROC = extern "system" fn(GLenum, GLuint);
9945type PFNGLTEXCOORDP4UIVPROC = extern "system" fn(GLenum, *const GLuint);
9946type PFNGLMULTITEXCOORDP1UIPROC = extern "system" fn(GLenum, GLenum, GLuint);
9947type PFNGLMULTITEXCOORDP1UIVPROC = extern "system" fn(GLenum, GLenum, *const GLuint);
9948type PFNGLMULTITEXCOORDP2UIPROC = extern "system" fn(GLenum, GLenum, GLuint);
9949type PFNGLMULTITEXCOORDP2UIVPROC = extern "system" fn(GLenum, GLenum, *const GLuint);
9950type PFNGLMULTITEXCOORDP3UIPROC = extern "system" fn(GLenum, GLenum, GLuint);
9951type PFNGLMULTITEXCOORDP3UIVPROC = extern "system" fn(GLenum, GLenum, *const GLuint);
9952type PFNGLMULTITEXCOORDP4UIPROC = extern "system" fn(GLenum, GLenum, GLuint);
9953type PFNGLMULTITEXCOORDP4UIVPROC = extern "system" fn(GLenum, GLenum, *const GLuint);
9954type PFNGLNORMALP3UIPROC = extern "system" fn(GLenum, GLuint);
9955type PFNGLNORMALP3UIVPROC = extern "system" fn(GLenum, *const GLuint);
9956type PFNGLCOLORP3UIPROC = extern "system" fn(GLenum, GLuint);
9957type PFNGLCOLORP3UIVPROC = extern "system" fn(GLenum, *const GLuint);
9958type PFNGLCOLORP4UIPROC = extern "system" fn(GLenum, GLuint);
9959type PFNGLCOLORP4UIVPROC = extern "system" fn(GLenum, *const GLuint);
9960type PFNGLSECONDARYCOLORP3UIPROC = extern "system" fn(GLenum, GLuint);
9961type PFNGLSECONDARYCOLORP3UIVPROC = extern "system" fn(GLenum, *const GLuint);
9962extern "system" fn dummy_pfnglbindfragdatalocationindexedproc (_: GLuint, _: GLuint, _: GLuint, _: *const GLchar) {
9963	panic!("OpenGL function pointer `glBindFragDataLocationIndexed()` is null.")
9964}
9965extern "system" fn dummy_pfnglgetfragdataindexproc (_: GLuint, _: *const GLchar) -> GLint {
9966	panic!("OpenGL function pointer `glGetFragDataIndex()` is null.")
9967}
9968extern "system" fn dummy_pfnglgensamplersproc (_: GLsizei, _: *mut GLuint) {
9969	panic!("OpenGL function pointer `glGenSamplers()` is null.")
9970}
9971extern "system" fn dummy_pfngldeletesamplersproc (_: GLsizei, _: *const GLuint) {
9972	panic!("OpenGL function pointer `glDeleteSamplers()` is null.")
9973}
9974extern "system" fn dummy_pfnglissamplerproc (_: GLuint) -> GLboolean {
9975	panic!("OpenGL function pointer `glIsSampler()` is null.")
9976}
9977extern "system" fn dummy_pfnglbindsamplerproc (_: GLuint, _: GLuint) {
9978	panic!("OpenGL function pointer `glBindSampler()` is null.")
9979}
9980extern "system" fn dummy_pfnglsamplerparameteriproc (_: GLuint, _: GLenum, _: GLint) {
9981	panic!("OpenGL function pointer `glSamplerParameteri()` is null.")
9982}
9983extern "system" fn dummy_pfnglsamplerparameterivproc (_: GLuint, _: GLenum, _: *const GLint) {
9984	panic!("OpenGL function pointer `glSamplerParameteriv()` is null.")
9985}
9986extern "system" fn dummy_pfnglsamplerparameterfproc (_: GLuint, _: GLenum, _: GLfloat) {
9987	panic!("OpenGL function pointer `glSamplerParameterf()` is null.")
9988}
9989extern "system" fn dummy_pfnglsamplerparameterfvproc (_: GLuint, _: GLenum, _: *const GLfloat) {
9990	panic!("OpenGL function pointer `glSamplerParameterfv()` is null.")
9991}
9992extern "system" fn dummy_pfnglsamplerparameteriivproc (_: GLuint, _: GLenum, _: *const GLint) {
9993	panic!("OpenGL function pointer `glSamplerParameterIiv()` is null.")
9994}
9995extern "system" fn dummy_pfnglsamplerparameteriuivproc (_: GLuint, _: GLenum, _: *const GLuint) {
9996	panic!("OpenGL function pointer `glSamplerParameterIuiv()` is null.")
9997}
9998extern "system" fn dummy_pfnglgetsamplerparameterivproc (_: GLuint, _: GLenum, _: *mut GLint) {
9999	panic!("OpenGL function pointer `glGetSamplerParameteriv()` is null.")
10000}
10001extern "system" fn dummy_pfnglgetsamplerparameteriivproc (_: GLuint, _: GLenum, _: *mut GLint) {
10002	panic!("OpenGL function pointer `glGetSamplerParameterIiv()` is null.")
10003}
10004extern "system" fn dummy_pfnglgetsamplerparameterfvproc (_: GLuint, _: GLenum, _: *mut GLfloat) {
10005	panic!("OpenGL function pointer `glGetSamplerParameterfv()` is null.")
10006}
10007extern "system" fn dummy_pfnglgetsamplerparameteriuivproc (_: GLuint, _: GLenum, _: *mut GLuint) {
10008	panic!("OpenGL function pointer `glGetSamplerParameterIuiv()` is null.")
10009}
10010extern "system" fn dummy_pfnglquerycounterproc (_: GLuint, _: GLenum) {
10011	panic!("OpenGL function pointer `glQueryCounter()` is null.")
10012}
10013extern "system" fn dummy_pfnglgetqueryobjecti64vproc (_: GLuint, _: GLenum, _: *mut GLint64) {
10014	panic!("OpenGL function pointer `glGetQueryObjecti64v()` is null.")
10015}
10016extern "system" fn dummy_pfnglgetqueryobjectui64vproc (_: GLuint, _: GLenum, _: *mut GLuint64) {
10017	panic!("OpenGL function pointer `glGetQueryObjectui64v()` is null.")
10018}
10019extern "system" fn dummy_pfnglvertexattribdivisorproc (_: GLuint, _: GLuint) {
10020	panic!("OpenGL function pointer `glVertexAttribDivisor()` is null.")
10021}
10022extern "system" fn dummy_pfnglvertexattribp1uiproc (_: GLuint, _: GLenum, _: GLboolean, _: GLuint) {
10023	panic!("OpenGL function pointer `glVertexAttribP1ui()` is null.")
10024}
10025extern "system" fn dummy_pfnglvertexattribp1uivproc (_: GLuint, _: GLenum, _: GLboolean, _: *const GLuint) {
10026	panic!("OpenGL function pointer `glVertexAttribP1uiv()` is null.")
10027}
10028extern "system" fn dummy_pfnglvertexattribp2uiproc (_: GLuint, _: GLenum, _: GLboolean, _: GLuint) {
10029	panic!("OpenGL function pointer `glVertexAttribP2ui()` is null.")
10030}
10031extern "system" fn dummy_pfnglvertexattribp2uivproc (_: GLuint, _: GLenum, _: GLboolean, _: *const GLuint) {
10032	panic!("OpenGL function pointer `glVertexAttribP2uiv()` is null.")
10033}
10034extern "system" fn dummy_pfnglvertexattribp3uiproc (_: GLuint, _: GLenum, _: GLboolean, _: GLuint) {
10035	panic!("OpenGL function pointer `glVertexAttribP3ui()` is null.")
10036}
10037extern "system" fn dummy_pfnglvertexattribp3uivproc (_: GLuint, _: GLenum, _: GLboolean, _: *const GLuint) {
10038	panic!("OpenGL function pointer `glVertexAttribP3uiv()` is null.")
10039}
10040extern "system" fn dummy_pfnglvertexattribp4uiproc (_: GLuint, _: GLenum, _: GLboolean, _: GLuint) {
10041	panic!("OpenGL function pointer `glVertexAttribP4ui()` is null.")
10042}
10043extern "system" fn dummy_pfnglvertexattribp4uivproc (_: GLuint, _: GLenum, _: GLboolean, _: *const GLuint) {
10044	panic!("OpenGL function pointer `glVertexAttribP4uiv()` is null.")
10045}
10046extern "system" fn dummy_pfnglvertexp2uiproc (_: GLenum, _: GLuint) {
10047	panic!("OpenGL function pointer `glVertexP2ui()` is null.")
10048}
10049extern "system" fn dummy_pfnglvertexp2uivproc (_: GLenum, _: *const GLuint) {
10050	panic!("OpenGL function pointer `glVertexP2uiv()` is null.")
10051}
10052extern "system" fn dummy_pfnglvertexp3uiproc (_: GLenum, _: GLuint) {
10053	panic!("OpenGL function pointer `glVertexP3ui()` is null.")
10054}
10055extern "system" fn dummy_pfnglvertexp3uivproc (_: GLenum, _: *const GLuint) {
10056	panic!("OpenGL function pointer `glVertexP3uiv()` is null.")
10057}
10058extern "system" fn dummy_pfnglvertexp4uiproc (_: GLenum, _: GLuint) {
10059	panic!("OpenGL function pointer `glVertexP4ui()` is null.")
10060}
10061extern "system" fn dummy_pfnglvertexp4uivproc (_: GLenum, _: *const GLuint) {
10062	panic!("OpenGL function pointer `glVertexP4uiv()` is null.")
10063}
10064extern "system" fn dummy_pfngltexcoordp1uiproc (_: GLenum, _: GLuint) {
10065	panic!("OpenGL function pointer `glTexCoordP1ui()` is null.")
10066}
10067extern "system" fn dummy_pfngltexcoordp1uivproc (_: GLenum, _: *const GLuint) {
10068	panic!("OpenGL function pointer `glTexCoordP1uiv()` is null.")
10069}
10070extern "system" fn dummy_pfngltexcoordp2uiproc (_: GLenum, _: GLuint) {
10071	panic!("OpenGL function pointer `glTexCoordP2ui()` is null.")
10072}
10073extern "system" fn dummy_pfngltexcoordp2uivproc (_: GLenum, _: *const GLuint) {
10074	panic!("OpenGL function pointer `glTexCoordP2uiv()` is null.")
10075}
10076extern "system" fn dummy_pfngltexcoordp3uiproc (_: GLenum, _: GLuint) {
10077	panic!("OpenGL function pointer `glTexCoordP3ui()` is null.")
10078}
10079extern "system" fn dummy_pfngltexcoordp3uivproc (_: GLenum, _: *const GLuint) {
10080	panic!("OpenGL function pointer `glTexCoordP3uiv()` is null.")
10081}
10082extern "system" fn dummy_pfngltexcoordp4uiproc (_: GLenum, _: GLuint) {
10083	panic!("OpenGL function pointer `glTexCoordP4ui()` is null.")
10084}
10085extern "system" fn dummy_pfngltexcoordp4uivproc (_: GLenum, _: *const GLuint) {
10086	panic!("OpenGL function pointer `glTexCoordP4uiv()` is null.")
10087}
10088extern "system" fn dummy_pfnglmultitexcoordp1uiproc (_: GLenum, _: GLenum, _: GLuint) {
10089	panic!("OpenGL function pointer `glMultiTexCoordP1ui()` is null.")
10090}
10091extern "system" fn dummy_pfnglmultitexcoordp1uivproc (_: GLenum, _: GLenum, _: *const GLuint) {
10092	panic!("OpenGL function pointer `glMultiTexCoordP1uiv()` is null.")
10093}
10094extern "system" fn dummy_pfnglmultitexcoordp2uiproc (_: GLenum, _: GLenum, _: GLuint) {
10095	panic!("OpenGL function pointer `glMultiTexCoordP2ui()` is null.")
10096}
10097extern "system" fn dummy_pfnglmultitexcoordp2uivproc (_: GLenum, _: GLenum, _: *const GLuint) {
10098	panic!("OpenGL function pointer `glMultiTexCoordP2uiv()` is null.")
10099}
10100extern "system" fn dummy_pfnglmultitexcoordp3uiproc (_: GLenum, _: GLenum, _: GLuint) {
10101	panic!("OpenGL function pointer `glMultiTexCoordP3ui()` is null.")
10102}
10103extern "system" fn dummy_pfnglmultitexcoordp3uivproc (_: GLenum, _: GLenum, _: *const GLuint) {
10104	panic!("OpenGL function pointer `glMultiTexCoordP3uiv()` is null.")
10105}
10106extern "system" fn dummy_pfnglmultitexcoordp4uiproc (_: GLenum, _: GLenum, _: GLuint) {
10107	panic!("OpenGL function pointer `glMultiTexCoordP4ui()` is null.")
10108}
10109extern "system" fn dummy_pfnglmultitexcoordp4uivproc (_: GLenum, _: GLenum, _: *const GLuint) {
10110	panic!("OpenGL function pointer `glMultiTexCoordP4uiv()` is null.")
10111}
10112extern "system" fn dummy_pfnglnormalp3uiproc (_: GLenum, _: GLuint) {
10113	panic!("OpenGL function pointer `glNormalP3ui()` is null.")
10114}
10115extern "system" fn dummy_pfnglnormalp3uivproc (_: GLenum, _: *const GLuint) {
10116	panic!("OpenGL function pointer `glNormalP3uiv()` is null.")
10117}
10118extern "system" fn dummy_pfnglcolorp3uiproc (_: GLenum, _: GLuint) {
10119	panic!("OpenGL function pointer `glColorP3ui()` is null.")
10120}
10121extern "system" fn dummy_pfnglcolorp3uivproc (_: GLenum, _: *const GLuint) {
10122	panic!("OpenGL function pointer `glColorP3uiv()` is null.")
10123}
10124extern "system" fn dummy_pfnglcolorp4uiproc (_: GLenum, _: GLuint) {
10125	panic!("OpenGL function pointer `glColorP4ui()` is null.")
10126}
10127extern "system" fn dummy_pfnglcolorp4uivproc (_: GLenum, _: *const GLuint) {
10128	panic!("OpenGL function pointer `glColorP4uiv()` is null.")
10129}
10130extern "system" fn dummy_pfnglsecondarycolorp3uiproc (_: GLenum, _: GLuint) {
10131	panic!("OpenGL function pointer `glSecondaryColorP3ui()` is null.")
10132}
10133extern "system" fn dummy_pfnglsecondarycolorp3uivproc (_: GLenum, _: *const GLuint) {
10134	panic!("OpenGL function pointer `glSecondaryColorP3uiv()` is null.")
10135}
10136pub const GL_VERTEX_ATTRIB_ARRAY_DIVISOR: GLenum = 0x88FE;
10137pub const GL_SRC1_COLOR: GLenum = 0x88F9;
10138pub const GL_ONE_MINUS_SRC1_COLOR: GLenum = 0x88FA;
10139pub const GL_ONE_MINUS_SRC1_ALPHA: GLenum = 0x88FB;
10140pub const GL_MAX_DUAL_SOURCE_DRAW_BUFFERS: GLenum = 0x88FC;
10141pub const GL_ANY_SAMPLES_PASSED: GLenum = 0x8C2F;
10142pub const GL_SAMPLER_BINDING: GLenum = 0x8919;
10143pub const GL_RGB10_A2UI: GLenum = 0x906F;
10144pub const GL_TEXTURE_SWIZZLE_R: GLenum = 0x8E42;
10145pub const GL_TEXTURE_SWIZZLE_G: GLenum = 0x8E43;
10146pub const GL_TEXTURE_SWIZZLE_B: GLenum = 0x8E44;
10147pub const GL_TEXTURE_SWIZZLE_A: GLenum = 0x8E45;
10148pub const GL_TEXTURE_SWIZZLE_RGBA: GLenum = 0x8E46;
10149pub const GL_TIME_ELAPSED: GLenum = 0x88BF;
10150pub const GL_TIMESTAMP: GLenum = 0x8E28;
10151pub const GL_INT_2_10_10_10_REV: GLenum = 0x8D9F;
10152
10153pub trait GL_3_3 {
10154	fn glGetError(&self) -> GLenum;
10155	fn glBindFragDataLocationIndexed(&self, program: GLuint, colorNumber: GLuint, index: GLuint, name: *const GLchar) -> Result<()>;
10156	fn glGetFragDataIndex(&self, program: GLuint, name: *const GLchar) -> Result<GLint>;
10157	fn glGenSamplers(&self, count: GLsizei, samplers: *mut GLuint) -> Result<()>;
10158	fn glDeleteSamplers(&self, count: GLsizei, samplers: *const GLuint) -> Result<()>;
10159	fn glIsSampler(&self, sampler: GLuint) -> Result<GLboolean>;
10160	fn glBindSampler(&self, unit: GLuint, sampler: GLuint) -> Result<()>;
10161	fn glSamplerParameteri(&self, sampler: GLuint, pname: GLenum, param: GLint) -> Result<()>;
10162	fn glSamplerParameteriv(&self, sampler: GLuint, pname: GLenum, param: *const GLint) -> Result<()>;
10163	fn glSamplerParameterf(&self, sampler: GLuint, pname: GLenum, param: GLfloat) -> Result<()>;
10164	fn glSamplerParameterfv(&self, sampler: GLuint, pname: GLenum, param: *const GLfloat) -> Result<()>;
10165	fn glSamplerParameterIiv(&self, sampler: GLuint, pname: GLenum, param: *const GLint) -> Result<()>;
10166	fn glSamplerParameterIuiv(&self, sampler: GLuint, pname: GLenum, param: *const GLuint) -> Result<()>;
10167	fn glGetSamplerParameteriv(&self, sampler: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
10168	fn glGetSamplerParameterIiv(&self, sampler: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
10169	fn glGetSamplerParameterfv(&self, sampler: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()>;
10170	fn glGetSamplerParameterIuiv(&self, sampler: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()>;
10171	fn glQueryCounter(&self, id: GLuint, target: GLenum) -> Result<()>;
10172	fn glGetQueryObjecti64v(&self, id: GLuint, pname: GLenum, params: *mut GLint64) -> Result<()>;
10173	fn glGetQueryObjectui64v(&self, id: GLuint, pname: GLenum, params: *mut GLuint64) -> Result<()>;
10174	fn glVertexAttribDivisor(&self, index: GLuint, divisor: GLuint) -> Result<()>;
10175	fn glVertexAttribP1ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()>;
10176	fn glVertexAttribP1uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()>;
10177	fn glVertexAttribP2ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()>;
10178	fn glVertexAttribP2uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()>;
10179	fn glVertexAttribP3ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()>;
10180	fn glVertexAttribP3uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()>;
10181	fn glVertexAttribP4ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()>;
10182	fn glVertexAttribP4uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()>;
10183	fn glVertexP2ui(&self, type_: GLenum, value: GLuint) -> Result<()>;
10184	fn glVertexP2uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()>;
10185	fn glVertexP3ui(&self, type_: GLenum, value: GLuint) -> Result<()>;
10186	fn glVertexP3uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()>;
10187	fn glVertexP4ui(&self, type_: GLenum, value: GLuint) -> Result<()>;
10188	fn glVertexP4uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()>;
10189	fn glTexCoordP1ui(&self, type_: GLenum, coords: GLuint) -> Result<()>;
10190	fn glTexCoordP1uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()>;
10191	fn glTexCoordP2ui(&self, type_: GLenum, coords: GLuint) -> Result<()>;
10192	fn glTexCoordP2uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()>;
10193	fn glTexCoordP3ui(&self, type_: GLenum, coords: GLuint) -> Result<()>;
10194	fn glTexCoordP3uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()>;
10195	fn glTexCoordP4ui(&self, type_: GLenum, coords: GLuint) -> Result<()>;
10196	fn glTexCoordP4uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()>;
10197	fn glMultiTexCoordP1ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()>;
10198	fn glMultiTexCoordP1uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()>;
10199	fn glMultiTexCoordP2ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()>;
10200	fn glMultiTexCoordP2uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()>;
10201	fn glMultiTexCoordP3ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()>;
10202	fn glMultiTexCoordP3uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()>;
10203	fn glMultiTexCoordP4ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()>;
10204	fn glMultiTexCoordP4uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()>;
10205	fn glNormalP3ui(&self, type_: GLenum, coords: GLuint) -> Result<()>;
10206	fn glNormalP3uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()>;
10207	fn glColorP3ui(&self, type_: GLenum, color: GLuint) -> Result<()>;
10208	fn glColorP3uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()>;
10209	fn glColorP4ui(&self, type_: GLenum, color: GLuint) -> Result<()>;
10210	fn glColorP4uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()>;
10211	fn glSecondaryColorP3ui(&self, type_: GLenum, color: GLuint) -> Result<()>;
10212	fn glSecondaryColorP3uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()>;
10213}
10214
10215#[derive(Clone, Copy, PartialEq, Eq, Hash)]
10216pub struct Version33 {
10217	available: bool,
10218	geterror: PFNGLGETERRORPROC,
10219	bindfragdatalocationindexed: PFNGLBINDFRAGDATALOCATIONINDEXEDPROC,
10220	getfragdataindex: PFNGLGETFRAGDATAINDEXPROC,
10221	gensamplers: PFNGLGENSAMPLERSPROC,
10222	deletesamplers: PFNGLDELETESAMPLERSPROC,
10223	issampler: PFNGLISSAMPLERPROC,
10224	bindsampler: PFNGLBINDSAMPLERPROC,
10225	samplerparameteri: PFNGLSAMPLERPARAMETERIPROC,
10226	samplerparameteriv: PFNGLSAMPLERPARAMETERIVPROC,
10227	samplerparameterf: PFNGLSAMPLERPARAMETERFPROC,
10228	samplerparameterfv: PFNGLSAMPLERPARAMETERFVPROC,
10229	samplerparameteriiv: PFNGLSAMPLERPARAMETERIIVPROC,
10230	samplerparameteriuiv: PFNGLSAMPLERPARAMETERIUIVPROC,
10231	getsamplerparameteriv: PFNGLGETSAMPLERPARAMETERIVPROC,
10232	getsamplerparameteriiv: PFNGLGETSAMPLERPARAMETERIIVPROC,
10233	getsamplerparameterfv: PFNGLGETSAMPLERPARAMETERFVPROC,
10234	getsamplerparameteriuiv: PFNGLGETSAMPLERPARAMETERIUIVPROC,
10235	querycounter: PFNGLQUERYCOUNTERPROC,
10236	getqueryobjecti64v: PFNGLGETQUERYOBJECTI64VPROC,
10237	getqueryobjectui64v: PFNGLGETQUERYOBJECTUI64VPROC,
10238	vertexattribdivisor: PFNGLVERTEXATTRIBDIVISORPROC,
10239	vertexattribp1ui: PFNGLVERTEXATTRIBP1UIPROC,
10240	vertexattribp1uiv: PFNGLVERTEXATTRIBP1UIVPROC,
10241	vertexattribp2ui: PFNGLVERTEXATTRIBP2UIPROC,
10242	vertexattribp2uiv: PFNGLVERTEXATTRIBP2UIVPROC,
10243	vertexattribp3ui: PFNGLVERTEXATTRIBP3UIPROC,
10244	vertexattribp3uiv: PFNGLVERTEXATTRIBP3UIVPROC,
10245	vertexattribp4ui: PFNGLVERTEXATTRIBP4UIPROC,
10246	vertexattribp4uiv: PFNGLVERTEXATTRIBP4UIVPROC,
10247	vertexp2ui: PFNGLVERTEXP2UIPROC,
10248	vertexp2uiv: PFNGLVERTEXP2UIVPROC,
10249	vertexp3ui: PFNGLVERTEXP3UIPROC,
10250	vertexp3uiv: PFNGLVERTEXP3UIVPROC,
10251	vertexp4ui: PFNGLVERTEXP4UIPROC,
10252	vertexp4uiv: PFNGLVERTEXP4UIVPROC,
10253	texcoordp1ui: PFNGLTEXCOORDP1UIPROC,
10254	texcoordp1uiv: PFNGLTEXCOORDP1UIVPROC,
10255	texcoordp2ui: PFNGLTEXCOORDP2UIPROC,
10256	texcoordp2uiv: PFNGLTEXCOORDP2UIVPROC,
10257	texcoordp3ui: PFNGLTEXCOORDP3UIPROC,
10258	texcoordp3uiv: PFNGLTEXCOORDP3UIVPROC,
10259	texcoordp4ui: PFNGLTEXCOORDP4UIPROC,
10260	texcoordp4uiv: PFNGLTEXCOORDP4UIVPROC,
10261	multitexcoordp1ui: PFNGLMULTITEXCOORDP1UIPROC,
10262	multitexcoordp1uiv: PFNGLMULTITEXCOORDP1UIVPROC,
10263	multitexcoordp2ui: PFNGLMULTITEXCOORDP2UIPROC,
10264	multitexcoordp2uiv: PFNGLMULTITEXCOORDP2UIVPROC,
10265	multitexcoordp3ui: PFNGLMULTITEXCOORDP3UIPROC,
10266	multitexcoordp3uiv: PFNGLMULTITEXCOORDP3UIVPROC,
10267	multitexcoordp4ui: PFNGLMULTITEXCOORDP4UIPROC,
10268	multitexcoordp4uiv: PFNGLMULTITEXCOORDP4UIVPROC,
10269	normalp3ui: PFNGLNORMALP3UIPROC,
10270	normalp3uiv: PFNGLNORMALP3UIVPROC,
10271	colorp3ui: PFNGLCOLORP3UIPROC,
10272	colorp3uiv: PFNGLCOLORP3UIVPROC,
10273	colorp4ui: PFNGLCOLORP4UIPROC,
10274	colorp4uiv: PFNGLCOLORP4UIVPROC,
10275	secondarycolorp3ui: PFNGLSECONDARYCOLORP3UIPROC,
10276	secondarycolorp3uiv: PFNGLSECONDARYCOLORP3UIVPROC,
10277}
10278
10279impl GL_3_3 for Version33 {
10280	#[inline(always)]
10281	fn glGetError(&self) -> GLenum {
10282		(self.geterror)()
10283	}
10284	#[inline(always)]
10285	fn glBindFragDataLocationIndexed(&self, program: GLuint, colorNumber: GLuint, index: GLuint, name: *const GLchar) -> Result<()> {
10286		let ret = process_catch("glBindFragDataLocationIndexed", catch_unwind(||(self.bindfragdatalocationindexed)(program, colorNumber, index, name)));
10287		#[cfg(feature = "diagnose")]
10288		if let Ok(ret) = ret {
10289			return to_result("glBindFragDataLocationIndexed", ret, self.glGetError());
10290		} else {
10291			return ret
10292		}
10293		#[cfg(not(feature = "diagnose"))]
10294		return ret;
10295	}
10296	#[inline(always)]
10297	fn glGetFragDataIndex(&self, program: GLuint, name: *const GLchar) -> Result<GLint> {
10298		let ret = process_catch("glGetFragDataIndex", catch_unwind(||(self.getfragdataindex)(program, name)));
10299		#[cfg(feature = "diagnose")]
10300		if let Ok(ret) = ret {
10301			return to_result("glGetFragDataIndex", ret, self.glGetError());
10302		} else {
10303			return ret
10304		}
10305		#[cfg(not(feature = "diagnose"))]
10306		return ret;
10307	}
10308	#[inline(always)]
10309	fn glGenSamplers(&self, count: GLsizei, samplers: *mut GLuint) -> Result<()> {
10310		let ret = process_catch("glGenSamplers", catch_unwind(||(self.gensamplers)(count, samplers)));
10311		#[cfg(feature = "diagnose")]
10312		if let Ok(ret) = ret {
10313			return to_result("glGenSamplers", ret, self.glGetError());
10314		} else {
10315			return ret
10316		}
10317		#[cfg(not(feature = "diagnose"))]
10318		return ret;
10319	}
10320	#[inline(always)]
10321	fn glDeleteSamplers(&self, count: GLsizei, samplers: *const GLuint) -> Result<()> {
10322		let ret = process_catch("glDeleteSamplers", catch_unwind(||(self.deletesamplers)(count, samplers)));
10323		#[cfg(feature = "diagnose")]
10324		if let Ok(ret) = ret {
10325			return to_result("glDeleteSamplers", ret, self.glGetError());
10326		} else {
10327			return ret
10328		}
10329		#[cfg(not(feature = "diagnose"))]
10330		return ret;
10331	}
10332	#[inline(always)]
10333	fn glIsSampler(&self, sampler: GLuint) -> Result<GLboolean> {
10334		let ret = process_catch("glIsSampler", catch_unwind(||(self.issampler)(sampler)));
10335		#[cfg(feature = "diagnose")]
10336		if let Ok(ret) = ret {
10337			return to_result("glIsSampler", ret, self.glGetError());
10338		} else {
10339			return ret
10340		}
10341		#[cfg(not(feature = "diagnose"))]
10342		return ret;
10343	}
10344	#[inline(always)]
10345	fn glBindSampler(&self, unit: GLuint, sampler: GLuint) -> Result<()> {
10346		let ret = process_catch("glBindSampler", catch_unwind(||(self.bindsampler)(unit, sampler)));
10347		#[cfg(feature = "diagnose")]
10348		if let Ok(ret) = ret {
10349			return to_result("glBindSampler", ret, self.glGetError());
10350		} else {
10351			return ret
10352		}
10353		#[cfg(not(feature = "diagnose"))]
10354		return ret;
10355	}
10356	#[inline(always)]
10357	fn glSamplerParameteri(&self, sampler: GLuint, pname: GLenum, param: GLint) -> Result<()> {
10358		let ret = process_catch("glSamplerParameteri", catch_unwind(||(self.samplerparameteri)(sampler, pname, param)));
10359		#[cfg(feature = "diagnose")]
10360		if let Ok(ret) = ret {
10361			return to_result("glSamplerParameteri", ret, self.glGetError());
10362		} else {
10363			return ret
10364		}
10365		#[cfg(not(feature = "diagnose"))]
10366		return ret;
10367	}
10368	#[inline(always)]
10369	fn glSamplerParameteriv(&self, sampler: GLuint, pname: GLenum, param: *const GLint) -> Result<()> {
10370		let ret = process_catch("glSamplerParameteriv", catch_unwind(||(self.samplerparameteriv)(sampler, pname, param)));
10371		#[cfg(feature = "diagnose")]
10372		if let Ok(ret) = ret {
10373			return to_result("glSamplerParameteriv", ret, self.glGetError());
10374		} else {
10375			return ret
10376		}
10377		#[cfg(not(feature = "diagnose"))]
10378		return ret;
10379	}
10380	#[inline(always)]
10381	fn glSamplerParameterf(&self, sampler: GLuint, pname: GLenum, param: GLfloat) -> Result<()> {
10382		let ret = process_catch("glSamplerParameterf", catch_unwind(||(self.samplerparameterf)(sampler, pname, param)));
10383		#[cfg(feature = "diagnose")]
10384		if let Ok(ret) = ret {
10385			return to_result("glSamplerParameterf", ret, self.glGetError());
10386		} else {
10387			return ret
10388		}
10389		#[cfg(not(feature = "diagnose"))]
10390		return ret;
10391	}
10392	#[inline(always)]
10393	fn glSamplerParameterfv(&self, sampler: GLuint, pname: GLenum, param: *const GLfloat) -> Result<()> {
10394		let ret = process_catch("glSamplerParameterfv", catch_unwind(||(self.samplerparameterfv)(sampler, pname, param)));
10395		#[cfg(feature = "diagnose")]
10396		if let Ok(ret) = ret {
10397			return to_result("glSamplerParameterfv", ret, self.glGetError());
10398		} else {
10399			return ret
10400		}
10401		#[cfg(not(feature = "diagnose"))]
10402		return ret;
10403	}
10404	#[inline(always)]
10405	fn glSamplerParameterIiv(&self, sampler: GLuint, pname: GLenum, param: *const GLint) -> Result<()> {
10406		let ret = process_catch("glSamplerParameterIiv", catch_unwind(||(self.samplerparameteriiv)(sampler, pname, param)));
10407		#[cfg(feature = "diagnose")]
10408		if let Ok(ret) = ret {
10409			return to_result("glSamplerParameterIiv", ret, self.glGetError());
10410		} else {
10411			return ret
10412		}
10413		#[cfg(not(feature = "diagnose"))]
10414		return ret;
10415	}
10416	#[inline(always)]
10417	fn glSamplerParameterIuiv(&self, sampler: GLuint, pname: GLenum, param: *const GLuint) -> Result<()> {
10418		let ret = process_catch("glSamplerParameterIuiv", catch_unwind(||(self.samplerparameteriuiv)(sampler, pname, param)));
10419		#[cfg(feature = "diagnose")]
10420		if let Ok(ret) = ret {
10421			return to_result("glSamplerParameterIuiv", ret, self.glGetError());
10422		} else {
10423			return ret
10424		}
10425		#[cfg(not(feature = "diagnose"))]
10426		return ret;
10427	}
10428	#[inline(always)]
10429	fn glGetSamplerParameteriv(&self, sampler: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
10430		let ret = process_catch("glGetSamplerParameteriv", catch_unwind(||(self.getsamplerparameteriv)(sampler, pname, params)));
10431		#[cfg(feature = "diagnose")]
10432		if let Ok(ret) = ret {
10433			return to_result("glGetSamplerParameteriv", ret, self.glGetError());
10434		} else {
10435			return ret
10436		}
10437		#[cfg(not(feature = "diagnose"))]
10438		return ret;
10439	}
10440	#[inline(always)]
10441	fn glGetSamplerParameterIiv(&self, sampler: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
10442		let ret = process_catch("glGetSamplerParameterIiv", catch_unwind(||(self.getsamplerparameteriiv)(sampler, pname, params)));
10443		#[cfg(feature = "diagnose")]
10444		if let Ok(ret) = ret {
10445			return to_result("glGetSamplerParameterIiv", ret, self.glGetError());
10446		} else {
10447			return ret
10448		}
10449		#[cfg(not(feature = "diagnose"))]
10450		return ret;
10451	}
10452	#[inline(always)]
10453	fn glGetSamplerParameterfv(&self, sampler: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
10454		let ret = process_catch("glGetSamplerParameterfv", catch_unwind(||(self.getsamplerparameterfv)(sampler, pname, params)));
10455		#[cfg(feature = "diagnose")]
10456		if let Ok(ret) = ret {
10457			return to_result("glGetSamplerParameterfv", ret, self.glGetError());
10458		} else {
10459			return ret
10460		}
10461		#[cfg(not(feature = "diagnose"))]
10462		return ret;
10463	}
10464	#[inline(always)]
10465	fn glGetSamplerParameterIuiv(&self, sampler: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()> {
10466		let ret = process_catch("glGetSamplerParameterIuiv", catch_unwind(||(self.getsamplerparameteriuiv)(sampler, pname, params)));
10467		#[cfg(feature = "diagnose")]
10468		if let Ok(ret) = ret {
10469			return to_result("glGetSamplerParameterIuiv", ret, self.glGetError());
10470		} else {
10471			return ret
10472		}
10473		#[cfg(not(feature = "diagnose"))]
10474		return ret;
10475	}
10476	#[inline(always)]
10477	fn glQueryCounter(&self, id: GLuint, target: GLenum) -> Result<()> {
10478		let ret = process_catch("glQueryCounter", catch_unwind(||(self.querycounter)(id, target)));
10479		#[cfg(feature = "diagnose")]
10480		if let Ok(ret) = ret {
10481			return to_result("glQueryCounter", ret, self.glGetError());
10482		} else {
10483			return ret
10484		}
10485		#[cfg(not(feature = "diagnose"))]
10486		return ret;
10487	}
10488	#[inline(always)]
10489	fn glGetQueryObjecti64v(&self, id: GLuint, pname: GLenum, params: *mut GLint64) -> Result<()> {
10490		let ret = process_catch("glGetQueryObjecti64v", catch_unwind(||(self.getqueryobjecti64v)(id, pname, params)));
10491		#[cfg(feature = "diagnose")]
10492		if let Ok(ret) = ret {
10493			return to_result("glGetQueryObjecti64v", ret, self.glGetError());
10494		} else {
10495			return ret
10496		}
10497		#[cfg(not(feature = "diagnose"))]
10498		return ret;
10499	}
10500	#[inline(always)]
10501	fn glGetQueryObjectui64v(&self, id: GLuint, pname: GLenum, params: *mut GLuint64) -> Result<()> {
10502		let ret = process_catch("glGetQueryObjectui64v", catch_unwind(||(self.getqueryobjectui64v)(id, pname, params)));
10503		#[cfg(feature = "diagnose")]
10504		if let Ok(ret) = ret {
10505			return to_result("glGetQueryObjectui64v", ret, self.glGetError());
10506		} else {
10507			return ret
10508		}
10509		#[cfg(not(feature = "diagnose"))]
10510		return ret;
10511	}
10512	#[inline(always)]
10513	fn glVertexAttribDivisor(&self, index: GLuint, divisor: GLuint) -> Result<()> {
10514		let ret = process_catch("glVertexAttribDivisor", catch_unwind(||(self.vertexattribdivisor)(index, divisor)));
10515		#[cfg(feature = "diagnose")]
10516		if let Ok(ret) = ret {
10517			return to_result("glVertexAttribDivisor", ret, self.glGetError());
10518		} else {
10519			return ret
10520		}
10521		#[cfg(not(feature = "diagnose"))]
10522		return ret;
10523	}
10524	#[inline(always)]
10525	fn glVertexAttribP1ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()> {
10526		let ret = process_catch("glVertexAttribP1ui", catch_unwind(||(self.vertexattribp1ui)(index, type_, normalized, value)));
10527		#[cfg(feature = "diagnose")]
10528		if let Ok(ret) = ret {
10529			return to_result("glVertexAttribP1ui", ret, self.glGetError());
10530		} else {
10531			return ret
10532		}
10533		#[cfg(not(feature = "diagnose"))]
10534		return ret;
10535	}
10536	#[inline(always)]
10537	fn glVertexAttribP1uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()> {
10538		let ret = process_catch("glVertexAttribP1uiv", catch_unwind(||(self.vertexattribp1uiv)(index, type_, normalized, value)));
10539		#[cfg(feature = "diagnose")]
10540		if let Ok(ret) = ret {
10541			return to_result("glVertexAttribP1uiv", ret, self.glGetError());
10542		} else {
10543			return ret
10544		}
10545		#[cfg(not(feature = "diagnose"))]
10546		return ret;
10547	}
10548	#[inline(always)]
10549	fn glVertexAttribP2ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()> {
10550		let ret = process_catch("glVertexAttribP2ui", catch_unwind(||(self.vertexattribp2ui)(index, type_, normalized, value)));
10551		#[cfg(feature = "diagnose")]
10552		if let Ok(ret) = ret {
10553			return to_result("glVertexAttribP2ui", ret, self.glGetError());
10554		} else {
10555			return ret
10556		}
10557		#[cfg(not(feature = "diagnose"))]
10558		return ret;
10559	}
10560	#[inline(always)]
10561	fn glVertexAttribP2uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()> {
10562		let ret = process_catch("glVertexAttribP2uiv", catch_unwind(||(self.vertexattribp2uiv)(index, type_, normalized, value)));
10563		#[cfg(feature = "diagnose")]
10564		if let Ok(ret) = ret {
10565			return to_result("glVertexAttribP2uiv", ret, self.glGetError());
10566		} else {
10567			return ret
10568		}
10569		#[cfg(not(feature = "diagnose"))]
10570		return ret;
10571	}
10572	#[inline(always)]
10573	fn glVertexAttribP3ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()> {
10574		let ret = process_catch("glVertexAttribP3ui", catch_unwind(||(self.vertexattribp3ui)(index, type_, normalized, value)));
10575		#[cfg(feature = "diagnose")]
10576		if let Ok(ret) = ret {
10577			return to_result("glVertexAttribP3ui", ret, self.glGetError());
10578		} else {
10579			return ret
10580		}
10581		#[cfg(not(feature = "diagnose"))]
10582		return ret;
10583	}
10584	#[inline(always)]
10585	fn glVertexAttribP3uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()> {
10586		let ret = process_catch("glVertexAttribP3uiv", catch_unwind(||(self.vertexattribp3uiv)(index, type_, normalized, value)));
10587		#[cfg(feature = "diagnose")]
10588		if let Ok(ret) = ret {
10589			return to_result("glVertexAttribP3uiv", ret, self.glGetError());
10590		} else {
10591			return ret
10592		}
10593		#[cfg(not(feature = "diagnose"))]
10594		return ret;
10595	}
10596	#[inline(always)]
10597	fn glVertexAttribP4ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()> {
10598		let ret = process_catch("glVertexAttribP4ui", catch_unwind(||(self.vertexattribp4ui)(index, type_, normalized, value)));
10599		#[cfg(feature = "diagnose")]
10600		if let Ok(ret) = ret {
10601			return to_result("glVertexAttribP4ui", ret, self.glGetError());
10602		} else {
10603			return ret
10604		}
10605		#[cfg(not(feature = "diagnose"))]
10606		return ret;
10607	}
10608	#[inline(always)]
10609	fn glVertexAttribP4uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()> {
10610		let ret = process_catch("glVertexAttribP4uiv", catch_unwind(||(self.vertexattribp4uiv)(index, type_, normalized, value)));
10611		#[cfg(feature = "diagnose")]
10612		if let Ok(ret) = ret {
10613			return to_result("glVertexAttribP4uiv", ret, self.glGetError());
10614		} else {
10615			return ret
10616		}
10617		#[cfg(not(feature = "diagnose"))]
10618		return ret;
10619	}
10620	#[inline(always)]
10621	fn glVertexP2ui(&self, type_: GLenum, value: GLuint) -> Result<()> {
10622		let ret = process_catch("glVertexP2ui", catch_unwind(||(self.vertexp2ui)(type_, value)));
10623		#[cfg(feature = "diagnose")]
10624		if let Ok(ret) = ret {
10625			return to_result("glVertexP2ui", ret, self.glGetError());
10626		} else {
10627			return ret
10628		}
10629		#[cfg(not(feature = "diagnose"))]
10630		return ret;
10631	}
10632	#[inline(always)]
10633	fn glVertexP2uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()> {
10634		let ret = process_catch("glVertexP2uiv", catch_unwind(||(self.vertexp2uiv)(type_, value)));
10635		#[cfg(feature = "diagnose")]
10636		if let Ok(ret) = ret {
10637			return to_result("glVertexP2uiv", ret, self.glGetError());
10638		} else {
10639			return ret
10640		}
10641		#[cfg(not(feature = "diagnose"))]
10642		return ret;
10643	}
10644	#[inline(always)]
10645	fn glVertexP3ui(&self, type_: GLenum, value: GLuint) -> Result<()> {
10646		let ret = process_catch("glVertexP3ui", catch_unwind(||(self.vertexp3ui)(type_, value)));
10647		#[cfg(feature = "diagnose")]
10648		if let Ok(ret) = ret {
10649			return to_result("glVertexP3ui", ret, self.glGetError());
10650		} else {
10651			return ret
10652		}
10653		#[cfg(not(feature = "diagnose"))]
10654		return ret;
10655	}
10656	#[inline(always)]
10657	fn glVertexP3uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()> {
10658		let ret = process_catch("glVertexP3uiv", catch_unwind(||(self.vertexp3uiv)(type_, value)));
10659		#[cfg(feature = "diagnose")]
10660		if let Ok(ret) = ret {
10661			return to_result("glVertexP3uiv", ret, self.glGetError());
10662		} else {
10663			return ret
10664		}
10665		#[cfg(not(feature = "diagnose"))]
10666		return ret;
10667	}
10668	#[inline(always)]
10669	fn glVertexP4ui(&self, type_: GLenum, value: GLuint) -> Result<()> {
10670		let ret = process_catch("glVertexP4ui", catch_unwind(||(self.vertexp4ui)(type_, value)));
10671		#[cfg(feature = "diagnose")]
10672		if let Ok(ret) = ret {
10673			return to_result("glVertexP4ui", ret, self.glGetError());
10674		} else {
10675			return ret
10676		}
10677		#[cfg(not(feature = "diagnose"))]
10678		return ret;
10679	}
10680	#[inline(always)]
10681	fn glVertexP4uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()> {
10682		let ret = process_catch("glVertexP4uiv", catch_unwind(||(self.vertexp4uiv)(type_, value)));
10683		#[cfg(feature = "diagnose")]
10684		if let Ok(ret) = ret {
10685			return to_result("glVertexP4uiv", ret, self.glGetError());
10686		} else {
10687			return ret
10688		}
10689		#[cfg(not(feature = "diagnose"))]
10690		return ret;
10691	}
10692	#[inline(always)]
10693	fn glTexCoordP1ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
10694		let ret = process_catch("glTexCoordP1ui", catch_unwind(||(self.texcoordp1ui)(type_, coords)));
10695		#[cfg(feature = "diagnose")]
10696		if let Ok(ret) = ret {
10697			return to_result("glTexCoordP1ui", ret, self.glGetError());
10698		} else {
10699			return ret
10700		}
10701		#[cfg(not(feature = "diagnose"))]
10702		return ret;
10703	}
10704	#[inline(always)]
10705	fn glTexCoordP1uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
10706		let ret = process_catch("glTexCoordP1uiv", catch_unwind(||(self.texcoordp1uiv)(type_, coords)));
10707		#[cfg(feature = "diagnose")]
10708		if let Ok(ret) = ret {
10709			return to_result("glTexCoordP1uiv", ret, self.glGetError());
10710		} else {
10711			return ret
10712		}
10713		#[cfg(not(feature = "diagnose"))]
10714		return ret;
10715	}
10716	#[inline(always)]
10717	fn glTexCoordP2ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
10718		let ret = process_catch("glTexCoordP2ui", catch_unwind(||(self.texcoordp2ui)(type_, coords)));
10719		#[cfg(feature = "diagnose")]
10720		if let Ok(ret) = ret {
10721			return to_result("glTexCoordP2ui", ret, self.glGetError());
10722		} else {
10723			return ret
10724		}
10725		#[cfg(not(feature = "diagnose"))]
10726		return ret;
10727	}
10728	#[inline(always)]
10729	fn glTexCoordP2uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
10730		let ret = process_catch("glTexCoordP2uiv", catch_unwind(||(self.texcoordp2uiv)(type_, coords)));
10731		#[cfg(feature = "diagnose")]
10732		if let Ok(ret) = ret {
10733			return to_result("glTexCoordP2uiv", ret, self.glGetError());
10734		} else {
10735			return ret
10736		}
10737		#[cfg(not(feature = "diagnose"))]
10738		return ret;
10739	}
10740	#[inline(always)]
10741	fn glTexCoordP3ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
10742		let ret = process_catch("glTexCoordP3ui", catch_unwind(||(self.texcoordp3ui)(type_, coords)));
10743		#[cfg(feature = "diagnose")]
10744		if let Ok(ret) = ret {
10745			return to_result("glTexCoordP3ui", ret, self.glGetError());
10746		} else {
10747			return ret
10748		}
10749		#[cfg(not(feature = "diagnose"))]
10750		return ret;
10751	}
10752	#[inline(always)]
10753	fn glTexCoordP3uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
10754		let ret = process_catch("glTexCoordP3uiv", catch_unwind(||(self.texcoordp3uiv)(type_, coords)));
10755		#[cfg(feature = "diagnose")]
10756		if let Ok(ret) = ret {
10757			return to_result("glTexCoordP3uiv", ret, self.glGetError());
10758		} else {
10759			return ret
10760		}
10761		#[cfg(not(feature = "diagnose"))]
10762		return ret;
10763	}
10764	#[inline(always)]
10765	fn glTexCoordP4ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
10766		let ret = process_catch("glTexCoordP4ui", catch_unwind(||(self.texcoordp4ui)(type_, coords)));
10767		#[cfg(feature = "diagnose")]
10768		if let Ok(ret) = ret {
10769			return to_result("glTexCoordP4ui", ret, self.glGetError());
10770		} else {
10771			return ret
10772		}
10773		#[cfg(not(feature = "diagnose"))]
10774		return ret;
10775	}
10776	#[inline(always)]
10777	fn glTexCoordP4uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
10778		let ret = process_catch("glTexCoordP4uiv", catch_unwind(||(self.texcoordp4uiv)(type_, coords)));
10779		#[cfg(feature = "diagnose")]
10780		if let Ok(ret) = ret {
10781			return to_result("glTexCoordP4uiv", ret, self.glGetError());
10782		} else {
10783			return ret
10784		}
10785		#[cfg(not(feature = "diagnose"))]
10786		return ret;
10787	}
10788	#[inline(always)]
10789	fn glMultiTexCoordP1ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()> {
10790		let ret = process_catch("glMultiTexCoordP1ui", catch_unwind(||(self.multitexcoordp1ui)(texture, type_, coords)));
10791		#[cfg(feature = "diagnose")]
10792		if let Ok(ret) = ret {
10793			return to_result("glMultiTexCoordP1ui", ret, self.glGetError());
10794		} else {
10795			return ret
10796		}
10797		#[cfg(not(feature = "diagnose"))]
10798		return ret;
10799	}
10800	#[inline(always)]
10801	fn glMultiTexCoordP1uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()> {
10802		let ret = process_catch("glMultiTexCoordP1uiv", catch_unwind(||(self.multitexcoordp1uiv)(texture, type_, coords)));
10803		#[cfg(feature = "diagnose")]
10804		if let Ok(ret) = ret {
10805			return to_result("glMultiTexCoordP1uiv", ret, self.glGetError());
10806		} else {
10807			return ret
10808		}
10809		#[cfg(not(feature = "diagnose"))]
10810		return ret;
10811	}
10812	#[inline(always)]
10813	fn glMultiTexCoordP2ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()> {
10814		let ret = process_catch("glMultiTexCoordP2ui", catch_unwind(||(self.multitexcoordp2ui)(texture, type_, coords)));
10815		#[cfg(feature = "diagnose")]
10816		if let Ok(ret) = ret {
10817			return to_result("glMultiTexCoordP2ui", ret, self.glGetError());
10818		} else {
10819			return ret
10820		}
10821		#[cfg(not(feature = "diagnose"))]
10822		return ret;
10823	}
10824	#[inline(always)]
10825	fn glMultiTexCoordP2uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()> {
10826		let ret = process_catch("glMultiTexCoordP2uiv", catch_unwind(||(self.multitexcoordp2uiv)(texture, type_, coords)));
10827		#[cfg(feature = "diagnose")]
10828		if let Ok(ret) = ret {
10829			return to_result("glMultiTexCoordP2uiv", ret, self.glGetError());
10830		} else {
10831			return ret
10832		}
10833		#[cfg(not(feature = "diagnose"))]
10834		return ret;
10835	}
10836	#[inline(always)]
10837	fn glMultiTexCoordP3ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()> {
10838		let ret = process_catch("glMultiTexCoordP3ui", catch_unwind(||(self.multitexcoordp3ui)(texture, type_, coords)));
10839		#[cfg(feature = "diagnose")]
10840		if let Ok(ret) = ret {
10841			return to_result("glMultiTexCoordP3ui", ret, self.glGetError());
10842		} else {
10843			return ret
10844		}
10845		#[cfg(not(feature = "diagnose"))]
10846		return ret;
10847	}
10848	#[inline(always)]
10849	fn glMultiTexCoordP3uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()> {
10850		let ret = process_catch("glMultiTexCoordP3uiv", catch_unwind(||(self.multitexcoordp3uiv)(texture, type_, coords)));
10851		#[cfg(feature = "diagnose")]
10852		if let Ok(ret) = ret {
10853			return to_result("glMultiTexCoordP3uiv", ret, self.glGetError());
10854		} else {
10855			return ret
10856		}
10857		#[cfg(not(feature = "diagnose"))]
10858		return ret;
10859	}
10860	#[inline(always)]
10861	fn glMultiTexCoordP4ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()> {
10862		let ret = process_catch("glMultiTexCoordP4ui", catch_unwind(||(self.multitexcoordp4ui)(texture, type_, coords)));
10863		#[cfg(feature = "diagnose")]
10864		if let Ok(ret) = ret {
10865			return to_result("glMultiTexCoordP4ui", ret, self.glGetError());
10866		} else {
10867			return ret
10868		}
10869		#[cfg(not(feature = "diagnose"))]
10870		return ret;
10871	}
10872	#[inline(always)]
10873	fn glMultiTexCoordP4uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()> {
10874		let ret = process_catch("glMultiTexCoordP4uiv", catch_unwind(||(self.multitexcoordp4uiv)(texture, type_, coords)));
10875		#[cfg(feature = "diagnose")]
10876		if let Ok(ret) = ret {
10877			return to_result("glMultiTexCoordP4uiv", ret, self.glGetError());
10878		} else {
10879			return ret
10880		}
10881		#[cfg(not(feature = "diagnose"))]
10882		return ret;
10883	}
10884	#[inline(always)]
10885	fn glNormalP3ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
10886		let ret = process_catch("glNormalP3ui", catch_unwind(||(self.normalp3ui)(type_, coords)));
10887		#[cfg(feature = "diagnose")]
10888		if let Ok(ret) = ret {
10889			return to_result("glNormalP3ui", ret, self.glGetError());
10890		} else {
10891			return ret
10892		}
10893		#[cfg(not(feature = "diagnose"))]
10894		return ret;
10895	}
10896	#[inline(always)]
10897	fn glNormalP3uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
10898		let ret = process_catch("glNormalP3uiv", catch_unwind(||(self.normalp3uiv)(type_, coords)));
10899		#[cfg(feature = "diagnose")]
10900		if let Ok(ret) = ret {
10901			return to_result("glNormalP3uiv", ret, self.glGetError());
10902		} else {
10903			return ret
10904		}
10905		#[cfg(not(feature = "diagnose"))]
10906		return ret;
10907	}
10908	#[inline(always)]
10909	fn glColorP3ui(&self, type_: GLenum, color: GLuint) -> Result<()> {
10910		let ret = process_catch("glColorP3ui", catch_unwind(||(self.colorp3ui)(type_, color)));
10911		#[cfg(feature = "diagnose")]
10912		if let Ok(ret) = ret {
10913			return to_result("glColorP3ui", ret, self.glGetError());
10914		} else {
10915			return ret
10916		}
10917		#[cfg(not(feature = "diagnose"))]
10918		return ret;
10919	}
10920	#[inline(always)]
10921	fn glColorP3uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()> {
10922		let ret = process_catch("glColorP3uiv", catch_unwind(||(self.colorp3uiv)(type_, color)));
10923		#[cfg(feature = "diagnose")]
10924		if let Ok(ret) = ret {
10925			return to_result("glColorP3uiv", ret, self.glGetError());
10926		} else {
10927			return ret
10928		}
10929		#[cfg(not(feature = "diagnose"))]
10930		return ret;
10931	}
10932	#[inline(always)]
10933	fn glColorP4ui(&self, type_: GLenum, color: GLuint) -> Result<()> {
10934		let ret = process_catch("glColorP4ui", catch_unwind(||(self.colorp4ui)(type_, color)));
10935		#[cfg(feature = "diagnose")]
10936		if let Ok(ret) = ret {
10937			return to_result("glColorP4ui", ret, self.glGetError());
10938		} else {
10939			return ret
10940		}
10941		#[cfg(not(feature = "diagnose"))]
10942		return ret;
10943	}
10944	#[inline(always)]
10945	fn glColorP4uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()> {
10946		let ret = process_catch("glColorP4uiv", catch_unwind(||(self.colorp4uiv)(type_, color)));
10947		#[cfg(feature = "diagnose")]
10948		if let Ok(ret) = ret {
10949			return to_result("glColorP4uiv", ret, self.glGetError());
10950		} else {
10951			return ret
10952		}
10953		#[cfg(not(feature = "diagnose"))]
10954		return ret;
10955	}
10956	#[inline(always)]
10957	fn glSecondaryColorP3ui(&self, type_: GLenum, color: GLuint) -> Result<()> {
10958		let ret = process_catch("glSecondaryColorP3ui", catch_unwind(||(self.secondarycolorp3ui)(type_, color)));
10959		#[cfg(feature = "diagnose")]
10960		if let Ok(ret) = ret {
10961			return to_result("glSecondaryColorP3ui", ret, self.glGetError());
10962		} else {
10963			return ret
10964		}
10965		#[cfg(not(feature = "diagnose"))]
10966		return ret;
10967	}
10968	#[inline(always)]
10969	fn glSecondaryColorP3uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()> {
10970		let ret = process_catch("glSecondaryColorP3uiv", catch_unwind(||(self.secondarycolorp3uiv)(type_, color)));
10971		#[cfg(feature = "diagnose")]
10972		if let Ok(ret) = ret {
10973			return to_result("glSecondaryColorP3uiv", ret, self.glGetError());
10974		} else {
10975			return ret
10976		}
10977		#[cfg(not(feature = "diagnose"))]
10978		return ret;
10979	}
10980}
10981
10982impl Version33 {
10983	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
10984		let (_spec, major, minor, release) = base.get_version();
10985		if (major, minor, release) < (3, 3, 0) {
10986			return Self::default();
10987		}
10988		Self {
10989			available: true,
10990			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
10991			bindfragdatalocationindexed: {let proc = get_proc_address("glBindFragDataLocationIndexed"); if proc == null() {dummy_pfnglbindfragdatalocationindexedproc} else {unsafe{transmute(proc)}}},
10992			getfragdataindex: {let proc = get_proc_address("glGetFragDataIndex"); if proc == null() {dummy_pfnglgetfragdataindexproc} else {unsafe{transmute(proc)}}},
10993			gensamplers: {let proc = get_proc_address("glGenSamplers"); if proc == null() {dummy_pfnglgensamplersproc} else {unsafe{transmute(proc)}}},
10994			deletesamplers: {let proc = get_proc_address("glDeleteSamplers"); if proc == null() {dummy_pfngldeletesamplersproc} else {unsafe{transmute(proc)}}},
10995			issampler: {let proc = get_proc_address("glIsSampler"); if proc == null() {dummy_pfnglissamplerproc} else {unsafe{transmute(proc)}}},
10996			bindsampler: {let proc = get_proc_address("glBindSampler"); if proc == null() {dummy_pfnglbindsamplerproc} else {unsafe{transmute(proc)}}},
10997			samplerparameteri: {let proc = get_proc_address("glSamplerParameteri"); if proc == null() {dummy_pfnglsamplerparameteriproc} else {unsafe{transmute(proc)}}},
10998			samplerparameteriv: {let proc = get_proc_address("glSamplerParameteriv"); if proc == null() {dummy_pfnglsamplerparameterivproc} else {unsafe{transmute(proc)}}},
10999			samplerparameterf: {let proc = get_proc_address("glSamplerParameterf"); if proc == null() {dummy_pfnglsamplerparameterfproc} else {unsafe{transmute(proc)}}},
11000			samplerparameterfv: {let proc = get_proc_address("glSamplerParameterfv"); if proc == null() {dummy_pfnglsamplerparameterfvproc} else {unsafe{transmute(proc)}}},
11001			samplerparameteriiv: {let proc = get_proc_address("glSamplerParameterIiv"); if proc == null() {dummy_pfnglsamplerparameteriivproc} else {unsafe{transmute(proc)}}},
11002			samplerparameteriuiv: {let proc = get_proc_address("glSamplerParameterIuiv"); if proc == null() {dummy_pfnglsamplerparameteriuivproc} else {unsafe{transmute(proc)}}},
11003			getsamplerparameteriv: {let proc = get_proc_address("glGetSamplerParameteriv"); if proc == null() {dummy_pfnglgetsamplerparameterivproc} else {unsafe{transmute(proc)}}},
11004			getsamplerparameteriiv: {let proc = get_proc_address("glGetSamplerParameterIiv"); if proc == null() {dummy_pfnglgetsamplerparameteriivproc} else {unsafe{transmute(proc)}}},
11005			getsamplerparameterfv: {let proc = get_proc_address("glGetSamplerParameterfv"); if proc == null() {dummy_pfnglgetsamplerparameterfvproc} else {unsafe{transmute(proc)}}},
11006			getsamplerparameteriuiv: {let proc = get_proc_address("glGetSamplerParameterIuiv"); if proc == null() {dummy_pfnglgetsamplerparameteriuivproc} else {unsafe{transmute(proc)}}},
11007			querycounter: {let proc = get_proc_address("glQueryCounter"); if proc == null() {dummy_pfnglquerycounterproc} else {unsafe{transmute(proc)}}},
11008			getqueryobjecti64v: {let proc = get_proc_address("glGetQueryObjecti64v"); if proc == null() {dummy_pfnglgetqueryobjecti64vproc} else {unsafe{transmute(proc)}}},
11009			getqueryobjectui64v: {let proc = get_proc_address("glGetQueryObjectui64v"); if proc == null() {dummy_pfnglgetqueryobjectui64vproc} else {unsafe{transmute(proc)}}},
11010			vertexattribdivisor: {let proc = get_proc_address("glVertexAttribDivisor"); if proc == null() {dummy_pfnglvertexattribdivisorproc} else {unsafe{transmute(proc)}}},
11011			vertexattribp1ui: {let proc = get_proc_address("glVertexAttribP1ui"); if proc == null() {dummy_pfnglvertexattribp1uiproc} else {unsafe{transmute(proc)}}},
11012			vertexattribp1uiv: {let proc = get_proc_address("glVertexAttribP1uiv"); if proc == null() {dummy_pfnglvertexattribp1uivproc} else {unsafe{transmute(proc)}}},
11013			vertexattribp2ui: {let proc = get_proc_address("glVertexAttribP2ui"); if proc == null() {dummy_pfnglvertexattribp2uiproc} else {unsafe{transmute(proc)}}},
11014			vertexattribp2uiv: {let proc = get_proc_address("glVertexAttribP2uiv"); if proc == null() {dummy_pfnglvertexattribp2uivproc} else {unsafe{transmute(proc)}}},
11015			vertexattribp3ui: {let proc = get_proc_address("glVertexAttribP3ui"); if proc == null() {dummy_pfnglvertexattribp3uiproc} else {unsafe{transmute(proc)}}},
11016			vertexattribp3uiv: {let proc = get_proc_address("glVertexAttribP3uiv"); if proc == null() {dummy_pfnglvertexattribp3uivproc} else {unsafe{transmute(proc)}}},
11017			vertexattribp4ui: {let proc = get_proc_address("glVertexAttribP4ui"); if proc == null() {dummy_pfnglvertexattribp4uiproc} else {unsafe{transmute(proc)}}},
11018			vertexattribp4uiv: {let proc = get_proc_address("glVertexAttribP4uiv"); if proc == null() {dummy_pfnglvertexattribp4uivproc} else {unsafe{transmute(proc)}}},
11019			vertexp2ui: {let proc = get_proc_address("glVertexP2ui"); if proc == null() {dummy_pfnglvertexp2uiproc} else {unsafe{transmute(proc)}}},
11020			vertexp2uiv: {let proc = get_proc_address("glVertexP2uiv"); if proc == null() {dummy_pfnglvertexp2uivproc} else {unsafe{transmute(proc)}}},
11021			vertexp3ui: {let proc = get_proc_address("glVertexP3ui"); if proc == null() {dummy_pfnglvertexp3uiproc} else {unsafe{transmute(proc)}}},
11022			vertexp3uiv: {let proc = get_proc_address("glVertexP3uiv"); if proc == null() {dummy_pfnglvertexp3uivproc} else {unsafe{transmute(proc)}}},
11023			vertexp4ui: {let proc = get_proc_address("glVertexP4ui"); if proc == null() {dummy_pfnglvertexp4uiproc} else {unsafe{transmute(proc)}}},
11024			vertexp4uiv: {let proc = get_proc_address("glVertexP4uiv"); if proc == null() {dummy_pfnglvertexp4uivproc} else {unsafe{transmute(proc)}}},
11025			texcoordp1ui: {let proc = get_proc_address("glTexCoordP1ui"); if proc == null() {dummy_pfngltexcoordp1uiproc} else {unsafe{transmute(proc)}}},
11026			texcoordp1uiv: {let proc = get_proc_address("glTexCoordP1uiv"); if proc == null() {dummy_pfngltexcoordp1uivproc} else {unsafe{transmute(proc)}}},
11027			texcoordp2ui: {let proc = get_proc_address("glTexCoordP2ui"); if proc == null() {dummy_pfngltexcoordp2uiproc} else {unsafe{transmute(proc)}}},
11028			texcoordp2uiv: {let proc = get_proc_address("glTexCoordP2uiv"); if proc == null() {dummy_pfngltexcoordp2uivproc} else {unsafe{transmute(proc)}}},
11029			texcoordp3ui: {let proc = get_proc_address("glTexCoordP3ui"); if proc == null() {dummy_pfngltexcoordp3uiproc} else {unsafe{transmute(proc)}}},
11030			texcoordp3uiv: {let proc = get_proc_address("glTexCoordP3uiv"); if proc == null() {dummy_pfngltexcoordp3uivproc} else {unsafe{transmute(proc)}}},
11031			texcoordp4ui: {let proc = get_proc_address("glTexCoordP4ui"); if proc == null() {dummy_pfngltexcoordp4uiproc} else {unsafe{transmute(proc)}}},
11032			texcoordp4uiv: {let proc = get_proc_address("glTexCoordP4uiv"); if proc == null() {dummy_pfngltexcoordp4uivproc} else {unsafe{transmute(proc)}}},
11033			multitexcoordp1ui: {let proc = get_proc_address("glMultiTexCoordP1ui"); if proc == null() {dummy_pfnglmultitexcoordp1uiproc} else {unsafe{transmute(proc)}}},
11034			multitexcoordp1uiv: {let proc = get_proc_address("glMultiTexCoordP1uiv"); if proc == null() {dummy_pfnglmultitexcoordp1uivproc} else {unsafe{transmute(proc)}}},
11035			multitexcoordp2ui: {let proc = get_proc_address("glMultiTexCoordP2ui"); if proc == null() {dummy_pfnglmultitexcoordp2uiproc} else {unsafe{transmute(proc)}}},
11036			multitexcoordp2uiv: {let proc = get_proc_address("glMultiTexCoordP2uiv"); if proc == null() {dummy_pfnglmultitexcoordp2uivproc} else {unsafe{transmute(proc)}}},
11037			multitexcoordp3ui: {let proc = get_proc_address("glMultiTexCoordP3ui"); if proc == null() {dummy_pfnglmultitexcoordp3uiproc} else {unsafe{transmute(proc)}}},
11038			multitexcoordp3uiv: {let proc = get_proc_address("glMultiTexCoordP3uiv"); if proc == null() {dummy_pfnglmultitexcoordp3uivproc} else {unsafe{transmute(proc)}}},
11039			multitexcoordp4ui: {let proc = get_proc_address("glMultiTexCoordP4ui"); if proc == null() {dummy_pfnglmultitexcoordp4uiproc} else {unsafe{transmute(proc)}}},
11040			multitexcoordp4uiv: {let proc = get_proc_address("glMultiTexCoordP4uiv"); if proc == null() {dummy_pfnglmultitexcoordp4uivproc} else {unsafe{transmute(proc)}}},
11041			normalp3ui: {let proc = get_proc_address("glNormalP3ui"); if proc == null() {dummy_pfnglnormalp3uiproc} else {unsafe{transmute(proc)}}},
11042			normalp3uiv: {let proc = get_proc_address("glNormalP3uiv"); if proc == null() {dummy_pfnglnormalp3uivproc} else {unsafe{transmute(proc)}}},
11043			colorp3ui: {let proc = get_proc_address("glColorP3ui"); if proc == null() {dummy_pfnglcolorp3uiproc} else {unsafe{transmute(proc)}}},
11044			colorp3uiv: {let proc = get_proc_address("glColorP3uiv"); if proc == null() {dummy_pfnglcolorp3uivproc} else {unsafe{transmute(proc)}}},
11045			colorp4ui: {let proc = get_proc_address("glColorP4ui"); if proc == null() {dummy_pfnglcolorp4uiproc} else {unsafe{transmute(proc)}}},
11046			colorp4uiv: {let proc = get_proc_address("glColorP4uiv"); if proc == null() {dummy_pfnglcolorp4uivproc} else {unsafe{transmute(proc)}}},
11047			secondarycolorp3ui: {let proc = get_proc_address("glSecondaryColorP3ui"); if proc == null() {dummy_pfnglsecondarycolorp3uiproc} else {unsafe{transmute(proc)}}},
11048			secondarycolorp3uiv: {let proc = get_proc_address("glSecondaryColorP3uiv"); if proc == null() {dummy_pfnglsecondarycolorp3uivproc} else {unsafe{transmute(proc)}}},
11049		}
11050	}
11051	#[inline(always)]
11052	pub fn get_available(&self) -> bool {
11053		self.available
11054	}
11055}
11056
11057impl Default for Version33 {
11058	fn default() -> Self {
11059		Self {
11060			available: false,
11061			geterror: dummy_pfnglgeterrorproc,
11062			bindfragdatalocationindexed: dummy_pfnglbindfragdatalocationindexedproc,
11063			getfragdataindex: dummy_pfnglgetfragdataindexproc,
11064			gensamplers: dummy_pfnglgensamplersproc,
11065			deletesamplers: dummy_pfngldeletesamplersproc,
11066			issampler: dummy_pfnglissamplerproc,
11067			bindsampler: dummy_pfnglbindsamplerproc,
11068			samplerparameteri: dummy_pfnglsamplerparameteriproc,
11069			samplerparameteriv: dummy_pfnglsamplerparameterivproc,
11070			samplerparameterf: dummy_pfnglsamplerparameterfproc,
11071			samplerparameterfv: dummy_pfnglsamplerparameterfvproc,
11072			samplerparameteriiv: dummy_pfnglsamplerparameteriivproc,
11073			samplerparameteriuiv: dummy_pfnglsamplerparameteriuivproc,
11074			getsamplerparameteriv: dummy_pfnglgetsamplerparameterivproc,
11075			getsamplerparameteriiv: dummy_pfnglgetsamplerparameteriivproc,
11076			getsamplerparameterfv: dummy_pfnglgetsamplerparameterfvproc,
11077			getsamplerparameteriuiv: dummy_pfnglgetsamplerparameteriuivproc,
11078			querycounter: dummy_pfnglquerycounterproc,
11079			getqueryobjecti64v: dummy_pfnglgetqueryobjecti64vproc,
11080			getqueryobjectui64v: dummy_pfnglgetqueryobjectui64vproc,
11081			vertexattribdivisor: dummy_pfnglvertexattribdivisorproc,
11082			vertexattribp1ui: dummy_pfnglvertexattribp1uiproc,
11083			vertexattribp1uiv: dummy_pfnglvertexattribp1uivproc,
11084			vertexattribp2ui: dummy_pfnglvertexattribp2uiproc,
11085			vertexattribp2uiv: dummy_pfnglvertexattribp2uivproc,
11086			vertexattribp3ui: dummy_pfnglvertexattribp3uiproc,
11087			vertexattribp3uiv: dummy_pfnglvertexattribp3uivproc,
11088			vertexattribp4ui: dummy_pfnglvertexattribp4uiproc,
11089			vertexattribp4uiv: dummy_pfnglvertexattribp4uivproc,
11090			vertexp2ui: dummy_pfnglvertexp2uiproc,
11091			vertexp2uiv: dummy_pfnglvertexp2uivproc,
11092			vertexp3ui: dummy_pfnglvertexp3uiproc,
11093			vertexp3uiv: dummy_pfnglvertexp3uivproc,
11094			vertexp4ui: dummy_pfnglvertexp4uiproc,
11095			vertexp4uiv: dummy_pfnglvertexp4uivproc,
11096			texcoordp1ui: dummy_pfngltexcoordp1uiproc,
11097			texcoordp1uiv: dummy_pfngltexcoordp1uivproc,
11098			texcoordp2ui: dummy_pfngltexcoordp2uiproc,
11099			texcoordp2uiv: dummy_pfngltexcoordp2uivproc,
11100			texcoordp3ui: dummy_pfngltexcoordp3uiproc,
11101			texcoordp3uiv: dummy_pfngltexcoordp3uivproc,
11102			texcoordp4ui: dummy_pfngltexcoordp4uiproc,
11103			texcoordp4uiv: dummy_pfngltexcoordp4uivproc,
11104			multitexcoordp1ui: dummy_pfnglmultitexcoordp1uiproc,
11105			multitexcoordp1uiv: dummy_pfnglmultitexcoordp1uivproc,
11106			multitexcoordp2ui: dummy_pfnglmultitexcoordp2uiproc,
11107			multitexcoordp2uiv: dummy_pfnglmultitexcoordp2uivproc,
11108			multitexcoordp3ui: dummy_pfnglmultitexcoordp3uiproc,
11109			multitexcoordp3uiv: dummy_pfnglmultitexcoordp3uivproc,
11110			multitexcoordp4ui: dummy_pfnglmultitexcoordp4uiproc,
11111			multitexcoordp4uiv: dummy_pfnglmultitexcoordp4uivproc,
11112			normalp3ui: dummy_pfnglnormalp3uiproc,
11113			normalp3uiv: dummy_pfnglnormalp3uivproc,
11114			colorp3ui: dummy_pfnglcolorp3uiproc,
11115			colorp3uiv: dummy_pfnglcolorp3uivproc,
11116			colorp4ui: dummy_pfnglcolorp4uiproc,
11117			colorp4uiv: dummy_pfnglcolorp4uivproc,
11118			secondarycolorp3ui: dummy_pfnglsecondarycolorp3uiproc,
11119			secondarycolorp3uiv: dummy_pfnglsecondarycolorp3uivproc,
11120		}
11121	}
11122}
11123impl Debug for Version33 {
11124	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
11125		if self.available {
11126			f.debug_struct("Version33")
11127			.field("available", &self.available)
11128			.field("bindfragdatalocationindexed", unsafe{if transmute::<_, *const c_void>(self.bindfragdatalocationindexed) == (dummy_pfnglbindfragdatalocationindexedproc as *const c_void) {&null::<PFNGLBINDFRAGDATALOCATIONINDEXEDPROC>()} else {&self.bindfragdatalocationindexed}})
11129			.field("getfragdataindex", unsafe{if transmute::<_, *const c_void>(self.getfragdataindex) == (dummy_pfnglgetfragdataindexproc as *const c_void) {&null::<PFNGLGETFRAGDATAINDEXPROC>()} else {&self.getfragdataindex}})
11130			.field("gensamplers", unsafe{if transmute::<_, *const c_void>(self.gensamplers) == (dummy_pfnglgensamplersproc as *const c_void) {&null::<PFNGLGENSAMPLERSPROC>()} else {&self.gensamplers}})
11131			.field("deletesamplers", unsafe{if transmute::<_, *const c_void>(self.deletesamplers) == (dummy_pfngldeletesamplersproc as *const c_void) {&null::<PFNGLDELETESAMPLERSPROC>()} else {&self.deletesamplers}})
11132			.field("issampler", unsafe{if transmute::<_, *const c_void>(self.issampler) == (dummy_pfnglissamplerproc as *const c_void) {&null::<PFNGLISSAMPLERPROC>()} else {&self.issampler}})
11133			.field("bindsampler", unsafe{if transmute::<_, *const c_void>(self.bindsampler) == (dummy_pfnglbindsamplerproc as *const c_void) {&null::<PFNGLBINDSAMPLERPROC>()} else {&self.bindsampler}})
11134			.field("samplerparameteri", unsafe{if transmute::<_, *const c_void>(self.samplerparameteri) == (dummy_pfnglsamplerparameteriproc as *const c_void) {&null::<PFNGLSAMPLERPARAMETERIPROC>()} else {&self.samplerparameteri}})
11135			.field("samplerparameteriv", unsafe{if transmute::<_, *const c_void>(self.samplerparameteriv) == (dummy_pfnglsamplerparameterivproc as *const c_void) {&null::<PFNGLSAMPLERPARAMETERIVPROC>()} else {&self.samplerparameteriv}})
11136			.field("samplerparameterf", unsafe{if transmute::<_, *const c_void>(self.samplerparameterf) == (dummy_pfnglsamplerparameterfproc as *const c_void) {&null::<PFNGLSAMPLERPARAMETERFPROC>()} else {&self.samplerparameterf}})
11137			.field("samplerparameterfv", unsafe{if transmute::<_, *const c_void>(self.samplerparameterfv) == (dummy_pfnglsamplerparameterfvproc as *const c_void) {&null::<PFNGLSAMPLERPARAMETERFVPROC>()} else {&self.samplerparameterfv}})
11138			.field("samplerparameteriiv", unsafe{if transmute::<_, *const c_void>(self.samplerparameteriiv) == (dummy_pfnglsamplerparameteriivproc as *const c_void) {&null::<PFNGLSAMPLERPARAMETERIIVPROC>()} else {&self.samplerparameteriiv}})
11139			.field("samplerparameteriuiv", unsafe{if transmute::<_, *const c_void>(self.samplerparameteriuiv) == (dummy_pfnglsamplerparameteriuivproc as *const c_void) {&null::<PFNGLSAMPLERPARAMETERIUIVPROC>()} else {&self.samplerparameteriuiv}})
11140			.field("getsamplerparameteriv", unsafe{if transmute::<_, *const c_void>(self.getsamplerparameteriv) == (dummy_pfnglgetsamplerparameterivproc as *const c_void) {&null::<PFNGLGETSAMPLERPARAMETERIVPROC>()} else {&self.getsamplerparameteriv}})
11141			.field("getsamplerparameteriiv", unsafe{if transmute::<_, *const c_void>(self.getsamplerparameteriiv) == (dummy_pfnglgetsamplerparameteriivproc as *const c_void) {&null::<PFNGLGETSAMPLERPARAMETERIIVPROC>()} else {&self.getsamplerparameteriiv}})
11142			.field("getsamplerparameterfv", unsafe{if transmute::<_, *const c_void>(self.getsamplerparameterfv) == (dummy_pfnglgetsamplerparameterfvproc as *const c_void) {&null::<PFNGLGETSAMPLERPARAMETERFVPROC>()} else {&self.getsamplerparameterfv}})
11143			.field("getsamplerparameteriuiv", unsafe{if transmute::<_, *const c_void>(self.getsamplerparameteriuiv) == (dummy_pfnglgetsamplerparameteriuivproc as *const c_void) {&null::<PFNGLGETSAMPLERPARAMETERIUIVPROC>()} else {&self.getsamplerparameteriuiv}})
11144			.field("querycounter", unsafe{if transmute::<_, *const c_void>(self.querycounter) == (dummy_pfnglquerycounterproc as *const c_void) {&null::<PFNGLQUERYCOUNTERPROC>()} else {&self.querycounter}})
11145			.field("getqueryobjecti64v", unsafe{if transmute::<_, *const c_void>(self.getqueryobjecti64v) == (dummy_pfnglgetqueryobjecti64vproc as *const c_void) {&null::<PFNGLGETQUERYOBJECTI64VPROC>()} else {&self.getqueryobjecti64v}})
11146			.field("getqueryobjectui64v", unsafe{if transmute::<_, *const c_void>(self.getqueryobjectui64v) == (dummy_pfnglgetqueryobjectui64vproc as *const c_void) {&null::<PFNGLGETQUERYOBJECTUI64VPROC>()} else {&self.getqueryobjectui64v}})
11147			.field("vertexattribdivisor", unsafe{if transmute::<_, *const c_void>(self.vertexattribdivisor) == (dummy_pfnglvertexattribdivisorproc as *const c_void) {&null::<PFNGLVERTEXATTRIBDIVISORPROC>()} else {&self.vertexattribdivisor}})
11148			.field("vertexattribp1ui", unsafe{if transmute::<_, *const c_void>(self.vertexattribp1ui) == (dummy_pfnglvertexattribp1uiproc as *const c_void) {&null::<PFNGLVERTEXATTRIBP1UIPROC>()} else {&self.vertexattribp1ui}})
11149			.field("vertexattribp1uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattribp1uiv) == (dummy_pfnglvertexattribp1uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBP1UIVPROC>()} else {&self.vertexattribp1uiv}})
11150			.field("vertexattribp2ui", unsafe{if transmute::<_, *const c_void>(self.vertexattribp2ui) == (dummy_pfnglvertexattribp2uiproc as *const c_void) {&null::<PFNGLVERTEXATTRIBP2UIPROC>()} else {&self.vertexattribp2ui}})
11151			.field("vertexattribp2uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattribp2uiv) == (dummy_pfnglvertexattribp2uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBP2UIVPROC>()} else {&self.vertexattribp2uiv}})
11152			.field("vertexattribp3ui", unsafe{if transmute::<_, *const c_void>(self.vertexattribp3ui) == (dummy_pfnglvertexattribp3uiproc as *const c_void) {&null::<PFNGLVERTEXATTRIBP3UIPROC>()} else {&self.vertexattribp3ui}})
11153			.field("vertexattribp3uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattribp3uiv) == (dummy_pfnglvertexattribp3uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBP3UIVPROC>()} else {&self.vertexattribp3uiv}})
11154			.field("vertexattribp4ui", unsafe{if transmute::<_, *const c_void>(self.vertexattribp4ui) == (dummy_pfnglvertexattribp4uiproc as *const c_void) {&null::<PFNGLVERTEXATTRIBP4UIPROC>()} else {&self.vertexattribp4ui}})
11155			.field("vertexattribp4uiv", unsafe{if transmute::<_, *const c_void>(self.vertexattribp4uiv) == (dummy_pfnglvertexattribp4uivproc as *const c_void) {&null::<PFNGLVERTEXATTRIBP4UIVPROC>()} else {&self.vertexattribp4uiv}})
11156			.field("vertexp2ui", unsafe{if transmute::<_, *const c_void>(self.vertexp2ui) == (dummy_pfnglvertexp2uiproc as *const c_void) {&null::<PFNGLVERTEXP2UIPROC>()} else {&self.vertexp2ui}})
11157			.field("vertexp2uiv", unsafe{if transmute::<_, *const c_void>(self.vertexp2uiv) == (dummy_pfnglvertexp2uivproc as *const c_void) {&null::<PFNGLVERTEXP2UIVPROC>()} else {&self.vertexp2uiv}})
11158			.field("vertexp3ui", unsafe{if transmute::<_, *const c_void>(self.vertexp3ui) == (dummy_pfnglvertexp3uiproc as *const c_void) {&null::<PFNGLVERTEXP3UIPROC>()} else {&self.vertexp3ui}})
11159			.field("vertexp3uiv", unsafe{if transmute::<_, *const c_void>(self.vertexp3uiv) == (dummy_pfnglvertexp3uivproc as *const c_void) {&null::<PFNGLVERTEXP3UIVPROC>()} else {&self.vertexp3uiv}})
11160			.field("vertexp4ui", unsafe{if transmute::<_, *const c_void>(self.vertexp4ui) == (dummy_pfnglvertexp4uiproc as *const c_void) {&null::<PFNGLVERTEXP4UIPROC>()} else {&self.vertexp4ui}})
11161			.field("vertexp4uiv", unsafe{if transmute::<_, *const c_void>(self.vertexp4uiv) == (dummy_pfnglvertexp4uivproc as *const c_void) {&null::<PFNGLVERTEXP4UIVPROC>()} else {&self.vertexp4uiv}})
11162			.field("texcoordp1ui", unsafe{if transmute::<_, *const c_void>(self.texcoordp1ui) == (dummy_pfngltexcoordp1uiproc as *const c_void) {&null::<PFNGLTEXCOORDP1UIPROC>()} else {&self.texcoordp1ui}})
11163			.field("texcoordp1uiv", unsafe{if transmute::<_, *const c_void>(self.texcoordp1uiv) == (dummy_pfngltexcoordp1uivproc as *const c_void) {&null::<PFNGLTEXCOORDP1UIVPROC>()} else {&self.texcoordp1uiv}})
11164			.field("texcoordp2ui", unsafe{if transmute::<_, *const c_void>(self.texcoordp2ui) == (dummy_pfngltexcoordp2uiproc as *const c_void) {&null::<PFNGLTEXCOORDP2UIPROC>()} else {&self.texcoordp2ui}})
11165			.field("texcoordp2uiv", unsafe{if transmute::<_, *const c_void>(self.texcoordp2uiv) == (dummy_pfngltexcoordp2uivproc as *const c_void) {&null::<PFNGLTEXCOORDP2UIVPROC>()} else {&self.texcoordp2uiv}})
11166			.field("texcoordp3ui", unsafe{if transmute::<_, *const c_void>(self.texcoordp3ui) == (dummy_pfngltexcoordp3uiproc as *const c_void) {&null::<PFNGLTEXCOORDP3UIPROC>()} else {&self.texcoordp3ui}})
11167			.field("texcoordp3uiv", unsafe{if transmute::<_, *const c_void>(self.texcoordp3uiv) == (dummy_pfngltexcoordp3uivproc as *const c_void) {&null::<PFNGLTEXCOORDP3UIVPROC>()} else {&self.texcoordp3uiv}})
11168			.field("texcoordp4ui", unsafe{if transmute::<_, *const c_void>(self.texcoordp4ui) == (dummy_pfngltexcoordp4uiproc as *const c_void) {&null::<PFNGLTEXCOORDP4UIPROC>()} else {&self.texcoordp4ui}})
11169			.field("texcoordp4uiv", unsafe{if transmute::<_, *const c_void>(self.texcoordp4uiv) == (dummy_pfngltexcoordp4uivproc as *const c_void) {&null::<PFNGLTEXCOORDP4UIVPROC>()} else {&self.texcoordp4uiv}})
11170			.field("multitexcoordp1ui", unsafe{if transmute::<_, *const c_void>(self.multitexcoordp1ui) == (dummy_pfnglmultitexcoordp1uiproc as *const c_void) {&null::<PFNGLMULTITEXCOORDP1UIPROC>()} else {&self.multitexcoordp1ui}})
11171			.field("multitexcoordp1uiv", unsafe{if transmute::<_, *const c_void>(self.multitexcoordp1uiv) == (dummy_pfnglmultitexcoordp1uivproc as *const c_void) {&null::<PFNGLMULTITEXCOORDP1UIVPROC>()} else {&self.multitexcoordp1uiv}})
11172			.field("multitexcoordp2ui", unsafe{if transmute::<_, *const c_void>(self.multitexcoordp2ui) == (dummy_pfnglmultitexcoordp2uiproc as *const c_void) {&null::<PFNGLMULTITEXCOORDP2UIPROC>()} else {&self.multitexcoordp2ui}})
11173			.field("multitexcoordp2uiv", unsafe{if transmute::<_, *const c_void>(self.multitexcoordp2uiv) == (dummy_pfnglmultitexcoordp2uivproc as *const c_void) {&null::<PFNGLMULTITEXCOORDP2UIVPROC>()} else {&self.multitexcoordp2uiv}})
11174			.field("multitexcoordp3ui", unsafe{if transmute::<_, *const c_void>(self.multitexcoordp3ui) == (dummy_pfnglmultitexcoordp3uiproc as *const c_void) {&null::<PFNGLMULTITEXCOORDP3UIPROC>()} else {&self.multitexcoordp3ui}})
11175			.field("multitexcoordp3uiv", unsafe{if transmute::<_, *const c_void>(self.multitexcoordp3uiv) == (dummy_pfnglmultitexcoordp3uivproc as *const c_void) {&null::<PFNGLMULTITEXCOORDP3UIVPROC>()} else {&self.multitexcoordp3uiv}})
11176			.field("multitexcoordp4ui", unsafe{if transmute::<_, *const c_void>(self.multitexcoordp4ui) == (dummy_pfnglmultitexcoordp4uiproc as *const c_void) {&null::<PFNGLMULTITEXCOORDP4UIPROC>()} else {&self.multitexcoordp4ui}})
11177			.field("multitexcoordp4uiv", unsafe{if transmute::<_, *const c_void>(self.multitexcoordp4uiv) == (dummy_pfnglmultitexcoordp4uivproc as *const c_void) {&null::<PFNGLMULTITEXCOORDP4UIVPROC>()} else {&self.multitexcoordp4uiv}})
11178			.field("normalp3ui", unsafe{if transmute::<_, *const c_void>(self.normalp3ui) == (dummy_pfnglnormalp3uiproc as *const c_void) {&null::<PFNGLNORMALP3UIPROC>()} else {&self.normalp3ui}})
11179			.field("normalp3uiv", unsafe{if transmute::<_, *const c_void>(self.normalp3uiv) == (dummy_pfnglnormalp3uivproc as *const c_void) {&null::<PFNGLNORMALP3UIVPROC>()} else {&self.normalp3uiv}})
11180			.field("colorp3ui", unsafe{if transmute::<_, *const c_void>(self.colorp3ui) == (dummy_pfnglcolorp3uiproc as *const c_void) {&null::<PFNGLCOLORP3UIPROC>()} else {&self.colorp3ui}})
11181			.field("colorp3uiv", unsafe{if transmute::<_, *const c_void>(self.colorp3uiv) == (dummy_pfnglcolorp3uivproc as *const c_void) {&null::<PFNGLCOLORP3UIVPROC>()} else {&self.colorp3uiv}})
11182			.field("colorp4ui", unsafe{if transmute::<_, *const c_void>(self.colorp4ui) == (dummy_pfnglcolorp4uiproc as *const c_void) {&null::<PFNGLCOLORP4UIPROC>()} else {&self.colorp4ui}})
11183			.field("colorp4uiv", unsafe{if transmute::<_, *const c_void>(self.colorp4uiv) == (dummy_pfnglcolorp4uivproc as *const c_void) {&null::<PFNGLCOLORP4UIVPROC>()} else {&self.colorp4uiv}})
11184			.field("secondarycolorp3ui", unsafe{if transmute::<_, *const c_void>(self.secondarycolorp3ui) == (dummy_pfnglsecondarycolorp3uiproc as *const c_void) {&null::<PFNGLSECONDARYCOLORP3UIPROC>()} else {&self.secondarycolorp3ui}})
11185			.field("secondarycolorp3uiv", unsafe{if transmute::<_, *const c_void>(self.secondarycolorp3uiv) == (dummy_pfnglsecondarycolorp3uivproc as *const c_void) {&null::<PFNGLSECONDARYCOLORP3UIVPROC>()} else {&self.secondarycolorp3uiv}})
11186			.finish()
11187		} else {
11188			f.debug_struct("Version33")
11189			.field("available", &self.available)
11190			.finish_non_exhaustive()
11191		}
11192	}
11193}
11194type PFNGLMINSAMPLESHADINGPROC = extern "system" fn(GLfloat);
11195type PFNGLBLENDEQUATIONIPROC = extern "system" fn(GLuint, GLenum);
11196type PFNGLBLENDEQUATIONSEPARATEIPROC = extern "system" fn(GLuint, GLenum, GLenum);
11197type PFNGLBLENDFUNCIPROC = extern "system" fn(GLuint, GLenum, GLenum);
11198type PFNGLBLENDFUNCSEPARATEIPROC = extern "system" fn(GLuint, GLenum, GLenum, GLenum, GLenum);
11199type PFNGLDRAWARRAYSINDIRECTPROC = extern "system" fn(GLenum, *const c_void);
11200type PFNGLDRAWELEMENTSINDIRECTPROC = extern "system" fn(GLenum, GLenum, *const c_void);
11201type PFNGLUNIFORM1DPROC = extern "system" fn(GLint, GLdouble);
11202type PFNGLUNIFORM2DPROC = extern "system" fn(GLint, GLdouble, GLdouble);
11203type PFNGLUNIFORM3DPROC = extern "system" fn(GLint, GLdouble, GLdouble, GLdouble);
11204type PFNGLUNIFORM4DPROC = extern "system" fn(GLint, GLdouble, GLdouble, GLdouble, GLdouble);
11205type PFNGLUNIFORM1DVPROC = extern "system" fn(GLint, GLsizei, *const GLdouble);
11206type PFNGLUNIFORM2DVPROC = extern "system" fn(GLint, GLsizei, *const GLdouble);
11207type PFNGLUNIFORM3DVPROC = extern "system" fn(GLint, GLsizei, *const GLdouble);
11208type PFNGLUNIFORM4DVPROC = extern "system" fn(GLint, GLsizei, *const GLdouble);
11209type PFNGLUNIFORMMATRIX2DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11210type PFNGLUNIFORMMATRIX3DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11211type PFNGLUNIFORMMATRIX4DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11212type PFNGLUNIFORMMATRIX2X3DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11213type PFNGLUNIFORMMATRIX2X4DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11214type PFNGLUNIFORMMATRIX3X2DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11215type PFNGLUNIFORMMATRIX3X4DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11216type PFNGLUNIFORMMATRIX4X2DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11217type PFNGLUNIFORMMATRIX4X3DVPROC = extern "system" fn(GLint, GLsizei, GLboolean, *const GLdouble);
11218type PFNGLGETUNIFORMDVPROC = extern "system" fn(GLuint, GLint, *mut GLdouble);
11219type PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC = extern "system" fn(GLuint, GLenum, *const GLchar) -> GLint;
11220type PFNGLGETSUBROUTINEINDEXPROC = extern "system" fn(GLuint, GLenum, *const GLchar) -> GLuint;
11221type PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC = extern "system" fn(GLuint, GLenum, GLuint, GLenum, *mut GLint);
11222type PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC = extern "system" fn(GLuint, GLenum, GLuint, GLsizei, *mut GLsizei, *mut GLchar);
11223type PFNGLGETACTIVESUBROUTINENAMEPROC = extern "system" fn(GLuint, GLenum, GLuint, GLsizei, *mut GLsizei, *mut GLchar);
11224type PFNGLUNIFORMSUBROUTINESUIVPROC = extern "system" fn(GLenum, GLsizei, *const GLuint);
11225type PFNGLGETUNIFORMSUBROUTINEUIVPROC = extern "system" fn(GLenum, GLint, *mut GLuint);
11226type PFNGLGETPROGRAMSTAGEIVPROC = extern "system" fn(GLuint, GLenum, GLenum, *mut GLint);
11227type PFNGLPATCHPARAMETERIPROC = extern "system" fn(GLenum, GLint);
11228type PFNGLPATCHPARAMETERFVPROC = extern "system" fn(GLenum, *const GLfloat);
11229type PFNGLBINDTRANSFORMFEEDBACKPROC = extern "system" fn(GLenum, GLuint);
11230type PFNGLDELETETRANSFORMFEEDBACKSPROC = extern "system" fn(GLsizei, *const GLuint);
11231type PFNGLGENTRANSFORMFEEDBACKSPROC = extern "system" fn(GLsizei, *mut GLuint);
11232type PFNGLISTRANSFORMFEEDBACKPROC = extern "system" fn(GLuint) -> GLboolean;
11233type PFNGLPAUSETRANSFORMFEEDBACKPROC = extern "system" fn();
11234type PFNGLRESUMETRANSFORMFEEDBACKPROC = extern "system" fn();
11235type PFNGLDRAWTRANSFORMFEEDBACKPROC = extern "system" fn(GLenum, GLuint);
11236type PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC = extern "system" fn(GLenum, GLuint, GLuint);
11237type PFNGLBEGINQUERYINDEXEDPROC = extern "system" fn(GLenum, GLuint, GLuint);
11238type PFNGLENDQUERYINDEXEDPROC = extern "system" fn(GLenum, GLuint);
11239type PFNGLGETQUERYINDEXEDIVPROC = extern "system" fn(GLenum, GLuint, GLenum, *mut GLint);
11240extern "system" fn dummy_pfnglminsampleshadingproc (_: GLfloat) {
11241	panic!("OpenGL function pointer `glMinSampleShading()` is null.")
11242}
11243extern "system" fn dummy_pfnglblendequationiproc (_: GLuint, _: GLenum) {
11244	panic!("OpenGL function pointer `glBlendEquationi()` is null.")
11245}
11246extern "system" fn dummy_pfnglblendequationseparateiproc (_: GLuint, _: GLenum, _: GLenum) {
11247	panic!("OpenGL function pointer `glBlendEquationSeparatei()` is null.")
11248}
11249extern "system" fn dummy_pfnglblendfunciproc (_: GLuint, _: GLenum, _: GLenum) {
11250	panic!("OpenGL function pointer `glBlendFunci()` is null.")
11251}
11252extern "system" fn dummy_pfnglblendfuncseparateiproc (_: GLuint, _: GLenum, _: GLenum, _: GLenum, _: GLenum) {
11253	panic!("OpenGL function pointer `glBlendFuncSeparatei()` is null.")
11254}
11255extern "system" fn dummy_pfngldrawarraysindirectproc (_: GLenum, _: *const c_void) {
11256	panic!("OpenGL function pointer `glDrawArraysIndirect()` is null.")
11257}
11258extern "system" fn dummy_pfngldrawelementsindirectproc (_: GLenum, _: GLenum, _: *const c_void) {
11259	panic!("OpenGL function pointer `glDrawElementsIndirect()` is null.")
11260}
11261extern "system" fn dummy_pfngluniform1dproc (_: GLint, _: GLdouble) {
11262	panic!("OpenGL function pointer `glUniform1d()` is null.")
11263}
11264extern "system" fn dummy_pfngluniform2dproc (_: GLint, _: GLdouble, _: GLdouble) {
11265	panic!("OpenGL function pointer `glUniform2d()` is null.")
11266}
11267extern "system" fn dummy_pfngluniform3dproc (_: GLint, _: GLdouble, _: GLdouble, _: GLdouble) {
11268	panic!("OpenGL function pointer `glUniform3d()` is null.")
11269}
11270extern "system" fn dummy_pfngluniform4dproc (_: GLint, _: GLdouble, _: GLdouble, _: GLdouble, _: GLdouble) {
11271	panic!("OpenGL function pointer `glUniform4d()` is null.")
11272}
11273extern "system" fn dummy_pfngluniform1dvproc (_: GLint, _: GLsizei, _: *const GLdouble) {
11274	panic!("OpenGL function pointer `glUniform1dv()` is null.")
11275}
11276extern "system" fn dummy_pfngluniform2dvproc (_: GLint, _: GLsizei, _: *const GLdouble) {
11277	panic!("OpenGL function pointer `glUniform2dv()` is null.")
11278}
11279extern "system" fn dummy_pfngluniform3dvproc (_: GLint, _: GLsizei, _: *const GLdouble) {
11280	panic!("OpenGL function pointer `glUniform3dv()` is null.")
11281}
11282extern "system" fn dummy_pfngluniform4dvproc (_: GLint, _: GLsizei, _: *const GLdouble) {
11283	panic!("OpenGL function pointer `glUniform4dv()` is null.")
11284}
11285extern "system" fn dummy_pfngluniformmatrix2dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11286	panic!("OpenGL function pointer `glUniformMatrix2dv()` is null.")
11287}
11288extern "system" fn dummy_pfngluniformmatrix3dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11289	panic!("OpenGL function pointer `glUniformMatrix3dv()` is null.")
11290}
11291extern "system" fn dummy_pfngluniformmatrix4dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11292	panic!("OpenGL function pointer `glUniformMatrix4dv()` is null.")
11293}
11294extern "system" fn dummy_pfngluniformmatrix2x3dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11295	panic!("OpenGL function pointer `glUniformMatrix2x3dv()` is null.")
11296}
11297extern "system" fn dummy_pfngluniformmatrix2x4dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11298	panic!("OpenGL function pointer `glUniformMatrix2x4dv()` is null.")
11299}
11300extern "system" fn dummy_pfngluniformmatrix3x2dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11301	panic!("OpenGL function pointer `glUniformMatrix3x2dv()` is null.")
11302}
11303extern "system" fn dummy_pfngluniformmatrix3x4dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11304	panic!("OpenGL function pointer `glUniformMatrix3x4dv()` is null.")
11305}
11306extern "system" fn dummy_pfngluniformmatrix4x2dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11307	panic!("OpenGL function pointer `glUniformMatrix4x2dv()` is null.")
11308}
11309extern "system" fn dummy_pfngluniformmatrix4x3dvproc (_: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
11310	panic!("OpenGL function pointer `glUniformMatrix4x3dv()` is null.")
11311}
11312extern "system" fn dummy_pfnglgetuniformdvproc (_: GLuint, _: GLint, _: *mut GLdouble) {
11313	panic!("OpenGL function pointer `glGetUniformdv()` is null.")
11314}
11315extern "system" fn dummy_pfnglgetsubroutineuniformlocationproc (_: GLuint, _: GLenum, _: *const GLchar) -> GLint {
11316	panic!("OpenGL function pointer `glGetSubroutineUniformLocation()` is null.")
11317}
11318extern "system" fn dummy_pfnglgetsubroutineindexproc (_: GLuint, _: GLenum, _: *const GLchar) -> GLuint {
11319	panic!("OpenGL function pointer `glGetSubroutineIndex()` is null.")
11320}
11321extern "system" fn dummy_pfnglgetactivesubroutineuniformivproc (_: GLuint, _: GLenum, _: GLuint, _: GLenum, _: *mut GLint) {
11322	panic!("OpenGL function pointer `glGetActiveSubroutineUniformiv()` is null.")
11323}
11324extern "system" fn dummy_pfnglgetactivesubroutineuniformnameproc (_: GLuint, _: GLenum, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
11325	panic!("OpenGL function pointer `glGetActiveSubroutineUniformName()` is null.")
11326}
11327extern "system" fn dummy_pfnglgetactivesubroutinenameproc (_: GLuint, _: GLenum, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
11328	panic!("OpenGL function pointer `glGetActiveSubroutineName()` is null.")
11329}
11330extern "system" fn dummy_pfngluniformsubroutinesuivproc (_: GLenum, _: GLsizei, _: *const GLuint) {
11331	panic!("OpenGL function pointer `glUniformSubroutinesuiv()` is null.")
11332}
11333extern "system" fn dummy_pfnglgetuniformsubroutineuivproc (_: GLenum, _: GLint, _: *mut GLuint) {
11334	panic!("OpenGL function pointer `glGetUniformSubroutineuiv()` is null.")
11335}
11336extern "system" fn dummy_pfnglgetprogramstageivproc (_: GLuint, _: GLenum, _: GLenum, _: *mut GLint) {
11337	panic!("OpenGL function pointer `glGetProgramStageiv()` is null.")
11338}
11339extern "system" fn dummy_pfnglpatchparameteriproc (_: GLenum, _: GLint) {
11340	panic!("OpenGL function pointer `glPatchParameteri()` is null.")
11341}
11342extern "system" fn dummy_pfnglpatchparameterfvproc (_: GLenum, _: *const GLfloat) {
11343	panic!("OpenGL function pointer `glPatchParameterfv()` is null.")
11344}
11345extern "system" fn dummy_pfnglbindtransformfeedbackproc (_: GLenum, _: GLuint) {
11346	panic!("OpenGL function pointer `glBindTransformFeedback()` is null.")
11347}
11348extern "system" fn dummy_pfngldeletetransformfeedbacksproc (_: GLsizei, _: *const GLuint) {
11349	panic!("OpenGL function pointer `glDeleteTransformFeedbacks()` is null.")
11350}
11351extern "system" fn dummy_pfnglgentransformfeedbacksproc (_: GLsizei, _: *mut GLuint) {
11352	panic!("OpenGL function pointer `glGenTransformFeedbacks()` is null.")
11353}
11354extern "system" fn dummy_pfnglistransformfeedbackproc (_: GLuint) -> GLboolean {
11355	panic!("OpenGL function pointer `glIsTransformFeedback()` is null.")
11356}
11357extern "system" fn dummy_pfnglpausetransformfeedbackproc () {
11358	panic!("OpenGL function pointer `glPauseTransformFeedback()` is null.")
11359}
11360extern "system" fn dummy_pfnglresumetransformfeedbackproc () {
11361	panic!("OpenGL function pointer `glResumeTransformFeedback()` is null.")
11362}
11363extern "system" fn dummy_pfngldrawtransformfeedbackproc (_: GLenum, _: GLuint) {
11364	panic!("OpenGL function pointer `glDrawTransformFeedback()` is null.")
11365}
11366extern "system" fn dummy_pfngldrawtransformfeedbackstreamproc (_: GLenum, _: GLuint, _: GLuint) {
11367	panic!("OpenGL function pointer `glDrawTransformFeedbackStream()` is null.")
11368}
11369extern "system" fn dummy_pfnglbeginqueryindexedproc (_: GLenum, _: GLuint, _: GLuint) {
11370	panic!("OpenGL function pointer `glBeginQueryIndexed()` is null.")
11371}
11372extern "system" fn dummy_pfnglendqueryindexedproc (_: GLenum, _: GLuint) {
11373	panic!("OpenGL function pointer `glEndQueryIndexed()` is null.")
11374}
11375extern "system" fn dummy_pfnglgetqueryindexedivproc (_: GLenum, _: GLuint, _: GLenum, _: *mut GLint) {
11376	panic!("OpenGL function pointer `glGetQueryIndexediv()` is null.")
11377}
11378pub const GL_SAMPLE_SHADING: GLenum = 0x8C36;
11379pub const GL_MIN_SAMPLE_SHADING_VALUE: GLenum = 0x8C37;
11380pub const GL_MIN_PROGRAM_TEXTURE_GATHER_OFFSET: GLenum = 0x8E5E;
11381pub const GL_MAX_PROGRAM_TEXTURE_GATHER_OFFSET: GLenum = 0x8E5F;
11382pub const GL_TEXTURE_CUBE_MAP_ARRAY: GLenum = 0x9009;
11383pub const GL_TEXTURE_BINDING_CUBE_MAP_ARRAY: GLenum = 0x900A;
11384pub const GL_PROXY_TEXTURE_CUBE_MAP_ARRAY: GLenum = 0x900B;
11385pub const GL_SAMPLER_CUBE_MAP_ARRAY: GLenum = 0x900C;
11386pub const GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW: GLenum = 0x900D;
11387pub const GL_INT_SAMPLER_CUBE_MAP_ARRAY: GLenum = 0x900E;
11388pub const GL_UNSIGNED_INT_SAMPLER_CUBE_MAP_ARRAY: GLenum = 0x900F;
11389pub const GL_DRAW_INDIRECT_BUFFER: GLenum = 0x8F3F;
11390pub const GL_DRAW_INDIRECT_BUFFER_BINDING: GLenum = 0x8F43;
11391pub const GL_GEOMETRY_SHADER_INVOCATIONS: GLenum = 0x887F;
11392pub const GL_MAX_GEOMETRY_SHADER_INVOCATIONS: GLenum = 0x8E5A;
11393pub const GL_MIN_FRAGMENT_INTERPOLATION_OFFSET: GLenum = 0x8E5B;
11394pub const GL_MAX_FRAGMENT_INTERPOLATION_OFFSET: GLenum = 0x8E5C;
11395pub const GL_FRAGMENT_INTERPOLATION_OFFSET_BITS: GLenum = 0x8E5D;
11396pub const GL_MAX_VERTEX_STREAMS: GLenum = 0x8E71;
11397pub const GL_DOUBLE_VEC2: GLenum = 0x8FFC;
11398pub const GL_DOUBLE_VEC3: GLenum = 0x8FFD;
11399pub const GL_DOUBLE_VEC4: GLenum = 0x8FFE;
11400pub const GL_DOUBLE_MAT2: GLenum = 0x8F46;
11401pub const GL_DOUBLE_MAT3: GLenum = 0x8F47;
11402pub const GL_DOUBLE_MAT4: GLenum = 0x8F48;
11403pub const GL_DOUBLE_MAT2x3: GLenum = 0x8F49;
11404pub const GL_DOUBLE_MAT2x4: GLenum = 0x8F4A;
11405pub const GL_DOUBLE_MAT3x2: GLenum = 0x8F4B;
11406pub const GL_DOUBLE_MAT3x4: GLenum = 0x8F4C;
11407pub const GL_DOUBLE_MAT4x2: GLenum = 0x8F4D;
11408pub const GL_DOUBLE_MAT4x3: GLenum = 0x8F4E;
11409pub const GL_ACTIVE_SUBROUTINES: GLenum = 0x8DE5;
11410pub const GL_ACTIVE_SUBROUTINE_UNIFORMS: GLenum = 0x8DE6;
11411pub const GL_ACTIVE_SUBROUTINE_UNIFORM_LOCATIONS: GLenum = 0x8E47;
11412pub const GL_ACTIVE_SUBROUTINE_MAX_LENGTH: GLenum = 0x8E48;
11413pub const GL_ACTIVE_SUBROUTINE_UNIFORM_MAX_LENGTH: GLenum = 0x8E49;
11414pub const GL_MAX_SUBROUTINES: GLenum = 0x8DE7;
11415pub const GL_MAX_SUBROUTINE_UNIFORM_LOCATIONS: GLenum = 0x8DE8;
11416pub const GL_NUM_COMPATIBLE_SUBROUTINES: GLenum = 0x8E4A;
11417pub const GL_COMPATIBLE_SUBROUTINES: GLenum = 0x8E4B;
11418pub const GL_PATCHES: GLenum = 0x000E;
11419pub const GL_PATCH_VERTICES: GLenum = 0x8E72;
11420pub const GL_PATCH_DEFAULT_INNER_LEVEL: GLenum = 0x8E73;
11421pub const GL_PATCH_DEFAULT_OUTER_LEVEL: GLenum = 0x8E74;
11422pub const GL_TESS_CONTROL_OUTPUT_VERTICES: GLenum = 0x8E75;
11423pub const GL_TESS_GEN_MODE: GLenum = 0x8E76;
11424pub const GL_TESS_GEN_SPACING: GLenum = 0x8E77;
11425pub const GL_TESS_GEN_VERTEX_ORDER: GLenum = 0x8E78;
11426pub const GL_TESS_GEN_POINT_MODE: GLenum = 0x8E79;
11427pub const GL_ISOLINES: GLenum = 0x8E7A;
11428pub const GL_FRACTIONAL_ODD: GLenum = 0x8E7B;
11429pub const GL_FRACTIONAL_EVEN: GLenum = 0x8E7C;
11430pub const GL_MAX_PATCH_VERTICES: GLenum = 0x8E7D;
11431pub const GL_MAX_TESS_GEN_LEVEL: GLenum = 0x8E7E;
11432pub const GL_MAX_TESS_CONTROL_UNIFORM_COMPONENTS: GLenum = 0x8E7F;
11433pub const GL_MAX_TESS_EVALUATION_UNIFORM_COMPONENTS: GLenum = 0x8E80;
11434pub const GL_MAX_TESS_CONTROL_TEXTURE_IMAGE_UNITS: GLenum = 0x8E81;
11435pub const GL_MAX_TESS_EVALUATION_TEXTURE_IMAGE_UNITS: GLenum = 0x8E82;
11436pub const GL_MAX_TESS_CONTROL_OUTPUT_COMPONENTS: GLenum = 0x8E83;
11437pub const GL_MAX_TESS_PATCH_COMPONENTS: GLenum = 0x8E84;
11438pub const GL_MAX_TESS_CONTROL_TOTAL_OUTPUT_COMPONENTS: GLenum = 0x8E85;
11439pub const GL_MAX_TESS_EVALUATION_OUTPUT_COMPONENTS: GLenum = 0x8E86;
11440pub const GL_MAX_TESS_CONTROL_UNIFORM_BLOCKS: GLenum = 0x8E89;
11441pub const GL_MAX_TESS_EVALUATION_UNIFORM_BLOCKS: GLenum = 0x8E8A;
11442pub const GL_MAX_TESS_CONTROL_INPUT_COMPONENTS: GLenum = 0x886C;
11443pub const GL_MAX_TESS_EVALUATION_INPUT_COMPONENTS: GLenum = 0x886D;
11444pub const GL_MAX_COMBINED_TESS_CONTROL_UNIFORM_COMPONENTS: GLenum = 0x8E1E;
11445pub const GL_MAX_COMBINED_TESS_EVALUATION_UNIFORM_COMPONENTS: GLenum = 0x8E1F;
11446pub const GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_CONTROL_SHADER: GLenum = 0x84F0;
11447pub const GL_UNIFORM_BLOCK_REFERENCED_BY_TESS_EVALUATION_SHADER: GLenum = 0x84F1;
11448pub const GL_TESS_EVALUATION_SHADER: GLenum = 0x8E87;
11449pub const GL_TESS_CONTROL_SHADER: GLenum = 0x8E88;
11450pub const GL_TRANSFORM_FEEDBACK: GLenum = 0x8E22;
11451pub const GL_TRANSFORM_FEEDBACK_BUFFER_PAUSED: GLenum = 0x8E23;
11452pub const GL_TRANSFORM_FEEDBACK_BUFFER_ACTIVE: GLenum = 0x8E24;
11453pub const GL_TRANSFORM_FEEDBACK_BINDING: GLenum = 0x8E25;
11454pub const GL_MAX_TRANSFORM_FEEDBACK_BUFFERS: GLenum = 0x8E70;
11455
11456pub trait GL_4_0 {
11457	fn glGetError(&self) -> GLenum;
11458	fn glMinSampleShading(&self, value: GLfloat) -> Result<()>;
11459	fn glBlendEquationi(&self, buf: GLuint, mode: GLenum) -> Result<()>;
11460	fn glBlendEquationSeparatei(&self, buf: GLuint, modeRGB: GLenum, modeAlpha: GLenum) -> Result<()>;
11461	fn glBlendFunci(&self, buf: GLuint, src: GLenum, dst: GLenum) -> Result<()>;
11462	fn glBlendFuncSeparatei(&self, buf: GLuint, srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum) -> Result<()>;
11463	fn glDrawArraysIndirect(&self, mode: GLenum, indirect: *const c_void) -> Result<()>;
11464	fn glDrawElementsIndirect(&self, mode: GLenum, type_: GLenum, indirect: *const c_void) -> Result<()>;
11465	fn glUniform1d(&self, location: GLint, x: GLdouble) -> Result<()>;
11466	fn glUniform2d(&self, location: GLint, x: GLdouble, y: GLdouble) -> Result<()>;
11467	fn glUniform3d(&self, location: GLint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()>;
11468	fn glUniform4d(&self, location: GLint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()>;
11469	fn glUniform1dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()>;
11470	fn glUniform2dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()>;
11471	fn glUniform3dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()>;
11472	fn glUniform4dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()>;
11473	fn glUniformMatrix2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11474	fn glUniformMatrix3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11475	fn glUniformMatrix4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11476	fn glUniformMatrix2x3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11477	fn glUniformMatrix2x4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11478	fn glUniformMatrix3x2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11479	fn glUniformMatrix3x4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11480	fn glUniformMatrix4x2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11481	fn glUniformMatrix4x3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
11482	fn glGetUniformdv(&self, program: GLuint, location: GLint, params: *mut GLdouble) -> Result<()>;
11483	fn glGetSubroutineUniformLocation(&self, program: GLuint, shadertype: GLenum, name: *const GLchar) -> Result<GLint>;
11484	fn glGetSubroutineIndex(&self, program: GLuint, shadertype: GLenum, name: *const GLchar) -> Result<GLuint>;
11485	fn glGetActiveSubroutineUniformiv(&self, program: GLuint, shadertype: GLenum, index: GLuint, pname: GLenum, values: *mut GLint) -> Result<()>;
11486	fn glGetActiveSubroutineUniformName(&self, program: GLuint, shadertype: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()>;
11487	fn glGetActiveSubroutineName(&self, program: GLuint, shadertype: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()>;
11488	fn glUniformSubroutinesuiv(&self, shadertype: GLenum, count: GLsizei, indices: *const GLuint) -> Result<()>;
11489	fn glGetUniformSubroutineuiv(&self, shadertype: GLenum, location: GLint, params: *mut GLuint) -> Result<()>;
11490	fn glGetProgramStageiv(&self, program: GLuint, shadertype: GLenum, pname: GLenum, values: *mut GLint) -> Result<()>;
11491	fn glPatchParameteri(&self, pname: GLenum, value: GLint) -> Result<()>;
11492	fn glPatchParameterfv(&self, pname: GLenum, values: *const GLfloat) -> Result<()>;
11493	fn glBindTransformFeedback(&self, target: GLenum, id: GLuint) -> Result<()>;
11494	fn glDeleteTransformFeedbacks(&self, n: GLsizei, ids: *const GLuint) -> Result<()>;
11495	fn glGenTransformFeedbacks(&self, n: GLsizei, ids: *mut GLuint) -> Result<()>;
11496	fn glIsTransformFeedback(&self, id: GLuint) -> Result<GLboolean>;
11497	fn glPauseTransformFeedback(&self) -> Result<()>;
11498	fn glResumeTransformFeedback(&self) -> Result<()>;
11499	fn glDrawTransformFeedback(&self, mode: GLenum, id: GLuint) -> Result<()>;
11500	fn glDrawTransformFeedbackStream(&self, mode: GLenum, id: GLuint, stream: GLuint) -> Result<()>;
11501	fn glBeginQueryIndexed(&self, target: GLenum, index: GLuint, id: GLuint) -> Result<()>;
11502	fn glEndQueryIndexed(&self, target: GLenum, index: GLuint) -> Result<()>;
11503	fn glGetQueryIndexediv(&self, target: GLenum, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
11504}
11505
11506#[derive(Clone, Copy, PartialEq, Eq, Hash)]
11507pub struct Version40 {
11508	available: bool,
11509	geterror: PFNGLGETERRORPROC,
11510	minsampleshading: PFNGLMINSAMPLESHADINGPROC,
11511	blendequationi: PFNGLBLENDEQUATIONIPROC,
11512	blendequationseparatei: PFNGLBLENDEQUATIONSEPARATEIPROC,
11513	blendfunci: PFNGLBLENDFUNCIPROC,
11514	blendfuncseparatei: PFNGLBLENDFUNCSEPARATEIPROC,
11515	drawarraysindirect: PFNGLDRAWARRAYSINDIRECTPROC,
11516	drawelementsindirect: PFNGLDRAWELEMENTSINDIRECTPROC,
11517	uniform1d: PFNGLUNIFORM1DPROC,
11518	uniform2d: PFNGLUNIFORM2DPROC,
11519	uniform3d: PFNGLUNIFORM3DPROC,
11520	uniform4d: PFNGLUNIFORM4DPROC,
11521	uniform1dv: PFNGLUNIFORM1DVPROC,
11522	uniform2dv: PFNGLUNIFORM2DVPROC,
11523	uniform3dv: PFNGLUNIFORM3DVPROC,
11524	uniform4dv: PFNGLUNIFORM4DVPROC,
11525	uniformmatrix2dv: PFNGLUNIFORMMATRIX2DVPROC,
11526	uniformmatrix3dv: PFNGLUNIFORMMATRIX3DVPROC,
11527	uniformmatrix4dv: PFNGLUNIFORMMATRIX4DVPROC,
11528	uniformmatrix2x3dv: PFNGLUNIFORMMATRIX2X3DVPROC,
11529	uniformmatrix2x4dv: PFNGLUNIFORMMATRIX2X4DVPROC,
11530	uniformmatrix3x2dv: PFNGLUNIFORMMATRIX3X2DVPROC,
11531	uniformmatrix3x4dv: PFNGLUNIFORMMATRIX3X4DVPROC,
11532	uniformmatrix4x2dv: PFNGLUNIFORMMATRIX4X2DVPROC,
11533	uniformmatrix4x3dv: PFNGLUNIFORMMATRIX4X3DVPROC,
11534	getuniformdv: PFNGLGETUNIFORMDVPROC,
11535	getsubroutineuniformlocation: PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC,
11536	getsubroutineindex: PFNGLGETSUBROUTINEINDEXPROC,
11537	getactivesubroutineuniformiv: PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC,
11538	getactivesubroutineuniformname: PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC,
11539	getactivesubroutinename: PFNGLGETACTIVESUBROUTINENAMEPROC,
11540	uniformsubroutinesuiv: PFNGLUNIFORMSUBROUTINESUIVPROC,
11541	getuniformsubroutineuiv: PFNGLGETUNIFORMSUBROUTINEUIVPROC,
11542	getprogramstageiv: PFNGLGETPROGRAMSTAGEIVPROC,
11543	patchparameteri: PFNGLPATCHPARAMETERIPROC,
11544	patchparameterfv: PFNGLPATCHPARAMETERFVPROC,
11545	bindtransformfeedback: PFNGLBINDTRANSFORMFEEDBACKPROC,
11546	deletetransformfeedbacks: PFNGLDELETETRANSFORMFEEDBACKSPROC,
11547	gentransformfeedbacks: PFNGLGENTRANSFORMFEEDBACKSPROC,
11548	istransformfeedback: PFNGLISTRANSFORMFEEDBACKPROC,
11549	pausetransformfeedback: PFNGLPAUSETRANSFORMFEEDBACKPROC,
11550	resumetransformfeedback: PFNGLRESUMETRANSFORMFEEDBACKPROC,
11551	drawtransformfeedback: PFNGLDRAWTRANSFORMFEEDBACKPROC,
11552	drawtransformfeedbackstream: PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC,
11553	beginqueryindexed: PFNGLBEGINQUERYINDEXEDPROC,
11554	endqueryindexed: PFNGLENDQUERYINDEXEDPROC,
11555	getqueryindexediv: PFNGLGETQUERYINDEXEDIVPROC,
11556}
11557
11558impl GL_4_0 for Version40 {
11559	#[inline(always)]
11560	fn glGetError(&self) -> GLenum {
11561		(self.geterror)()
11562	}
11563	#[inline(always)]
11564	fn glMinSampleShading(&self, value: GLfloat) -> Result<()> {
11565		let ret = process_catch("glMinSampleShading", catch_unwind(||(self.minsampleshading)(value)));
11566		#[cfg(feature = "diagnose")]
11567		if let Ok(ret) = ret {
11568			return to_result("glMinSampleShading", ret, self.glGetError());
11569		} else {
11570			return ret
11571		}
11572		#[cfg(not(feature = "diagnose"))]
11573		return ret;
11574	}
11575	#[inline(always)]
11576	fn glBlendEquationi(&self, buf: GLuint, mode: GLenum) -> Result<()> {
11577		let ret = process_catch("glBlendEquationi", catch_unwind(||(self.blendequationi)(buf, mode)));
11578		#[cfg(feature = "diagnose")]
11579		if let Ok(ret) = ret {
11580			return to_result("glBlendEquationi", ret, self.glGetError());
11581		} else {
11582			return ret
11583		}
11584		#[cfg(not(feature = "diagnose"))]
11585		return ret;
11586	}
11587	#[inline(always)]
11588	fn glBlendEquationSeparatei(&self, buf: GLuint, modeRGB: GLenum, modeAlpha: GLenum) -> Result<()> {
11589		let ret = process_catch("glBlendEquationSeparatei", catch_unwind(||(self.blendequationseparatei)(buf, modeRGB, modeAlpha)));
11590		#[cfg(feature = "diagnose")]
11591		if let Ok(ret) = ret {
11592			return to_result("glBlendEquationSeparatei", ret, self.glGetError());
11593		} else {
11594			return ret
11595		}
11596		#[cfg(not(feature = "diagnose"))]
11597		return ret;
11598	}
11599	#[inline(always)]
11600	fn glBlendFunci(&self, buf: GLuint, src: GLenum, dst: GLenum) -> Result<()> {
11601		let ret = process_catch("glBlendFunci", catch_unwind(||(self.blendfunci)(buf, src, dst)));
11602		#[cfg(feature = "diagnose")]
11603		if let Ok(ret) = ret {
11604			return to_result("glBlendFunci", ret, self.glGetError());
11605		} else {
11606			return ret
11607		}
11608		#[cfg(not(feature = "diagnose"))]
11609		return ret;
11610	}
11611	#[inline(always)]
11612	fn glBlendFuncSeparatei(&self, buf: GLuint, srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum) -> Result<()> {
11613		let ret = process_catch("glBlendFuncSeparatei", catch_unwind(||(self.blendfuncseparatei)(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)));
11614		#[cfg(feature = "diagnose")]
11615		if let Ok(ret) = ret {
11616			return to_result("glBlendFuncSeparatei", ret, self.glGetError());
11617		} else {
11618			return ret
11619		}
11620		#[cfg(not(feature = "diagnose"))]
11621		return ret;
11622	}
11623	#[inline(always)]
11624	fn glDrawArraysIndirect(&self, mode: GLenum, indirect: *const c_void) -> Result<()> {
11625		let ret = process_catch("glDrawArraysIndirect", catch_unwind(||(self.drawarraysindirect)(mode, indirect)));
11626		#[cfg(feature = "diagnose")]
11627		if let Ok(ret) = ret {
11628			return to_result("glDrawArraysIndirect", ret, self.glGetError());
11629		} else {
11630			return ret
11631		}
11632		#[cfg(not(feature = "diagnose"))]
11633		return ret;
11634	}
11635	#[inline(always)]
11636	fn glDrawElementsIndirect(&self, mode: GLenum, type_: GLenum, indirect: *const c_void) -> Result<()> {
11637		let ret = process_catch("glDrawElementsIndirect", catch_unwind(||(self.drawelementsindirect)(mode, type_, indirect)));
11638		#[cfg(feature = "diagnose")]
11639		if let Ok(ret) = ret {
11640			return to_result("glDrawElementsIndirect", ret, self.glGetError());
11641		} else {
11642			return ret
11643		}
11644		#[cfg(not(feature = "diagnose"))]
11645		return ret;
11646	}
11647	#[inline(always)]
11648	fn glUniform1d(&self, location: GLint, x: GLdouble) -> Result<()> {
11649		let ret = process_catch("glUniform1d", catch_unwind(||(self.uniform1d)(location, x)));
11650		#[cfg(feature = "diagnose")]
11651		if let Ok(ret) = ret {
11652			return to_result("glUniform1d", ret, self.glGetError());
11653		} else {
11654			return ret
11655		}
11656		#[cfg(not(feature = "diagnose"))]
11657		return ret;
11658	}
11659	#[inline(always)]
11660	fn glUniform2d(&self, location: GLint, x: GLdouble, y: GLdouble) -> Result<()> {
11661		let ret = process_catch("glUniform2d", catch_unwind(||(self.uniform2d)(location, x, y)));
11662		#[cfg(feature = "diagnose")]
11663		if let Ok(ret) = ret {
11664			return to_result("glUniform2d", ret, self.glGetError());
11665		} else {
11666			return ret
11667		}
11668		#[cfg(not(feature = "diagnose"))]
11669		return ret;
11670	}
11671	#[inline(always)]
11672	fn glUniform3d(&self, location: GLint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()> {
11673		let ret = process_catch("glUniform3d", catch_unwind(||(self.uniform3d)(location, x, y, z)));
11674		#[cfg(feature = "diagnose")]
11675		if let Ok(ret) = ret {
11676			return to_result("glUniform3d", ret, self.glGetError());
11677		} else {
11678			return ret
11679		}
11680		#[cfg(not(feature = "diagnose"))]
11681		return ret;
11682	}
11683	#[inline(always)]
11684	fn glUniform4d(&self, location: GLint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()> {
11685		let ret = process_catch("glUniform4d", catch_unwind(||(self.uniform4d)(location, x, y, z, w)));
11686		#[cfg(feature = "diagnose")]
11687		if let Ok(ret) = ret {
11688			return to_result("glUniform4d", ret, self.glGetError());
11689		} else {
11690			return ret
11691		}
11692		#[cfg(not(feature = "diagnose"))]
11693		return ret;
11694	}
11695	#[inline(always)]
11696	fn glUniform1dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
11697		let ret = process_catch("glUniform1dv", catch_unwind(||(self.uniform1dv)(location, count, value)));
11698		#[cfg(feature = "diagnose")]
11699		if let Ok(ret) = ret {
11700			return to_result("glUniform1dv", ret, self.glGetError());
11701		} else {
11702			return ret
11703		}
11704		#[cfg(not(feature = "diagnose"))]
11705		return ret;
11706	}
11707	#[inline(always)]
11708	fn glUniform2dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
11709		let ret = process_catch("glUniform2dv", catch_unwind(||(self.uniform2dv)(location, count, value)));
11710		#[cfg(feature = "diagnose")]
11711		if let Ok(ret) = ret {
11712			return to_result("glUniform2dv", ret, self.glGetError());
11713		} else {
11714			return ret
11715		}
11716		#[cfg(not(feature = "diagnose"))]
11717		return ret;
11718	}
11719	#[inline(always)]
11720	fn glUniform3dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
11721		let ret = process_catch("glUniform3dv", catch_unwind(||(self.uniform3dv)(location, count, value)));
11722		#[cfg(feature = "diagnose")]
11723		if let Ok(ret) = ret {
11724			return to_result("glUniform3dv", ret, self.glGetError());
11725		} else {
11726			return ret
11727		}
11728		#[cfg(not(feature = "diagnose"))]
11729		return ret;
11730	}
11731	#[inline(always)]
11732	fn glUniform4dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
11733		let ret = process_catch("glUniform4dv", catch_unwind(||(self.uniform4dv)(location, count, value)));
11734		#[cfg(feature = "diagnose")]
11735		if let Ok(ret) = ret {
11736			return to_result("glUniform4dv", ret, self.glGetError());
11737		} else {
11738			return ret
11739		}
11740		#[cfg(not(feature = "diagnose"))]
11741		return ret;
11742	}
11743	#[inline(always)]
11744	fn glUniformMatrix2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11745		let ret = process_catch("glUniformMatrix2dv", catch_unwind(||(self.uniformmatrix2dv)(location, count, transpose, value)));
11746		#[cfg(feature = "diagnose")]
11747		if let Ok(ret) = ret {
11748			return to_result("glUniformMatrix2dv", ret, self.glGetError());
11749		} else {
11750			return ret
11751		}
11752		#[cfg(not(feature = "diagnose"))]
11753		return ret;
11754	}
11755	#[inline(always)]
11756	fn glUniformMatrix3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11757		let ret = process_catch("glUniformMatrix3dv", catch_unwind(||(self.uniformmatrix3dv)(location, count, transpose, value)));
11758		#[cfg(feature = "diagnose")]
11759		if let Ok(ret) = ret {
11760			return to_result("glUniformMatrix3dv", ret, self.glGetError());
11761		} else {
11762			return ret
11763		}
11764		#[cfg(not(feature = "diagnose"))]
11765		return ret;
11766	}
11767	#[inline(always)]
11768	fn glUniformMatrix4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11769		let ret = process_catch("glUniformMatrix4dv", catch_unwind(||(self.uniformmatrix4dv)(location, count, transpose, value)));
11770		#[cfg(feature = "diagnose")]
11771		if let Ok(ret) = ret {
11772			return to_result("glUniformMatrix4dv", ret, self.glGetError());
11773		} else {
11774			return ret
11775		}
11776		#[cfg(not(feature = "diagnose"))]
11777		return ret;
11778	}
11779	#[inline(always)]
11780	fn glUniformMatrix2x3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11781		let ret = process_catch("glUniformMatrix2x3dv", catch_unwind(||(self.uniformmatrix2x3dv)(location, count, transpose, value)));
11782		#[cfg(feature = "diagnose")]
11783		if let Ok(ret) = ret {
11784			return to_result("glUniformMatrix2x3dv", ret, self.glGetError());
11785		} else {
11786			return ret
11787		}
11788		#[cfg(not(feature = "diagnose"))]
11789		return ret;
11790	}
11791	#[inline(always)]
11792	fn glUniformMatrix2x4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11793		let ret = process_catch("glUniformMatrix2x4dv", catch_unwind(||(self.uniformmatrix2x4dv)(location, count, transpose, value)));
11794		#[cfg(feature = "diagnose")]
11795		if let Ok(ret) = ret {
11796			return to_result("glUniformMatrix2x4dv", ret, self.glGetError());
11797		} else {
11798			return ret
11799		}
11800		#[cfg(not(feature = "diagnose"))]
11801		return ret;
11802	}
11803	#[inline(always)]
11804	fn glUniformMatrix3x2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11805		let ret = process_catch("glUniformMatrix3x2dv", catch_unwind(||(self.uniformmatrix3x2dv)(location, count, transpose, value)));
11806		#[cfg(feature = "diagnose")]
11807		if let Ok(ret) = ret {
11808			return to_result("glUniformMatrix3x2dv", ret, self.glGetError());
11809		} else {
11810			return ret
11811		}
11812		#[cfg(not(feature = "diagnose"))]
11813		return ret;
11814	}
11815	#[inline(always)]
11816	fn glUniformMatrix3x4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11817		let ret = process_catch("glUniformMatrix3x4dv", catch_unwind(||(self.uniformmatrix3x4dv)(location, count, transpose, value)));
11818		#[cfg(feature = "diagnose")]
11819		if let Ok(ret) = ret {
11820			return to_result("glUniformMatrix3x4dv", ret, self.glGetError());
11821		} else {
11822			return ret
11823		}
11824		#[cfg(not(feature = "diagnose"))]
11825		return ret;
11826	}
11827	#[inline(always)]
11828	fn glUniformMatrix4x2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11829		let ret = process_catch("glUniformMatrix4x2dv", catch_unwind(||(self.uniformmatrix4x2dv)(location, count, transpose, value)));
11830		#[cfg(feature = "diagnose")]
11831		if let Ok(ret) = ret {
11832			return to_result("glUniformMatrix4x2dv", ret, self.glGetError());
11833		} else {
11834			return ret
11835		}
11836		#[cfg(not(feature = "diagnose"))]
11837		return ret;
11838	}
11839	#[inline(always)]
11840	fn glUniformMatrix4x3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
11841		let ret = process_catch("glUniformMatrix4x3dv", catch_unwind(||(self.uniformmatrix4x3dv)(location, count, transpose, value)));
11842		#[cfg(feature = "diagnose")]
11843		if let Ok(ret) = ret {
11844			return to_result("glUniformMatrix4x3dv", ret, self.glGetError());
11845		} else {
11846			return ret
11847		}
11848		#[cfg(not(feature = "diagnose"))]
11849		return ret;
11850	}
11851	#[inline(always)]
11852	fn glGetUniformdv(&self, program: GLuint, location: GLint, params: *mut GLdouble) -> Result<()> {
11853		let ret = process_catch("glGetUniformdv", catch_unwind(||(self.getuniformdv)(program, location, params)));
11854		#[cfg(feature = "diagnose")]
11855		if let Ok(ret) = ret {
11856			return to_result("glGetUniformdv", ret, self.glGetError());
11857		} else {
11858			return ret
11859		}
11860		#[cfg(not(feature = "diagnose"))]
11861		return ret;
11862	}
11863	#[inline(always)]
11864	fn glGetSubroutineUniformLocation(&self, program: GLuint, shadertype: GLenum, name: *const GLchar) -> Result<GLint> {
11865		let ret = process_catch("glGetSubroutineUniformLocation", catch_unwind(||(self.getsubroutineuniformlocation)(program, shadertype, name)));
11866		#[cfg(feature = "diagnose")]
11867		if let Ok(ret) = ret {
11868			return to_result("glGetSubroutineUniformLocation", ret, self.glGetError());
11869		} else {
11870			return ret
11871		}
11872		#[cfg(not(feature = "diagnose"))]
11873		return ret;
11874	}
11875	#[inline(always)]
11876	fn glGetSubroutineIndex(&self, program: GLuint, shadertype: GLenum, name: *const GLchar) -> Result<GLuint> {
11877		let ret = process_catch("glGetSubroutineIndex", catch_unwind(||(self.getsubroutineindex)(program, shadertype, name)));
11878		#[cfg(feature = "diagnose")]
11879		if let Ok(ret) = ret {
11880			return to_result("glGetSubroutineIndex", ret, self.glGetError());
11881		} else {
11882			return ret
11883		}
11884		#[cfg(not(feature = "diagnose"))]
11885		return ret;
11886	}
11887	#[inline(always)]
11888	fn glGetActiveSubroutineUniformiv(&self, program: GLuint, shadertype: GLenum, index: GLuint, pname: GLenum, values: *mut GLint) -> Result<()> {
11889		let ret = process_catch("glGetActiveSubroutineUniformiv", catch_unwind(||(self.getactivesubroutineuniformiv)(program, shadertype, index, pname, values)));
11890		#[cfg(feature = "diagnose")]
11891		if let Ok(ret) = ret {
11892			return to_result("glGetActiveSubroutineUniformiv", ret, self.glGetError());
11893		} else {
11894			return ret
11895		}
11896		#[cfg(not(feature = "diagnose"))]
11897		return ret;
11898	}
11899	#[inline(always)]
11900	fn glGetActiveSubroutineUniformName(&self, program: GLuint, shadertype: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()> {
11901		let ret = process_catch("glGetActiveSubroutineUniformName", catch_unwind(||(self.getactivesubroutineuniformname)(program, shadertype, index, bufSize, length, name)));
11902		#[cfg(feature = "diagnose")]
11903		if let Ok(ret) = ret {
11904			return to_result("glGetActiveSubroutineUniformName", ret, self.glGetError());
11905		} else {
11906			return ret
11907		}
11908		#[cfg(not(feature = "diagnose"))]
11909		return ret;
11910	}
11911	#[inline(always)]
11912	fn glGetActiveSubroutineName(&self, program: GLuint, shadertype: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()> {
11913		let ret = process_catch("glGetActiveSubroutineName", catch_unwind(||(self.getactivesubroutinename)(program, shadertype, index, bufSize, length, name)));
11914		#[cfg(feature = "diagnose")]
11915		if let Ok(ret) = ret {
11916			return to_result("glGetActiveSubroutineName", ret, self.glGetError());
11917		} else {
11918			return ret
11919		}
11920		#[cfg(not(feature = "diagnose"))]
11921		return ret;
11922	}
11923	#[inline(always)]
11924	fn glUniformSubroutinesuiv(&self, shadertype: GLenum, count: GLsizei, indices: *const GLuint) -> Result<()> {
11925		let ret = process_catch("glUniformSubroutinesuiv", catch_unwind(||(self.uniformsubroutinesuiv)(shadertype, count, indices)));
11926		#[cfg(feature = "diagnose")]
11927		if let Ok(ret) = ret {
11928			return to_result("glUniformSubroutinesuiv", ret, self.glGetError());
11929		} else {
11930			return ret
11931		}
11932		#[cfg(not(feature = "diagnose"))]
11933		return ret;
11934	}
11935	#[inline(always)]
11936	fn glGetUniformSubroutineuiv(&self, shadertype: GLenum, location: GLint, params: *mut GLuint) -> Result<()> {
11937		let ret = process_catch("glGetUniformSubroutineuiv", catch_unwind(||(self.getuniformsubroutineuiv)(shadertype, location, params)));
11938		#[cfg(feature = "diagnose")]
11939		if let Ok(ret) = ret {
11940			return to_result("glGetUniformSubroutineuiv", ret, self.glGetError());
11941		} else {
11942			return ret
11943		}
11944		#[cfg(not(feature = "diagnose"))]
11945		return ret;
11946	}
11947	#[inline(always)]
11948	fn glGetProgramStageiv(&self, program: GLuint, shadertype: GLenum, pname: GLenum, values: *mut GLint) -> Result<()> {
11949		let ret = process_catch("glGetProgramStageiv", catch_unwind(||(self.getprogramstageiv)(program, shadertype, pname, values)));
11950		#[cfg(feature = "diagnose")]
11951		if let Ok(ret) = ret {
11952			return to_result("glGetProgramStageiv", ret, self.glGetError());
11953		} else {
11954			return ret
11955		}
11956		#[cfg(not(feature = "diagnose"))]
11957		return ret;
11958	}
11959	#[inline(always)]
11960	fn glPatchParameteri(&self, pname: GLenum, value: GLint) -> Result<()> {
11961		let ret = process_catch("glPatchParameteri", catch_unwind(||(self.patchparameteri)(pname, value)));
11962		#[cfg(feature = "diagnose")]
11963		if let Ok(ret) = ret {
11964			return to_result("glPatchParameteri", ret, self.glGetError());
11965		} else {
11966			return ret
11967		}
11968		#[cfg(not(feature = "diagnose"))]
11969		return ret;
11970	}
11971	#[inline(always)]
11972	fn glPatchParameterfv(&self, pname: GLenum, values: *const GLfloat) -> Result<()> {
11973		let ret = process_catch("glPatchParameterfv", catch_unwind(||(self.patchparameterfv)(pname, values)));
11974		#[cfg(feature = "diagnose")]
11975		if let Ok(ret) = ret {
11976			return to_result("glPatchParameterfv", ret, self.glGetError());
11977		} else {
11978			return ret
11979		}
11980		#[cfg(not(feature = "diagnose"))]
11981		return ret;
11982	}
11983	#[inline(always)]
11984	fn glBindTransformFeedback(&self, target: GLenum, id: GLuint) -> Result<()> {
11985		let ret = process_catch("glBindTransformFeedback", catch_unwind(||(self.bindtransformfeedback)(target, id)));
11986		#[cfg(feature = "diagnose")]
11987		if let Ok(ret) = ret {
11988			return to_result("glBindTransformFeedback", ret, self.glGetError());
11989		} else {
11990			return ret
11991		}
11992		#[cfg(not(feature = "diagnose"))]
11993		return ret;
11994	}
11995	#[inline(always)]
11996	fn glDeleteTransformFeedbacks(&self, n: GLsizei, ids: *const GLuint) -> Result<()> {
11997		let ret = process_catch("glDeleteTransformFeedbacks", catch_unwind(||(self.deletetransformfeedbacks)(n, ids)));
11998		#[cfg(feature = "diagnose")]
11999		if let Ok(ret) = ret {
12000			return to_result("glDeleteTransformFeedbacks", ret, self.glGetError());
12001		} else {
12002			return ret
12003		}
12004		#[cfg(not(feature = "diagnose"))]
12005		return ret;
12006	}
12007	#[inline(always)]
12008	fn glGenTransformFeedbacks(&self, n: GLsizei, ids: *mut GLuint) -> Result<()> {
12009		let ret = process_catch("glGenTransformFeedbacks", catch_unwind(||(self.gentransformfeedbacks)(n, ids)));
12010		#[cfg(feature = "diagnose")]
12011		if let Ok(ret) = ret {
12012			return to_result("glGenTransformFeedbacks", ret, self.glGetError());
12013		} else {
12014			return ret
12015		}
12016		#[cfg(not(feature = "diagnose"))]
12017		return ret;
12018	}
12019	#[inline(always)]
12020	fn glIsTransformFeedback(&self, id: GLuint) -> Result<GLboolean> {
12021		let ret = process_catch("glIsTransformFeedback", catch_unwind(||(self.istransformfeedback)(id)));
12022		#[cfg(feature = "diagnose")]
12023		if let Ok(ret) = ret {
12024			return to_result("glIsTransformFeedback", ret, self.glGetError());
12025		} else {
12026			return ret
12027		}
12028		#[cfg(not(feature = "diagnose"))]
12029		return ret;
12030	}
12031	#[inline(always)]
12032	fn glPauseTransformFeedback(&self) -> Result<()> {
12033		let ret = process_catch("glPauseTransformFeedback", catch_unwind(||(self.pausetransformfeedback)()));
12034		#[cfg(feature = "diagnose")]
12035		if let Ok(ret) = ret {
12036			return to_result("glPauseTransformFeedback", ret, self.glGetError());
12037		} else {
12038			return ret
12039		}
12040		#[cfg(not(feature = "diagnose"))]
12041		return ret;
12042	}
12043	#[inline(always)]
12044	fn glResumeTransformFeedback(&self) -> Result<()> {
12045		let ret = process_catch("glResumeTransformFeedback", catch_unwind(||(self.resumetransformfeedback)()));
12046		#[cfg(feature = "diagnose")]
12047		if let Ok(ret) = ret {
12048			return to_result("glResumeTransformFeedback", ret, self.glGetError());
12049		} else {
12050			return ret
12051		}
12052		#[cfg(not(feature = "diagnose"))]
12053		return ret;
12054	}
12055	#[inline(always)]
12056	fn glDrawTransformFeedback(&self, mode: GLenum, id: GLuint) -> Result<()> {
12057		let ret = process_catch("glDrawTransformFeedback", catch_unwind(||(self.drawtransformfeedback)(mode, id)));
12058		#[cfg(feature = "diagnose")]
12059		if let Ok(ret) = ret {
12060			return to_result("glDrawTransformFeedback", ret, self.glGetError());
12061		} else {
12062			return ret
12063		}
12064		#[cfg(not(feature = "diagnose"))]
12065		return ret;
12066	}
12067	#[inline(always)]
12068	fn glDrawTransformFeedbackStream(&self, mode: GLenum, id: GLuint, stream: GLuint) -> Result<()> {
12069		let ret = process_catch("glDrawTransformFeedbackStream", catch_unwind(||(self.drawtransformfeedbackstream)(mode, id, stream)));
12070		#[cfg(feature = "diagnose")]
12071		if let Ok(ret) = ret {
12072			return to_result("glDrawTransformFeedbackStream", ret, self.glGetError());
12073		} else {
12074			return ret
12075		}
12076		#[cfg(not(feature = "diagnose"))]
12077		return ret;
12078	}
12079	#[inline(always)]
12080	fn glBeginQueryIndexed(&self, target: GLenum, index: GLuint, id: GLuint) -> Result<()> {
12081		let ret = process_catch("glBeginQueryIndexed", catch_unwind(||(self.beginqueryindexed)(target, index, id)));
12082		#[cfg(feature = "diagnose")]
12083		if let Ok(ret) = ret {
12084			return to_result("glBeginQueryIndexed", ret, self.glGetError());
12085		} else {
12086			return ret
12087		}
12088		#[cfg(not(feature = "diagnose"))]
12089		return ret;
12090	}
12091	#[inline(always)]
12092	fn glEndQueryIndexed(&self, target: GLenum, index: GLuint) -> Result<()> {
12093		let ret = process_catch("glEndQueryIndexed", catch_unwind(||(self.endqueryindexed)(target, index)));
12094		#[cfg(feature = "diagnose")]
12095		if let Ok(ret) = ret {
12096			return to_result("glEndQueryIndexed", ret, self.glGetError());
12097		} else {
12098			return ret
12099		}
12100		#[cfg(not(feature = "diagnose"))]
12101		return ret;
12102	}
12103	#[inline(always)]
12104	fn glGetQueryIndexediv(&self, target: GLenum, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
12105		let ret = process_catch("glGetQueryIndexediv", catch_unwind(||(self.getqueryindexediv)(target, index, pname, params)));
12106		#[cfg(feature = "diagnose")]
12107		if let Ok(ret) = ret {
12108			return to_result("glGetQueryIndexediv", ret, self.glGetError());
12109		} else {
12110			return ret
12111		}
12112		#[cfg(not(feature = "diagnose"))]
12113		return ret;
12114	}
12115}
12116
12117impl Version40 {
12118	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
12119		let (_spec, major, minor, release) = base.get_version();
12120		if (major, minor, release) < (4, 0, 0) {
12121			return Self::default();
12122		}
12123		Self {
12124			available: true,
12125			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
12126			minsampleshading: {let proc = get_proc_address("glMinSampleShading"); if proc == null() {dummy_pfnglminsampleshadingproc} else {unsafe{transmute(proc)}}},
12127			blendequationi: {let proc = get_proc_address("glBlendEquationi"); if proc == null() {dummy_pfnglblendequationiproc} else {unsafe{transmute(proc)}}},
12128			blendequationseparatei: {let proc = get_proc_address("glBlendEquationSeparatei"); if proc == null() {dummy_pfnglblendequationseparateiproc} else {unsafe{transmute(proc)}}},
12129			blendfunci: {let proc = get_proc_address("glBlendFunci"); if proc == null() {dummy_pfnglblendfunciproc} else {unsafe{transmute(proc)}}},
12130			blendfuncseparatei: {let proc = get_proc_address("glBlendFuncSeparatei"); if proc == null() {dummy_pfnglblendfuncseparateiproc} else {unsafe{transmute(proc)}}},
12131			drawarraysindirect: {let proc = get_proc_address("glDrawArraysIndirect"); if proc == null() {dummy_pfngldrawarraysindirectproc} else {unsafe{transmute(proc)}}},
12132			drawelementsindirect: {let proc = get_proc_address("glDrawElementsIndirect"); if proc == null() {dummy_pfngldrawelementsindirectproc} else {unsafe{transmute(proc)}}},
12133			uniform1d: {let proc = get_proc_address("glUniform1d"); if proc == null() {dummy_pfngluniform1dproc} else {unsafe{transmute(proc)}}},
12134			uniform2d: {let proc = get_proc_address("glUniform2d"); if proc == null() {dummy_pfngluniform2dproc} else {unsafe{transmute(proc)}}},
12135			uniform3d: {let proc = get_proc_address("glUniform3d"); if proc == null() {dummy_pfngluniform3dproc} else {unsafe{transmute(proc)}}},
12136			uniform4d: {let proc = get_proc_address("glUniform4d"); if proc == null() {dummy_pfngluniform4dproc} else {unsafe{transmute(proc)}}},
12137			uniform1dv: {let proc = get_proc_address("glUniform1dv"); if proc == null() {dummy_pfngluniform1dvproc} else {unsafe{transmute(proc)}}},
12138			uniform2dv: {let proc = get_proc_address("glUniform2dv"); if proc == null() {dummy_pfngluniform2dvproc} else {unsafe{transmute(proc)}}},
12139			uniform3dv: {let proc = get_proc_address("glUniform3dv"); if proc == null() {dummy_pfngluniform3dvproc} else {unsafe{transmute(proc)}}},
12140			uniform4dv: {let proc = get_proc_address("glUniform4dv"); if proc == null() {dummy_pfngluniform4dvproc} else {unsafe{transmute(proc)}}},
12141			uniformmatrix2dv: {let proc = get_proc_address("glUniformMatrix2dv"); if proc == null() {dummy_pfngluniformmatrix2dvproc} else {unsafe{transmute(proc)}}},
12142			uniformmatrix3dv: {let proc = get_proc_address("glUniformMatrix3dv"); if proc == null() {dummy_pfngluniformmatrix3dvproc} else {unsafe{transmute(proc)}}},
12143			uniformmatrix4dv: {let proc = get_proc_address("glUniformMatrix4dv"); if proc == null() {dummy_pfngluniformmatrix4dvproc} else {unsafe{transmute(proc)}}},
12144			uniformmatrix2x3dv: {let proc = get_proc_address("glUniformMatrix2x3dv"); if proc == null() {dummy_pfngluniformmatrix2x3dvproc} else {unsafe{transmute(proc)}}},
12145			uniformmatrix2x4dv: {let proc = get_proc_address("glUniformMatrix2x4dv"); if proc == null() {dummy_pfngluniformmatrix2x4dvproc} else {unsafe{transmute(proc)}}},
12146			uniformmatrix3x2dv: {let proc = get_proc_address("glUniformMatrix3x2dv"); if proc == null() {dummy_pfngluniformmatrix3x2dvproc} else {unsafe{transmute(proc)}}},
12147			uniformmatrix3x4dv: {let proc = get_proc_address("glUniformMatrix3x4dv"); if proc == null() {dummy_pfngluniformmatrix3x4dvproc} else {unsafe{transmute(proc)}}},
12148			uniformmatrix4x2dv: {let proc = get_proc_address("glUniformMatrix4x2dv"); if proc == null() {dummy_pfngluniformmatrix4x2dvproc} else {unsafe{transmute(proc)}}},
12149			uniformmatrix4x3dv: {let proc = get_proc_address("glUniformMatrix4x3dv"); if proc == null() {dummy_pfngluniformmatrix4x3dvproc} else {unsafe{transmute(proc)}}},
12150			getuniformdv: {let proc = get_proc_address("glGetUniformdv"); if proc == null() {dummy_pfnglgetuniformdvproc} else {unsafe{transmute(proc)}}},
12151			getsubroutineuniformlocation: {let proc = get_proc_address("glGetSubroutineUniformLocation"); if proc == null() {dummy_pfnglgetsubroutineuniformlocationproc} else {unsafe{transmute(proc)}}},
12152			getsubroutineindex: {let proc = get_proc_address("glGetSubroutineIndex"); if proc == null() {dummy_pfnglgetsubroutineindexproc} else {unsafe{transmute(proc)}}},
12153			getactivesubroutineuniformiv: {let proc = get_proc_address("glGetActiveSubroutineUniformiv"); if proc == null() {dummy_pfnglgetactivesubroutineuniformivproc} else {unsafe{transmute(proc)}}},
12154			getactivesubroutineuniformname: {let proc = get_proc_address("glGetActiveSubroutineUniformName"); if proc == null() {dummy_pfnglgetactivesubroutineuniformnameproc} else {unsafe{transmute(proc)}}},
12155			getactivesubroutinename: {let proc = get_proc_address("glGetActiveSubroutineName"); if proc == null() {dummy_pfnglgetactivesubroutinenameproc} else {unsafe{transmute(proc)}}},
12156			uniformsubroutinesuiv: {let proc = get_proc_address("glUniformSubroutinesuiv"); if proc == null() {dummy_pfngluniformsubroutinesuivproc} else {unsafe{transmute(proc)}}},
12157			getuniformsubroutineuiv: {let proc = get_proc_address("glGetUniformSubroutineuiv"); if proc == null() {dummy_pfnglgetuniformsubroutineuivproc} else {unsafe{transmute(proc)}}},
12158			getprogramstageiv: {let proc = get_proc_address("glGetProgramStageiv"); if proc == null() {dummy_pfnglgetprogramstageivproc} else {unsafe{transmute(proc)}}},
12159			patchparameteri: {let proc = get_proc_address("glPatchParameteri"); if proc == null() {dummy_pfnglpatchparameteriproc} else {unsafe{transmute(proc)}}},
12160			patchparameterfv: {let proc = get_proc_address("glPatchParameterfv"); if proc == null() {dummy_pfnglpatchparameterfvproc} else {unsafe{transmute(proc)}}},
12161			bindtransformfeedback: {let proc = get_proc_address("glBindTransformFeedback"); if proc == null() {dummy_pfnglbindtransformfeedbackproc} else {unsafe{transmute(proc)}}},
12162			deletetransformfeedbacks: {let proc = get_proc_address("glDeleteTransformFeedbacks"); if proc == null() {dummy_pfngldeletetransformfeedbacksproc} else {unsafe{transmute(proc)}}},
12163			gentransformfeedbacks: {let proc = get_proc_address("glGenTransformFeedbacks"); if proc == null() {dummy_pfnglgentransformfeedbacksproc} else {unsafe{transmute(proc)}}},
12164			istransformfeedback: {let proc = get_proc_address("glIsTransformFeedback"); if proc == null() {dummy_pfnglistransformfeedbackproc} else {unsafe{transmute(proc)}}},
12165			pausetransformfeedback: {let proc = get_proc_address("glPauseTransformFeedback"); if proc == null() {dummy_pfnglpausetransformfeedbackproc} else {unsafe{transmute(proc)}}},
12166			resumetransformfeedback: {let proc = get_proc_address("glResumeTransformFeedback"); if proc == null() {dummy_pfnglresumetransformfeedbackproc} else {unsafe{transmute(proc)}}},
12167			drawtransformfeedback: {let proc = get_proc_address("glDrawTransformFeedback"); if proc == null() {dummy_pfngldrawtransformfeedbackproc} else {unsafe{transmute(proc)}}},
12168			drawtransformfeedbackstream: {let proc = get_proc_address("glDrawTransformFeedbackStream"); if proc == null() {dummy_pfngldrawtransformfeedbackstreamproc} else {unsafe{transmute(proc)}}},
12169			beginqueryindexed: {let proc = get_proc_address("glBeginQueryIndexed"); if proc == null() {dummy_pfnglbeginqueryindexedproc} else {unsafe{transmute(proc)}}},
12170			endqueryindexed: {let proc = get_proc_address("glEndQueryIndexed"); if proc == null() {dummy_pfnglendqueryindexedproc} else {unsafe{transmute(proc)}}},
12171			getqueryindexediv: {let proc = get_proc_address("glGetQueryIndexediv"); if proc == null() {dummy_pfnglgetqueryindexedivproc} else {unsafe{transmute(proc)}}},
12172		}
12173	}
12174	#[inline(always)]
12175	pub fn get_available(&self) -> bool {
12176		self.available
12177	}
12178}
12179
12180impl Default for Version40 {
12181	fn default() -> Self {
12182		Self {
12183			available: false,
12184			geterror: dummy_pfnglgeterrorproc,
12185			minsampleshading: dummy_pfnglminsampleshadingproc,
12186			blendequationi: dummy_pfnglblendequationiproc,
12187			blendequationseparatei: dummy_pfnglblendequationseparateiproc,
12188			blendfunci: dummy_pfnglblendfunciproc,
12189			blendfuncseparatei: dummy_pfnglblendfuncseparateiproc,
12190			drawarraysindirect: dummy_pfngldrawarraysindirectproc,
12191			drawelementsindirect: dummy_pfngldrawelementsindirectproc,
12192			uniform1d: dummy_pfngluniform1dproc,
12193			uniform2d: dummy_pfngluniform2dproc,
12194			uniform3d: dummy_pfngluniform3dproc,
12195			uniform4d: dummy_pfngluniform4dproc,
12196			uniform1dv: dummy_pfngluniform1dvproc,
12197			uniform2dv: dummy_pfngluniform2dvproc,
12198			uniform3dv: dummy_pfngluniform3dvproc,
12199			uniform4dv: dummy_pfngluniform4dvproc,
12200			uniformmatrix2dv: dummy_pfngluniformmatrix2dvproc,
12201			uniformmatrix3dv: dummy_pfngluniformmatrix3dvproc,
12202			uniformmatrix4dv: dummy_pfngluniformmatrix4dvproc,
12203			uniformmatrix2x3dv: dummy_pfngluniformmatrix2x3dvproc,
12204			uniformmatrix2x4dv: dummy_pfngluniformmatrix2x4dvproc,
12205			uniformmatrix3x2dv: dummy_pfngluniformmatrix3x2dvproc,
12206			uniformmatrix3x4dv: dummy_pfngluniformmatrix3x4dvproc,
12207			uniformmatrix4x2dv: dummy_pfngluniformmatrix4x2dvproc,
12208			uniformmatrix4x3dv: dummy_pfngluniformmatrix4x3dvproc,
12209			getuniformdv: dummy_pfnglgetuniformdvproc,
12210			getsubroutineuniformlocation: dummy_pfnglgetsubroutineuniformlocationproc,
12211			getsubroutineindex: dummy_pfnglgetsubroutineindexproc,
12212			getactivesubroutineuniformiv: dummy_pfnglgetactivesubroutineuniformivproc,
12213			getactivesubroutineuniformname: dummy_pfnglgetactivesubroutineuniformnameproc,
12214			getactivesubroutinename: dummy_pfnglgetactivesubroutinenameproc,
12215			uniformsubroutinesuiv: dummy_pfngluniformsubroutinesuivproc,
12216			getuniformsubroutineuiv: dummy_pfnglgetuniformsubroutineuivproc,
12217			getprogramstageiv: dummy_pfnglgetprogramstageivproc,
12218			patchparameteri: dummy_pfnglpatchparameteriproc,
12219			patchparameterfv: dummy_pfnglpatchparameterfvproc,
12220			bindtransformfeedback: dummy_pfnglbindtransformfeedbackproc,
12221			deletetransformfeedbacks: dummy_pfngldeletetransformfeedbacksproc,
12222			gentransformfeedbacks: dummy_pfnglgentransformfeedbacksproc,
12223			istransformfeedback: dummy_pfnglistransformfeedbackproc,
12224			pausetransformfeedback: dummy_pfnglpausetransformfeedbackproc,
12225			resumetransformfeedback: dummy_pfnglresumetransformfeedbackproc,
12226			drawtransformfeedback: dummy_pfngldrawtransformfeedbackproc,
12227			drawtransformfeedbackstream: dummy_pfngldrawtransformfeedbackstreamproc,
12228			beginqueryindexed: dummy_pfnglbeginqueryindexedproc,
12229			endqueryindexed: dummy_pfnglendqueryindexedproc,
12230			getqueryindexediv: dummy_pfnglgetqueryindexedivproc,
12231		}
12232	}
12233}
12234impl Debug for Version40 {
12235	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
12236		if self.available {
12237			f.debug_struct("Version40")
12238			.field("available", &self.available)
12239			.field("minsampleshading", unsafe{if transmute::<_, *const c_void>(self.minsampleshading) == (dummy_pfnglminsampleshadingproc as *const c_void) {&null::<PFNGLMINSAMPLESHADINGPROC>()} else {&self.minsampleshading}})
12240			.field("blendequationi", unsafe{if transmute::<_, *const c_void>(self.blendequationi) == (dummy_pfnglblendequationiproc as *const c_void) {&null::<PFNGLBLENDEQUATIONIPROC>()} else {&self.blendequationi}})
12241			.field("blendequationseparatei", unsafe{if transmute::<_, *const c_void>(self.blendequationseparatei) == (dummy_pfnglblendequationseparateiproc as *const c_void) {&null::<PFNGLBLENDEQUATIONSEPARATEIPROC>()} else {&self.blendequationseparatei}})
12242			.field("blendfunci", unsafe{if transmute::<_, *const c_void>(self.blendfunci) == (dummy_pfnglblendfunciproc as *const c_void) {&null::<PFNGLBLENDFUNCIPROC>()} else {&self.blendfunci}})
12243			.field("blendfuncseparatei", unsafe{if transmute::<_, *const c_void>(self.blendfuncseparatei) == (dummy_pfnglblendfuncseparateiproc as *const c_void) {&null::<PFNGLBLENDFUNCSEPARATEIPROC>()} else {&self.blendfuncseparatei}})
12244			.field("drawarraysindirect", unsafe{if transmute::<_, *const c_void>(self.drawarraysindirect) == (dummy_pfngldrawarraysindirectproc as *const c_void) {&null::<PFNGLDRAWARRAYSINDIRECTPROC>()} else {&self.drawarraysindirect}})
12245			.field("drawelementsindirect", unsafe{if transmute::<_, *const c_void>(self.drawelementsindirect) == (dummy_pfngldrawelementsindirectproc as *const c_void) {&null::<PFNGLDRAWELEMENTSINDIRECTPROC>()} else {&self.drawelementsindirect}})
12246			.field("uniform1d", unsafe{if transmute::<_, *const c_void>(self.uniform1d) == (dummy_pfngluniform1dproc as *const c_void) {&null::<PFNGLUNIFORM1DPROC>()} else {&self.uniform1d}})
12247			.field("uniform2d", unsafe{if transmute::<_, *const c_void>(self.uniform2d) == (dummy_pfngluniform2dproc as *const c_void) {&null::<PFNGLUNIFORM2DPROC>()} else {&self.uniform2d}})
12248			.field("uniform3d", unsafe{if transmute::<_, *const c_void>(self.uniform3d) == (dummy_pfngluniform3dproc as *const c_void) {&null::<PFNGLUNIFORM3DPROC>()} else {&self.uniform3d}})
12249			.field("uniform4d", unsafe{if transmute::<_, *const c_void>(self.uniform4d) == (dummy_pfngluniform4dproc as *const c_void) {&null::<PFNGLUNIFORM4DPROC>()} else {&self.uniform4d}})
12250			.field("uniform1dv", unsafe{if transmute::<_, *const c_void>(self.uniform1dv) == (dummy_pfngluniform1dvproc as *const c_void) {&null::<PFNGLUNIFORM1DVPROC>()} else {&self.uniform1dv}})
12251			.field("uniform2dv", unsafe{if transmute::<_, *const c_void>(self.uniform2dv) == (dummy_pfngluniform2dvproc as *const c_void) {&null::<PFNGLUNIFORM2DVPROC>()} else {&self.uniform2dv}})
12252			.field("uniform3dv", unsafe{if transmute::<_, *const c_void>(self.uniform3dv) == (dummy_pfngluniform3dvproc as *const c_void) {&null::<PFNGLUNIFORM3DVPROC>()} else {&self.uniform3dv}})
12253			.field("uniform4dv", unsafe{if transmute::<_, *const c_void>(self.uniform4dv) == (dummy_pfngluniform4dvproc as *const c_void) {&null::<PFNGLUNIFORM4DVPROC>()} else {&self.uniform4dv}})
12254			.field("uniformmatrix2dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix2dv) == (dummy_pfngluniformmatrix2dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX2DVPROC>()} else {&self.uniformmatrix2dv}})
12255			.field("uniformmatrix3dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix3dv) == (dummy_pfngluniformmatrix3dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX3DVPROC>()} else {&self.uniformmatrix3dv}})
12256			.field("uniformmatrix4dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix4dv) == (dummy_pfngluniformmatrix4dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX4DVPROC>()} else {&self.uniformmatrix4dv}})
12257			.field("uniformmatrix2x3dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix2x3dv) == (dummy_pfngluniformmatrix2x3dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX2X3DVPROC>()} else {&self.uniformmatrix2x3dv}})
12258			.field("uniformmatrix2x4dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix2x4dv) == (dummy_pfngluniformmatrix2x4dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX2X4DVPROC>()} else {&self.uniformmatrix2x4dv}})
12259			.field("uniformmatrix3x2dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix3x2dv) == (dummy_pfngluniformmatrix3x2dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX3X2DVPROC>()} else {&self.uniformmatrix3x2dv}})
12260			.field("uniformmatrix3x4dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix3x4dv) == (dummy_pfngluniformmatrix3x4dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX3X4DVPROC>()} else {&self.uniformmatrix3x4dv}})
12261			.field("uniformmatrix4x2dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix4x2dv) == (dummy_pfngluniformmatrix4x2dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX4X2DVPROC>()} else {&self.uniformmatrix4x2dv}})
12262			.field("uniformmatrix4x3dv", unsafe{if transmute::<_, *const c_void>(self.uniformmatrix4x3dv) == (dummy_pfngluniformmatrix4x3dvproc as *const c_void) {&null::<PFNGLUNIFORMMATRIX4X3DVPROC>()} else {&self.uniformmatrix4x3dv}})
12263			.field("getuniformdv", unsafe{if transmute::<_, *const c_void>(self.getuniformdv) == (dummy_pfnglgetuniformdvproc as *const c_void) {&null::<PFNGLGETUNIFORMDVPROC>()} else {&self.getuniformdv}})
12264			.field("getsubroutineuniformlocation", unsafe{if transmute::<_, *const c_void>(self.getsubroutineuniformlocation) == (dummy_pfnglgetsubroutineuniformlocationproc as *const c_void) {&null::<PFNGLGETSUBROUTINEUNIFORMLOCATIONPROC>()} else {&self.getsubroutineuniformlocation}})
12265			.field("getsubroutineindex", unsafe{if transmute::<_, *const c_void>(self.getsubroutineindex) == (dummy_pfnglgetsubroutineindexproc as *const c_void) {&null::<PFNGLGETSUBROUTINEINDEXPROC>()} else {&self.getsubroutineindex}})
12266			.field("getactivesubroutineuniformiv", unsafe{if transmute::<_, *const c_void>(self.getactivesubroutineuniformiv) == (dummy_pfnglgetactivesubroutineuniformivproc as *const c_void) {&null::<PFNGLGETACTIVESUBROUTINEUNIFORMIVPROC>()} else {&self.getactivesubroutineuniformiv}})
12267			.field("getactivesubroutineuniformname", unsafe{if transmute::<_, *const c_void>(self.getactivesubroutineuniformname) == (dummy_pfnglgetactivesubroutineuniformnameproc as *const c_void) {&null::<PFNGLGETACTIVESUBROUTINEUNIFORMNAMEPROC>()} else {&self.getactivesubroutineuniformname}})
12268			.field("getactivesubroutinename", unsafe{if transmute::<_, *const c_void>(self.getactivesubroutinename) == (dummy_pfnglgetactivesubroutinenameproc as *const c_void) {&null::<PFNGLGETACTIVESUBROUTINENAMEPROC>()} else {&self.getactivesubroutinename}})
12269			.field("uniformsubroutinesuiv", unsafe{if transmute::<_, *const c_void>(self.uniformsubroutinesuiv) == (dummy_pfngluniformsubroutinesuivproc as *const c_void) {&null::<PFNGLUNIFORMSUBROUTINESUIVPROC>()} else {&self.uniformsubroutinesuiv}})
12270			.field("getuniformsubroutineuiv", unsafe{if transmute::<_, *const c_void>(self.getuniformsubroutineuiv) == (dummy_pfnglgetuniformsubroutineuivproc as *const c_void) {&null::<PFNGLGETUNIFORMSUBROUTINEUIVPROC>()} else {&self.getuniformsubroutineuiv}})
12271			.field("getprogramstageiv", unsafe{if transmute::<_, *const c_void>(self.getprogramstageiv) == (dummy_pfnglgetprogramstageivproc as *const c_void) {&null::<PFNGLGETPROGRAMSTAGEIVPROC>()} else {&self.getprogramstageiv}})
12272			.field("patchparameteri", unsafe{if transmute::<_, *const c_void>(self.patchparameteri) == (dummy_pfnglpatchparameteriproc as *const c_void) {&null::<PFNGLPATCHPARAMETERIPROC>()} else {&self.patchparameteri}})
12273			.field("patchparameterfv", unsafe{if transmute::<_, *const c_void>(self.patchparameterfv) == (dummy_pfnglpatchparameterfvproc as *const c_void) {&null::<PFNGLPATCHPARAMETERFVPROC>()} else {&self.patchparameterfv}})
12274			.field("bindtransformfeedback", unsafe{if transmute::<_, *const c_void>(self.bindtransformfeedback) == (dummy_pfnglbindtransformfeedbackproc as *const c_void) {&null::<PFNGLBINDTRANSFORMFEEDBACKPROC>()} else {&self.bindtransformfeedback}})
12275			.field("deletetransformfeedbacks", unsafe{if transmute::<_, *const c_void>(self.deletetransformfeedbacks) == (dummy_pfngldeletetransformfeedbacksproc as *const c_void) {&null::<PFNGLDELETETRANSFORMFEEDBACKSPROC>()} else {&self.deletetransformfeedbacks}})
12276			.field("gentransformfeedbacks", unsafe{if transmute::<_, *const c_void>(self.gentransformfeedbacks) == (dummy_pfnglgentransformfeedbacksproc as *const c_void) {&null::<PFNGLGENTRANSFORMFEEDBACKSPROC>()} else {&self.gentransformfeedbacks}})
12277			.field("istransformfeedback", unsafe{if transmute::<_, *const c_void>(self.istransformfeedback) == (dummy_pfnglistransformfeedbackproc as *const c_void) {&null::<PFNGLISTRANSFORMFEEDBACKPROC>()} else {&self.istransformfeedback}})
12278			.field("pausetransformfeedback", unsafe{if transmute::<_, *const c_void>(self.pausetransformfeedback) == (dummy_pfnglpausetransformfeedbackproc as *const c_void) {&null::<PFNGLPAUSETRANSFORMFEEDBACKPROC>()} else {&self.pausetransformfeedback}})
12279			.field("resumetransformfeedback", unsafe{if transmute::<_, *const c_void>(self.resumetransformfeedback) == (dummy_pfnglresumetransformfeedbackproc as *const c_void) {&null::<PFNGLRESUMETRANSFORMFEEDBACKPROC>()} else {&self.resumetransformfeedback}})
12280			.field("drawtransformfeedback", unsafe{if transmute::<_, *const c_void>(self.drawtransformfeedback) == (dummy_pfngldrawtransformfeedbackproc as *const c_void) {&null::<PFNGLDRAWTRANSFORMFEEDBACKPROC>()} else {&self.drawtransformfeedback}})
12281			.field("drawtransformfeedbackstream", unsafe{if transmute::<_, *const c_void>(self.drawtransformfeedbackstream) == (dummy_pfngldrawtransformfeedbackstreamproc as *const c_void) {&null::<PFNGLDRAWTRANSFORMFEEDBACKSTREAMPROC>()} else {&self.drawtransformfeedbackstream}})
12282			.field("beginqueryindexed", unsafe{if transmute::<_, *const c_void>(self.beginqueryindexed) == (dummy_pfnglbeginqueryindexedproc as *const c_void) {&null::<PFNGLBEGINQUERYINDEXEDPROC>()} else {&self.beginqueryindexed}})
12283			.field("endqueryindexed", unsafe{if transmute::<_, *const c_void>(self.endqueryindexed) == (dummy_pfnglendqueryindexedproc as *const c_void) {&null::<PFNGLENDQUERYINDEXEDPROC>()} else {&self.endqueryindexed}})
12284			.field("getqueryindexediv", unsafe{if transmute::<_, *const c_void>(self.getqueryindexediv) == (dummy_pfnglgetqueryindexedivproc as *const c_void) {&null::<PFNGLGETQUERYINDEXEDIVPROC>()} else {&self.getqueryindexediv}})
12285			.finish()
12286		} else {
12287			f.debug_struct("Version40")
12288			.field("available", &self.available)
12289			.finish_non_exhaustive()
12290		}
12291	}
12292}
12293type PFNGLRELEASESHADERCOMPILERPROC = extern "system" fn();
12294type PFNGLSHADERBINARYPROC = extern "system" fn(GLsizei, *const GLuint, GLenum, *const c_void, GLsizei);
12295type PFNGLGETSHADERPRECISIONFORMATPROC = extern "system" fn(GLenum, GLenum, *mut GLint, *mut GLint);
12296type PFNGLDEPTHRANGEFPROC = extern "system" fn(GLfloat, GLfloat);
12297type PFNGLCLEARDEPTHFPROC = extern "system" fn(GLfloat);
12298type PFNGLGETPROGRAMBINARYPROC = extern "system" fn(GLuint, GLsizei, *mut GLsizei, *mut GLenum, *mut c_void);
12299type PFNGLPROGRAMBINARYPROC = extern "system" fn(GLuint, GLenum, *const c_void, GLsizei);
12300type PFNGLPROGRAMPARAMETERIPROC = extern "system" fn(GLuint, GLenum, GLint);
12301type PFNGLUSEPROGRAMSTAGESPROC = extern "system" fn(GLuint, GLbitfield, GLuint);
12302type PFNGLACTIVESHADERPROGRAMPROC = extern "system" fn(GLuint, GLuint);
12303type PFNGLCREATESHADERPROGRAMVPROC = extern "system" fn(GLenum, GLsizei, *const *const GLchar) -> GLuint;
12304type PFNGLBINDPROGRAMPIPELINEPROC = extern "system" fn(GLuint);
12305type PFNGLDELETEPROGRAMPIPELINESPROC = extern "system" fn(GLsizei, *const GLuint);
12306type PFNGLGENPROGRAMPIPELINESPROC = extern "system" fn(GLsizei, *mut GLuint);
12307type PFNGLISPROGRAMPIPELINEPROC = extern "system" fn(GLuint) -> GLboolean;
12308type PFNGLGETPROGRAMPIPELINEIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
12309type PFNGLPROGRAMUNIFORM1IPROC = extern "system" fn(GLuint, GLint, GLint);
12310type PFNGLPROGRAMUNIFORM1IVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLint);
12311type PFNGLPROGRAMUNIFORM1FPROC = extern "system" fn(GLuint, GLint, GLfloat);
12312type PFNGLPROGRAMUNIFORM1FVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLfloat);
12313type PFNGLPROGRAMUNIFORM1DPROC = extern "system" fn(GLuint, GLint, GLdouble);
12314type PFNGLPROGRAMUNIFORM1DVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLdouble);
12315type PFNGLPROGRAMUNIFORM1UIPROC = extern "system" fn(GLuint, GLint, GLuint);
12316type PFNGLPROGRAMUNIFORM1UIVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLuint);
12317type PFNGLPROGRAMUNIFORM2IPROC = extern "system" fn(GLuint, GLint, GLint, GLint);
12318type PFNGLPROGRAMUNIFORM2IVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLint);
12319type PFNGLPROGRAMUNIFORM2FPROC = extern "system" fn(GLuint, GLint, GLfloat, GLfloat);
12320type PFNGLPROGRAMUNIFORM2FVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLfloat);
12321type PFNGLPROGRAMUNIFORM2DPROC = extern "system" fn(GLuint, GLint, GLdouble, GLdouble);
12322type PFNGLPROGRAMUNIFORM2DVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLdouble);
12323type PFNGLPROGRAMUNIFORM2UIPROC = extern "system" fn(GLuint, GLint, GLuint, GLuint);
12324type PFNGLPROGRAMUNIFORM2UIVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLuint);
12325type PFNGLPROGRAMUNIFORM3IPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint);
12326type PFNGLPROGRAMUNIFORM3IVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLint);
12327type PFNGLPROGRAMUNIFORM3FPROC = extern "system" fn(GLuint, GLint, GLfloat, GLfloat, GLfloat);
12328type PFNGLPROGRAMUNIFORM3FVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLfloat);
12329type PFNGLPROGRAMUNIFORM3DPROC = extern "system" fn(GLuint, GLint, GLdouble, GLdouble, GLdouble);
12330type PFNGLPROGRAMUNIFORM3DVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLdouble);
12331type PFNGLPROGRAMUNIFORM3UIPROC = extern "system" fn(GLuint, GLint, GLuint, GLuint, GLuint);
12332type PFNGLPROGRAMUNIFORM3UIVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLuint);
12333type PFNGLPROGRAMUNIFORM4IPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLint);
12334type PFNGLPROGRAMUNIFORM4IVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLint);
12335type PFNGLPROGRAMUNIFORM4FPROC = extern "system" fn(GLuint, GLint, GLfloat, GLfloat, GLfloat, GLfloat);
12336type PFNGLPROGRAMUNIFORM4FVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLfloat);
12337type PFNGLPROGRAMUNIFORM4DPROC = extern "system" fn(GLuint, GLint, GLdouble, GLdouble, GLdouble, GLdouble);
12338type PFNGLPROGRAMUNIFORM4DVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLdouble);
12339type PFNGLPROGRAMUNIFORM4UIPROC = extern "system" fn(GLuint, GLint, GLuint, GLuint, GLuint, GLuint);
12340type PFNGLPROGRAMUNIFORM4UIVPROC = extern "system" fn(GLuint, GLint, GLsizei, *const GLuint);
12341type PFNGLPROGRAMUNIFORMMATRIX2FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12342type PFNGLPROGRAMUNIFORMMATRIX3FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12343type PFNGLPROGRAMUNIFORMMATRIX4FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12344type PFNGLPROGRAMUNIFORMMATRIX2DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12345type PFNGLPROGRAMUNIFORMMATRIX3DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12346type PFNGLPROGRAMUNIFORMMATRIX4DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12347type PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12348type PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12349type PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12350type PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12351type PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12352type PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLfloat);
12353type PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12354type PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12355type PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12356type PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12357type PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12358type PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC = extern "system" fn(GLuint, GLint, GLsizei, GLboolean, *const GLdouble);
12359type PFNGLVALIDATEPROGRAMPIPELINEPROC = extern "system" fn(GLuint);
12360type PFNGLGETPROGRAMPIPELINEINFOLOGPROC = extern "system" fn(GLuint, GLsizei, *mut GLsizei, *mut GLchar);
12361type PFNGLVERTEXATTRIBL1DPROC = extern "system" fn(GLuint, GLdouble);
12362type PFNGLVERTEXATTRIBL2DPROC = extern "system" fn(GLuint, GLdouble, GLdouble);
12363type PFNGLVERTEXATTRIBL3DPROC = extern "system" fn(GLuint, GLdouble, GLdouble, GLdouble);
12364type PFNGLVERTEXATTRIBL4DPROC = extern "system" fn(GLuint, GLdouble, GLdouble, GLdouble, GLdouble);
12365type PFNGLVERTEXATTRIBL1DVPROC = extern "system" fn(GLuint, *const GLdouble);
12366type PFNGLVERTEXATTRIBL2DVPROC = extern "system" fn(GLuint, *const GLdouble);
12367type PFNGLVERTEXATTRIBL3DVPROC = extern "system" fn(GLuint, *const GLdouble);
12368type PFNGLVERTEXATTRIBL4DVPROC = extern "system" fn(GLuint, *const GLdouble);
12369type PFNGLVERTEXATTRIBLPOINTERPROC = extern "system" fn(GLuint, GLint, GLenum, GLsizei, *const c_void);
12370type PFNGLGETVERTEXATTRIBLDVPROC = extern "system" fn(GLuint, GLenum, *mut GLdouble);
12371type PFNGLVIEWPORTARRAYVPROC = extern "system" fn(GLuint, GLsizei, *const GLfloat);
12372type PFNGLVIEWPORTINDEXEDFPROC = extern "system" fn(GLuint, GLfloat, GLfloat, GLfloat, GLfloat);
12373type PFNGLVIEWPORTINDEXEDFVPROC = extern "system" fn(GLuint, *const GLfloat);
12374type PFNGLSCISSORARRAYVPROC = extern "system" fn(GLuint, GLsizei, *const GLint);
12375type PFNGLSCISSORINDEXEDPROC = extern "system" fn(GLuint, GLint, GLint, GLsizei, GLsizei);
12376type PFNGLSCISSORINDEXEDVPROC = extern "system" fn(GLuint, *const GLint);
12377type PFNGLDEPTHRANGEARRAYVPROC = extern "system" fn(GLuint, GLsizei, *const GLdouble);
12378type PFNGLDEPTHRANGEINDEXEDPROC = extern "system" fn(GLuint, GLdouble, GLdouble);
12379type PFNGLGETFLOATI_VPROC = extern "system" fn(GLenum, GLuint, *mut GLfloat);
12380type PFNGLGETDOUBLEI_VPROC = extern "system" fn(GLenum, GLuint, *mut GLdouble);
12381extern "system" fn dummy_pfnglreleaseshadercompilerproc () {
12382	panic!("OpenGL function pointer `glReleaseShaderCompiler()` is null.")
12383}
12384extern "system" fn dummy_pfnglshaderbinaryproc (_: GLsizei, _: *const GLuint, _: GLenum, _: *const c_void, _: GLsizei) {
12385	panic!("OpenGL function pointer `glShaderBinary()` is null.")
12386}
12387extern "system" fn dummy_pfnglgetshaderprecisionformatproc (_: GLenum, _: GLenum, _: *mut GLint, _: *mut GLint) {
12388	panic!("OpenGL function pointer `glGetShaderPrecisionFormat()` is null.")
12389}
12390extern "system" fn dummy_pfngldepthrangefproc (_: GLfloat, _: GLfloat) {
12391	panic!("OpenGL function pointer `glDepthRangef()` is null.")
12392}
12393extern "system" fn dummy_pfnglcleardepthfproc (_: GLfloat) {
12394	panic!("OpenGL function pointer `glClearDepthf()` is null.")
12395}
12396extern "system" fn dummy_pfnglgetprogrambinaryproc (_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLenum, _: *mut c_void) {
12397	panic!("OpenGL function pointer `glGetProgramBinary()` is null.")
12398}
12399extern "system" fn dummy_pfnglprogrambinaryproc (_: GLuint, _: GLenum, _: *const c_void, _: GLsizei) {
12400	panic!("OpenGL function pointer `glProgramBinary()` is null.")
12401}
12402extern "system" fn dummy_pfnglprogramparameteriproc (_: GLuint, _: GLenum, _: GLint) {
12403	panic!("OpenGL function pointer `glProgramParameteri()` is null.")
12404}
12405extern "system" fn dummy_pfngluseprogramstagesproc (_: GLuint, _: GLbitfield, _: GLuint) {
12406	panic!("OpenGL function pointer `glUseProgramStages()` is null.")
12407}
12408extern "system" fn dummy_pfnglactiveshaderprogramproc (_: GLuint, _: GLuint) {
12409	panic!("OpenGL function pointer `glActiveShaderProgram()` is null.")
12410}
12411extern "system" fn dummy_pfnglcreateshaderprogramvproc (_: GLenum, _: GLsizei, _: *const *const GLchar) -> GLuint {
12412	panic!("OpenGL function pointer `glCreateShaderProgramv()` is null.")
12413}
12414extern "system" fn dummy_pfnglbindprogrampipelineproc (_: GLuint) {
12415	panic!("OpenGL function pointer `glBindProgramPipeline()` is null.")
12416}
12417extern "system" fn dummy_pfngldeleteprogrampipelinesproc (_: GLsizei, _: *const GLuint) {
12418	panic!("OpenGL function pointer `glDeleteProgramPipelines()` is null.")
12419}
12420extern "system" fn dummy_pfnglgenprogrampipelinesproc (_: GLsizei, _: *mut GLuint) {
12421	panic!("OpenGL function pointer `glGenProgramPipelines()` is null.")
12422}
12423extern "system" fn dummy_pfnglisprogrampipelineproc (_: GLuint) -> GLboolean {
12424	panic!("OpenGL function pointer `glIsProgramPipeline()` is null.")
12425}
12426extern "system" fn dummy_pfnglgetprogrampipelineivproc (_: GLuint, _: GLenum, _: *mut GLint) {
12427	panic!("OpenGL function pointer `glGetProgramPipelineiv()` is null.")
12428}
12429extern "system" fn dummy_pfnglprogramuniform1iproc (_: GLuint, _: GLint, _: GLint) {
12430	panic!("OpenGL function pointer `glProgramUniform1i()` is null.")
12431}
12432extern "system" fn dummy_pfnglprogramuniform1ivproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLint) {
12433	panic!("OpenGL function pointer `glProgramUniform1iv()` is null.")
12434}
12435extern "system" fn dummy_pfnglprogramuniform1fproc (_: GLuint, _: GLint, _: GLfloat) {
12436	panic!("OpenGL function pointer `glProgramUniform1f()` is null.")
12437}
12438extern "system" fn dummy_pfnglprogramuniform1fvproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLfloat) {
12439	panic!("OpenGL function pointer `glProgramUniform1fv()` is null.")
12440}
12441extern "system" fn dummy_pfnglprogramuniform1dproc (_: GLuint, _: GLint, _: GLdouble) {
12442	panic!("OpenGL function pointer `glProgramUniform1d()` is null.")
12443}
12444extern "system" fn dummy_pfnglprogramuniform1dvproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLdouble) {
12445	panic!("OpenGL function pointer `glProgramUniform1dv()` is null.")
12446}
12447extern "system" fn dummy_pfnglprogramuniform1uiproc (_: GLuint, _: GLint, _: GLuint) {
12448	panic!("OpenGL function pointer `glProgramUniform1ui()` is null.")
12449}
12450extern "system" fn dummy_pfnglprogramuniform1uivproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLuint) {
12451	panic!("OpenGL function pointer `glProgramUniform1uiv()` is null.")
12452}
12453extern "system" fn dummy_pfnglprogramuniform2iproc (_: GLuint, _: GLint, _: GLint, _: GLint) {
12454	panic!("OpenGL function pointer `glProgramUniform2i()` is null.")
12455}
12456extern "system" fn dummy_pfnglprogramuniform2ivproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLint) {
12457	panic!("OpenGL function pointer `glProgramUniform2iv()` is null.")
12458}
12459extern "system" fn dummy_pfnglprogramuniform2fproc (_: GLuint, _: GLint, _: GLfloat, _: GLfloat) {
12460	panic!("OpenGL function pointer `glProgramUniform2f()` is null.")
12461}
12462extern "system" fn dummy_pfnglprogramuniform2fvproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLfloat) {
12463	panic!("OpenGL function pointer `glProgramUniform2fv()` is null.")
12464}
12465extern "system" fn dummy_pfnglprogramuniform2dproc (_: GLuint, _: GLint, _: GLdouble, _: GLdouble) {
12466	panic!("OpenGL function pointer `glProgramUniform2d()` is null.")
12467}
12468extern "system" fn dummy_pfnglprogramuniform2dvproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLdouble) {
12469	panic!("OpenGL function pointer `glProgramUniform2dv()` is null.")
12470}
12471extern "system" fn dummy_pfnglprogramuniform2uiproc (_: GLuint, _: GLint, _: GLuint, _: GLuint) {
12472	panic!("OpenGL function pointer `glProgramUniform2ui()` is null.")
12473}
12474extern "system" fn dummy_pfnglprogramuniform2uivproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLuint) {
12475	panic!("OpenGL function pointer `glProgramUniform2uiv()` is null.")
12476}
12477extern "system" fn dummy_pfnglprogramuniform3iproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint) {
12478	panic!("OpenGL function pointer `glProgramUniform3i()` is null.")
12479}
12480extern "system" fn dummy_pfnglprogramuniform3ivproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLint) {
12481	panic!("OpenGL function pointer `glProgramUniform3iv()` is null.")
12482}
12483extern "system" fn dummy_pfnglprogramuniform3fproc (_: GLuint, _: GLint, _: GLfloat, _: GLfloat, _: GLfloat) {
12484	panic!("OpenGL function pointer `glProgramUniform3f()` is null.")
12485}
12486extern "system" fn dummy_pfnglprogramuniform3fvproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLfloat) {
12487	panic!("OpenGL function pointer `glProgramUniform3fv()` is null.")
12488}
12489extern "system" fn dummy_pfnglprogramuniform3dproc (_: GLuint, _: GLint, _: GLdouble, _: GLdouble, _: GLdouble) {
12490	panic!("OpenGL function pointer `glProgramUniform3d()` is null.")
12491}
12492extern "system" fn dummy_pfnglprogramuniform3dvproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLdouble) {
12493	panic!("OpenGL function pointer `glProgramUniform3dv()` is null.")
12494}
12495extern "system" fn dummy_pfnglprogramuniform3uiproc (_: GLuint, _: GLint, _: GLuint, _: GLuint, _: GLuint) {
12496	panic!("OpenGL function pointer `glProgramUniform3ui()` is null.")
12497}
12498extern "system" fn dummy_pfnglprogramuniform3uivproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLuint) {
12499	panic!("OpenGL function pointer `glProgramUniform3uiv()` is null.")
12500}
12501extern "system" fn dummy_pfnglprogramuniform4iproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint) {
12502	panic!("OpenGL function pointer `glProgramUniform4i()` is null.")
12503}
12504extern "system" fn dummy_pfnglprogramuniform4ivproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLint) {
12505	panic!("OpenGL function pointer `glProgramUniform4iv()` is null.")
12506}
12507extern "system" fn dummy_pfnglprogramuniform4fproc (_: GLuint, _: GLint, _: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat) {
12508	panic!("OpenGL function pointer `glProgramUniform4f()` is null.")
12509}
12510extern "system" fn dummy_pfnglprogramuniform4fvproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLfloat) {
12511	panic!("OpenGL function pointer `glProgramUniform4fv()` is null.")
12512}
12513extern "system" fn dummy_pfnglprogramuniform4dproc (_: GLuint, _: GLint, _: GLdouble, _: GLdouble, _: GLdouble, _: GLdouble) {
12514	panic!("OpenGL function pointer `glProgramUniform4d()` is null.")
12515}
12516extern "system" fn dummy_pfnglprogramuniform4dvproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLdouble) {
12517	panic!("OpenGL function pointer `glProgramUniform4dv()` is null.")
12518}
12519extern "system" fn dummy_pfnglprogramuniform4uiproc (_: GLuint, _: GLint, _: GLuint, _: GLuint, _: GLuint, _: GLuint) {
12520	panic!("OpenGL function pointer `glProgramUniform4ui()` is null.")
12521}
12522extern "system" fn dummy_pfnglprogramuniform4uivproc (_: GLuint, _: GLint, _: GLsizei, _: *const GLuint) {
12523	panic!("OpenGL function pointer `glProgramUniform4uiv()` is null.")
12524}
12525extern "system" fn dummy_pfnglprogramuniformmatrix2fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12526	panic!("OpenGL function pointer `glProgramUniformMatrix2fv()` is null.")
12527}
12528extern "system" fn dummy_pfnglprogramuniformmatrix3fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12529	panic!("OpenGL function pointer `glProgramUniformMatrix3fv()` is null.")
12530}
12531extern "system" fn dummy_pfnglprogramuniformmatrix4fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12532	panic!("OpenGL function pointer `glProgramUniformMatrix4fv()` is null.")
12533}
12534extern "system" fn dummy_pfnglprogramuniformmatrix2dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12535	panic!("OpenGL function pointer `glProgramUniformMatrix2dv()` is null.")
12536}
12537extern "system" fn dummy_pfnglprogramuniformmatrix3dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12538	panic!("OpenGL function pointer `glProgramUniformMatrix3dv()` is null.")
12539}
12540extern "system" fn dummy_pfnglprogramuniformmatrix4dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12541	panic!("OpenGL function pointer `glProgramUniformMatrix4dv()` is null.")
12542}
12543extern "system" fn dummy_pfnglprogramuniformmatrix2x3fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12544	panic!("OpenGL function pointer `glProgramUniformMatrix2x3fv()` is null.")
12545}
12546extern "system" fn dummy_pfnglprogramuniformmatrix3x2fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12547	panic!("OpenGL function pointer `glProgramUniformMatrix3x2fv()` is null.")
12548}
12549extern "system" fn dummy_pfnglprogramuniformmatrix2x4fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12550	panic!("OpenGL function pointer `glProgramUniformMatrix2x4fv()` is null.")
12551}
12552extern "system" fn dummy_pfnglprogramuniformmatrix4x2fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12553	panic!("OpenGL function pointer `glProgramUniformMatrix4x2fv()` is null.")
12554}
12555extern "system" fn dummy_pfnglprogramuniformmatrix3x4fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12556	panic!("OpenGL function pointer `glProgramUniformMatrix3x4fv()` is null.")
12557}
12558extern "system" fn dummy_pfnglprogramuniformmatrix4x3fvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat) {
12559	panic!("OpenGL function pointer `glProgramUniformMatrix4x3fv()` is null.")
12560}
12561extern "system" fn dummy_pfnglprogramuniformmatrix2x3dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12562	panic!("OpenGL function pointer `glProgramUniformMatrix2x3dv()` is null.")
12563}
12564extern "system" fn dummy_pfnglprogramuniformmatrix3x2dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12565	panic!("OpenGL function pointer `glProgramUniformMatrix3x2dv()` is null.")
12566}
12567extern "system" fn dummy_pfnglprogramuniformmatrix2x4dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12568	panic!("OpenGL function pointer `glProgramUniformMatrix2x4dv()` is null.")
12569}
12570extern "system" fn dummy_pfnglprogramuniformmatrix4x2dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12571	panic!("OpenGL function pointer `glProgramUniformMatrix4x2dv()` is null.")
12572}
12573extern "system" fn dummy_pfnglprogramuniformmatrix3x4dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12574	panic!("OpenGL function pointer `glProgramUniformMatrix3x4dv()` is null.")
12575}
12576extern "system" fn dummy_pfnglprogramuniformmatrix4x3dvproc (_: GLuint, _: GLint, _: GLsizei, _: GLboolean, _: *const GLdouble) {
12577	panic!("OpenGL function pointer `glProgramUniformMatrix4x3dv()` is null.")
12578}
12579extern "system" fn dummy_pfnglvalidateprogrampipelineproc (_: GLuint) {
12580	panic!("OpenGL function pointer `glValidateProgramPipeline()` is null.")
12581}
12582extern "system" fn dummy_pfnglgetprogrampipelineinfologproc (_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
12583	panic!("OpenGL function pointer `glGetProgramPipelineInfoLog()` is null.")
12584}
12585extern "system" fn dummy_pfnglvertexattribl1dproc (_: GLuint, _: GLdouble) {
12586	panic!("OpenGL function pointer `glVertexAttribL1d()` is null.")
12587}
12588extern "system" fn dummy_pfnglvertexattribl2dproc (_: GLuint, _: GLdouble, _: GLdouble) {
12589	panic!("OpenGL function pointer `glVertexAttribL2d()` is null.")
12590}
12591extern "system" fn dummy_pfnglvertexattribl3dproc (_: GLuint, _: GLdouble, _: GLdouble, _: GLdouble) {
12592	panic!("OpenGL function pointer `glVertexAttribL3d()` is null.")
12593}
12594extern "system" fn dummy_pfnglvertexattribl4dproc (_: GLuint, _: GLdouble, _: GLdouble, _: GLdouble, _: GLdouble) {
12595	panic!("OpenGL function pointer `glVertexAttribL4d()` is null.")
12596}
12597extern "system" fn dummy_pfnglvertexattribl1dvproc (_: GLuint, _: *const GLdouble) {
12598	panic!("OpenGL function pointer `glVertexAttribL1dv()` is null.")
12599}
12600extern "system" fn dummy_pfnglvertexattribl2dvproc (_: GLuint, _: *const GLdouble) {
12601	panic!("OpenGL function pointer `glVertexAttribL2dv()` is null.")
12602}
12603extern "system" fn dummy_pfnglvertexattribl3dvproc (_: GLuint, _: *const GLdouble) {
12604	panic!("OpenGL function pointer `glVertexAttribL3dv()` is null.")
12605}
12606extern "system" fn dummy_pfnglvertexattribl4dvproc (_: GLuint, _: *const GLdouble) {
12607	panic!("OpenGL function pointer `glVertexAttribL4dv()` is null.")
12608}
12609extern "system" fn dummy_pfnglvertexattriblpointerproc (_: GLuint, _: GLint, _: GLenum, _: GLsizei, _: *const c_void) {
12610	panic!("OpenGL function pointer `glVertexAttribLPointer()` is null.")
12611}
12612extern "system" fn dummy_pfnglgetvertexattribldvproc (_: GLuint, _: GLenum, _: *mut GLdouble) {
12613	panic!("OpenGL function pointer `glGetVertexAttribLdv()` is null.")
12614}
12615extern "system" fn dummy_pfnglviewportarrayvproc (_: GLuint, _: GLsizei, _: *const GLfloat) {
12616	panic!("OpenGL function pointer `glViewportArrayv()` is null.")
12617}
12618extern "system" fn dummy_pfnglviewportindexedfproc (_: GLuint, _: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat) {
12619	panic!("OpenGL function pointer `glViewportIndexedf()` is null.")
12620}
12621extern "system" fn dummy_pfnglviewportindexedfvproc (_: GLuint, _: *const GLfloat) {
12622	panic!("OpenGL function pointer `glViewportIndexedfv()` is null.")
12623}
12624extern "system" fn dummy_pfnglscissorarrayvproc (_: GLuint, _: GLsizei, _: *const GLint) {
12625	panic!("OpenGL function pointer `glScissorArrayv()` is null.")
12626}
12627extern "system" fn dummy_pfnglscissorindexedproc (_: GLuint, _: GLint, _: GLint, _: GLsizei, _: GLsizei) {
12628	panic!("OpenGL function pointer `glScissorIndexed()` is null.")
12629}
12630extern "system" fn dummy_pfnglscissorindexedvproc (_: GLuint, _: *const GLint) {
12631	panic!("OpenGL function pointer `glScissorIndexedv()` is null.")
12632}
12633extern "system" fn dummy_pfngldepthrangearrayvproc (_: GLuint, _: GLsizei, _: *const GLdouble) {
12634	panic!("OpenGL function pointer `glDepthRangeArrayv()` is null.")
12635}
12636extern "system" fn dummy_pfngldepthrangeindexedproc (_: GLuint, _: GLdouble, _: GLdouble) {
12637	panic!("OpenGL function pointer `glDepthRangeIndexed()` is null.")
12638}
12639extern "system" fn dummy_pfnglgetfloati_vproc (_: GLenum, _: GLuint, _: *mut GLfloat) {
12640	panic!("OpenGL function pointer `glGetFloati_v()` is null.")
12641}
12642extern "system" fn dummy_pfnglgetdoublei_vproc (_: GLenum, _: GLuint, _: *mut GLdouble) {
12643	panic!("OpenGL function pointer `glGetDoublei_v()` is null.")
12644}
12645pub const GL_FIXED: GLenum = 0x140C;
12646pub const GL_IMPLEMENTATION_COLOR_READ_TYPE: GLenum = 0x8B9A;
12647pub const GL_IMPLEMENTATION_COLOR_READ_FORMAT: GLenum = 0x8B9B;
12648pub const GL_LOW_FLOAT: GLenum = 0x8DF0;
12649pub const GL_MEDIUM_FLOAT: GLenum = 0x8DF1;
12650pub const GL_HIGH_FLOAT: GLenum = 0x8DF2;
12651pub const GL_LOW_INT: GLenum = 0x8DF3;
12652pub const GL_MEDIUM_INT: GLenum = 0x8DF4;
12653pub const GL_HIGH_INT: GLenum = 0x8DF5;
12654pub const GL_SHADER_COMPILER: GLenum = 0x8DFA;
12655pub const GL_SHADER_BINARY_FORMATS: GLenum = 0x8DF8;
12656pub const GL_NUM_SHADER_BINARY_FORMATS: GLenum = 0x8DF9;
12657pub const GL_MAX_VERTEX_UNIFORM_VECTORS: GLenum = 0x8DFB;
12658pub const GL_MAX_VARYING_VECTORS: GLenum = 0x8DFC;
12659pub const GL_MAX_FRAGMENT_UNIFORM_VECTORS: GLenum = 0x8DFD;
12660pub const GL_RGB565: GLenum = 0x8D62;
12661pub const GL_PROGRAM_BINARY_RETRIEVABLE_HINT: GLenum = 0x8257;
12662pub const GL_PROGRAM_BINARY_LENGTH: GLenum = 0x8741;
12663pub const GL_NUM_PROGRAM_BINARY_FORMATS: GLenum = 0x87FE;
12664pub const GL_PROGRAM_BINARY_FORMATS: GLenum = 0x87FF;
12665pub const GL_VERTEX_SHADER_BIT: GLbitfield = 0x00000001;
12666pub const GL_FRAGMENT_SHADER_BIT: GLbitfield = 0x00000002;
12667pub const GL_GEOMETRY_SHADER_BIT: GLbitfield = 0x00000004;
12668pub const GL_TESS_CONTROL_SHADER_BIT: GLbitfield = 0x00000008;
12669pub const GL_TESS_EVALUATION_SHADER_BIT: GLbitfield = 0x00000010;
12670pub const GL_ALL_SHADER_BITS: GLbitfield = 0xFFFFFFFF;
12671pub const GL_PROGRAM_SEPARABLE: GLenum = 0x8258;
12672pub const GL_ACTIVE_PROGRAM: GLenum = 0x8259;
12673pub const GL_PROGRAM_PIPELINE_BINDING: GLenum = 0x825A;
12674pub const GL_MAX_VIEWPORTS: GLenum = 0x825B;
12675pub const GL_VIEWPORT_SUBPIXEL_BITS: GLenum = 0x825C;
12676pub const GL_VIEWPORT_BOUNDS_RANGE: GLenum = 0x825D;
12677pub const GL_LAYER_PROVOKING_VERTEX: GLenum = 0x825E;
12678pub const GL_VIEWPORT_INDEX_PROVOKING_VERTEX: GLenum = 0x825F;
12679pub const GL_UNDEFINED_VERTEX: GLenum = 0x8260;
12680
12681pub trait GL_4_1 {
12682	fn glGetError(&self) -> GLenum;
12683	fn glReleaseShaderCompiler(&self) -> Result<()>;
12684	fn glShaderBinary(&self, count: GLsizei, shaders: *const GLuint, binaryFormat: GLenum, binary: *const c_void, length: GLsizei) -> Result<()>;
12685	fn glGetShaderPrecisionFormat(&self, shadertype: GLenum, precisiontype: GLenum, range: *mut GLint, precision: *mut GLint) -> Result<()>;
12686	fn glDepthRangef(&self, n: GLfloat, f: GLfloat) -> Result<()>;
12687	fn glClearDepthf(&self, d: GLfloat) -> Result<()>;
12688	fn glGetProgramBinary(&self, program: GLuint, bufSize: GLsizei, length: *mut GLsizei, binaryFormat: *mut GLenum, binary: *mut c_void) -> Result<()>;
12689	fn glProgramBinary(&self, program: GLuint, binaryFormat: GLenum, binary: *const c_void, length: GLsizei) -> Result<()>;
12690	fn glProgramParameteri(&self, program: GLuint, pname: GLenum, value: GLint) -> Result<()>;
12691	fn glUseProgramStages(&self, pipeline: GLuint, stages: GLbitfield, program: GLuint) -> Result<()>;
12692	fn glActiveShaderProgram(&self, pipeline: GLuint, program: GLuint) -> Result<()>;
12693	fn glCreateShaderProgramv(&self, type_: GLenum, count: GLsizei, strings: *const *const GLchar) -> Result<GLuint>;
12694	fn glBindProgramPipeline(&self, pipeline: GLuint) -> Result<()>;
12695	fn glDeleteProgramPipelines(&self, n: GLsizei, pipelines: *const GLuint) -> Result<()>;
12696	fn glGenProgramPipelines(&self, n: GLsizei, pipelines: *mut GLuint) -> Result<()>;
12697	fn glIsProgramPipeline(&self, pipeline: GLuint) -> Result<GLboolean>;
12698	fn glGetProgramPipelineiv(&self, pipeline: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
12699	fn glProgramUniform1i(&self, program: GLuint, location: GLint, v0: GLint) -> Result<()>;
12700	fn glProgramUniform1iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()>;
12701	fn glProgramUniform1f(&self, program: GLuint, location: GLint, v0: GLfloat) -> Result<()>;
12702	fn glProgramUniform1fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()>;
12703	fn glProgramUniform1d(&self, program: GLuint, location: GLint, v0: GLdouble) -> Result<()>;
12704	fn glProgramUniform1dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()>;
12705	fn glProgramUniform1ui(&self, program: GLuint, location: GLint, v0: GLuint) -> Result<()>;
12706	fn glProgramUniform1uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()>;
12707	fn glProgramUniform2i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint) -> Result<()>;
12708	fn glProgramUniform2iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()>;
12709	fn glProgramUniform2f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat) -> Result<()>;
12710	fn glProgramUniform2fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()>;
12711	fn glProgramUniform2d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble) -> Result<()>;
12712	fn glProgramUniform2dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()>;
12713	fn glProgramUniform2ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint) -> Result<()>;
12714	fn glProgramUniform2uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()>;
12715	fn glProgramUniform3i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint, v2: GLint) -> Result<()>;
12716	fn glProgramUniform3iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()>;
12717	fn glProgramUniform3f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat) -> Result<()>;
12718	fn glProgramUniform3fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()>;
12719	fn glProgramUniform3d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble, v2: GLdouble) -> Result<()>;
12720	fn glProgramUniform3dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()>;
12721	fn glProgramUniform3ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint) -> Result<()>;
12722	fn glProgramUniform3uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()>;
12723	fn glProgramUniform4i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint) -> Result<()>;
12724	fn glProgramUniform4iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()>;
12725	fn glProgramUniform4f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat) -> Result<()>;
12726	fn glProgramUniform4fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()>;
12727	fn glProgramUniform4d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble, v2: GLdouble, v3: GLdouble) -> Result<()>;
12728	fn glProgramUniform4dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()>;
12729	fn glProgramUniform4ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint) -> Result<()>;
12730	fn glProgramUniform4uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()>;
12731	fn glProgramUniformMatrix2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12732	fn glProgramUniformMatrix3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12733	fn glProgramUniformMatrix4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12734	fn glProgramUniformMatrix2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12735	fn glProgramUniformMatrix3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12736	fn glProgramUniformMatrix4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12737	fn glProgramUniformMatrix2x3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12738	fn glProgramUniformMatrix3x2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12739	fn glProgramUniformMatrix2x4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12740	fn glProgramUniformMatrix4x2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12741	fn glProgramUniformMatrix3x4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12742	fn glProgramUniformMatrix4x3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()>;
12743	fn glProgramUniformMatrix2x3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12744	fn glProgramUniformMatrix3x2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12745	fn glProgramUniformMatrix2x4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12746	fn glProgramUniformMatrix4x2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12747	fn glProgramUniformMatrix3x4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12748	fn glProgramUniformMatrix4x3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()>;
12749	fn glValidateProgramPipeline(&self, pipeline: GLuint) -> Result<()>;
12750	fn glGetProgramPipelineInfoLog(&self, pipeline: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()>;
12751	fn glVertexAttribL1d(&self, index: GLuint, x: GLdouble) -> Result<()>;
12752	fn glVertexAttribL2d(&self, index: GLuint, x: GLdouble, y: GLdouble) -> Result<()>;
12753	fn glVertexAttribL3d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()>;
12754	fn glVertexAttribL4d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()>;
12755	fn glVertexAttribL1dv(&self, index: GLuint, v: *const GLdouble) -> Result<()>;
12756	fn glVertexAttribL2dv(&self, index: GLuint, v: *const GLdouble) -> Result<()>;
12757	fn glVertexAttribL3dv(&self, index: GLuint, v: *const GLdouble) -> Result<()>;
12758	fn glVertexAttribL4dv(&self, index: GLuint, v: *const GLdouble) -> Result<()>;
12759	fn glVertexAttribLPointer(&self, index: GLuint, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()>;
12760	fn glGetVertexAttribLdv(&self, index: GLuint, pname: GLenum, params: *mut GLdouble) -> Result<()>;
12761	fn glViewportArrayv(&self, first: GLuint, count: GLsizei, v: *const GLfloat) -> Result<()>;
12762	fn glViewportIndexedf(&self, index: GLuint, x: GLfloat, y: GLfloat, w: GLfloat, h: GLfloat) -> Result<()>;
12763	fn glViewportIndexedfv(&self, index: GLuint, v: *const GLfloat) -> Result<()>;
12764	fn glScissorArrayv(&self, first: GLuint, count: GLsizei, v: *const GLint) -> Result<()>;
12765	fn glScissorIndexed(&self, index: GLuint, left: GLint, bottom: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
12766	fn glScissorIndexedv(&self, index: GLuint, v: *const GLint) -> Result<()>;
12767	fn glDepthRangeArrayv(&self, first: GLuint, count: GLsizei, v: *const GLdouble) -> Result<()>;
12768	fn glDepthRangeIndexed(&self, index: GLuint, n: GLdouble, f: GLdouble) -> Result<()>;
12769	fn glGetFloati_v(&self, target: GLenum, index: GLuint, data: *mut GLfloat) -> Result<()>;
12770	fn glGetDoublei_v(&self, target: GLenum, index: GLuint, data: *mut GLdouble) -> Result<()>;
12771}
12772
12773#[derive(Clone, Copy, PartialEq, Eq, Hash)]
12774pub struct Version41 {
12775	available: bool,
12776	geterror: PFNGLGETERRORPROC,
12777	releaseshadercompiler: PFNGLRELEASESHADERCOMPILERPROC,
12778	shaderbinary: PFNGLSHADERBINARYPROC,
12779	getshaderprecisionformat: PFNGLGETSHADERPRECISIONFORMATPROC,
12780	depthrangef: PFNGLDEPTHRANGEFPROC,
12781	cleardepthf: PFNGLCLEARDEPTHFPROC,
12782	getprogrambinary: PFNGLGETPROGRAMBINARYPROC,
12783	programbinary: PFNGLPROGRAMBINARYPROC,
12784	programparameteri: PFNGLPROGRAMPARAMETERIPROC,
12785	useprogramstages: PFNGLUSEPROGRAMSTAGESPROC,
12786	activeshaderprogram: PFNGLACTIVESHADERPROGRAMPROC,
12787	createshaderprogramv: PFNGLCREATESHADERPROGRAMVPROC,
12788	bindprogrampipeline: PFNGLBINDPROGRAMPIPELINEPROC,
12789	deleteprogrampipelines: PFNGLDELETEPROGRAMPIPELINESPROC,
12790	genprogrampipelines: PFNGLGENPROGRAMPIPELINESPROC,
12791	isprogrampipeline: PFNGLISPROGRAMPIPELINEPROC,
12792	getprogrampipelineiv: PFNGLGETPROGRAMPIPELINEIVPROC,
12793	programuniform1i: PFNGLPROGRAMUNIFORM1IPROC,
12794	programuniform1iv: PFNGLPROGRAMUNIFORM1IVPROC,
12795	programuniform1f: PFNGLPROGRAMUNIFORM1FPROC,
12796	programuniform1fv: PFNGLPROGRAMUNIFORM1FVPROC,
12797	programuniform1d: PFNGLPROGRAMUNIFORM1DPROC,
12798	programuniform1dv: PFNGLPROGRAMUNIFORM1DVPROC,
12799	programuniform1ui: PFNGLPROGRAMUNIFORM1UIPROC,
12800	programuniform1uiv: PFNGLPROGRAMUNIFORM1UIVPROC,
12801	programuniform2i: PFNGLPROGRAMUNIFORM2IPROC,
12802	programuniform2iv: PFNGLPROGRAMUNIFORM2IVPROC,
12803	programuniform2f: PFNGLPROGRAMUNIFORM2FPROC,
12804	programuniform2fv: PFNGLPROGRAMUNIFORM2FVPROC,
12805	programuniform2d: PFNGLPROGRAMUNIFORM2DPROC,
12806	programuniform2dv: PFNGLPROGRAMUNIFORM2DVPROC,
12807	programuniform2ui: PFNGLPROGRAMUNIFORM2UIPROC,
12808	programuniform2uiv: PFNGLPROGRAMUNIFORM2UIVPROC,
12809	programuniform3i: PFNGLPROGRAMUNIFORM3IPROC,
12810	programuniform3iv: PFNGLPROGRAMUNIFORM3IVPROC,
12811	programuniform3f: PFNGLPROGRAMUNIFORM3FPROC,
12812	programuniform3fv: PFNGLPROGRAMUNIFORM3FVPROC,
12813	programuniform3d: PFNGLPROGRAMUNIFORM3DPROC,
12814	programuniform3dv: PFNGLPROGRAMUNIFORM3DVPROC,
12815	programuniform3ui: PFNGLPROGRAMUNIFORM3UIPROC,
12816	programuniform3uiv: PFNGLPROGRAMUNIFORM3UIVPROC,
12817	programuniform4i: PFNGLPROGRAMUNIFORM4IPROC,
12818	programuniform4iv: PFNGLPROGRAMUNIFORM4IVPROC,
12819	programuniform4f: PFNGLPROGRAMUNIFORM4FPROC,
12820	programuniform4fv: PFNGLPROGRAMUNIFORM4FVPROC,
12821	programuniform4d: PFNGLPROGRAMUNIFORM4DPROC,
12822	programuniform4dv: PFNGLPROGRAMUNIFORM4DVPROC,
12823	programuniform4ui: PFNGLPROGRAMUNIFORM4UIPROC,
12824	programuniform4uiv: PFNGLPROGRAMUNIFORM4UIVPROC,
12825	programuniformmatrix2fv: PFNGLPROGRAMUNIFORMMATRIX2FVPROC,
12826	programuniformmatrix3fv: PFNGLPROGRAMUNIFORMMATRIX3FVPROC,
12827	programuniformmatrix4fv: PFNGLPROGRAMUNIFORMMATRIX4FVPROC,
12828	programuniformmatrix2dv: PFNGLPROGRAMUNIFORMMATRIX2DVPROC,
12829	programuniformmatrix3dv: PFNGLPROGRAMUNIFORMMATRIX3DVPROC,
12830	programuniformmatrix4dv: PFNGLPROGRAMUNIFORMMATRIX4DVPROC,
12831	programuniformmatrix2x3fv: PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC,
12832	programuniformmatrix3x2fv: PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC,
12833	programuniformmatrix2x4fv: PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC,
12834	programuniformmatrix4x2fv: PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC,
12835	programuniformmatrix3x4fv: PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC,
12836	programuniformmatrix4x3fv: PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC,
12837	programuniformmatrix2x3dv: PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC,
12838	programuniformmatrix3x2dv: PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC,
12839	programuniformmatrix2x4dv: PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC,
12840	programuniformmatrix4x2dv: PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC,
12841	programuniformmatrix3x4dv: PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC,
12842	programuniformmatrix4x3dv: PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC,
12843	validateprogrampipeline: PFNGLVALIDATEPROGRAMPIPELINEPROC,
12844	getprogrampipelineinfolog: PFNGLGETPROGRAMPIPELINEINFOLOGPROC,
12845	vertexattribl1d: PFNGLVERTEXATTRIBL1DPROC,
12846	vertexattribl2d: PFNGLVERTEXATTRIBL2DPROC,
12847	vertexattribl3d: PFNGLVERTEXATTRIBL3DPROC,
12848	vertexattribl4d: PFNGLVERTEXATTRIBL4DPROC,
12849	vertexattribl1dv: PFNGLVERTEXATTRIBL1DVPROC,
12850	vertexattribl2dv: PFNGLVERTEXATTRIBL2DVPROC,
12851	vertexattribl3dv: PFNGLVERTEXATTRIBL3DVPROC,
12852	vertexattribl4dv: PFNGLVERTEXATTRIBL4DVPROC,
12853	vertexattriblpointer: PFNGLVERTEXATTRIBLPOINTERPROC,
12854	getvertexattribldv: PFNGLGETVERTEXATTRIBLDVPROC,
12855	viewportarrayv: PFNGLVIEWPORTARRAYVPROC,
12856	viewportindexedf: PFNGLVIEWPORTINDEXEDFPROC,
12857	viewportindexedfv: PFNGLVIEWPORTINDEXEDFVPROC,
12858	scissorarrayv: PFNGLSCISSORARRAYVPROC,
12859	scissorindexed: PFNGLSCISSORINDEXEDPROC,
12860	scissorindexedv: PFNGLSCISSORINDEXEDVPROC,
12861	depthrangearrayv: PFNGLDEPTHRANGEARRAYVPROC,
12862	depthrangeindexed: PFNGLDEPTHRANGEINDEXEDPROC,
12863	getfloati_v: PFNGLGETFLOATI_VPROC,
12864	getdoublei_v: PFNGLGETDOUBLEI_VPROC,
12865}
12866
12867impl GL_4_1 for Version41 {
12868	#[inline(always)]
12869	fn glGetError(&self) -> GLenum {
12870		(self.geterror)()
12871	}
12872	#[inline(always)]
12873	fn glReleaseShaderCompiler(&self) -> Result<()> {
12874		let ret = process_catch("glReleaseShaderCompiler", catch_unwind(||(self.releaseshadercompiler)()));
12875		#[cfg(feature = "diagnose")]
12876		if let Ok(ret) = ret {
12877			return to_result("glReleaseShaderCompiler", ret, self.glGetError());
12878		} else {
12879			return ret
12880		}
12881		#[cfg(not(feature = "diagnose"))]
12882		return ret;
12883	}
12884	#[inline(always)]
12885	fn glShaderBinary(&self, count: GLsizei, shaders: *const GLuint, binaryFormat: GLenum, binary: *const c_void, length: GLsizei) -> Result<()> {
12886		let ret = process_catch("glShaderBinary", catch_unwind(||(self.shaderbinary)(count, shaders, binaryFormat, binary, length)));
12887		#[cfg(feature = "diagnose")]
12888		if let Ok(ret) = ret {
12889			return to_result("glShaderBinary", ret, self.glGetError());
12890		} else {
12891			return ret
12892		}
12893		#[cfg(not(feature = "diagnose"))]
12894		return ret;
12895	}
12896	#[inline(always)]
12897	fn glGetShaderPrecisionFormat(&self, shadertype: GLenum, precisiontype: GLenum, range: *mut GLint, precision: *mut GLint) -> Result<()> {
12898		let ret = process_catch("glGetShaderPrecisionFormat", catch_unwind(||(self.getshaderprecisionformat)(shadertype, precisiontype, range, precision)));
12899		#[cfg(feature = "diagnose")]
12900		if let Ok(ret) = ret {
12901			return to_result("glGetShaderPrecisionFormat", ret, self.glGetError());
12902		} else {
12903			return ret
12904		}
12905		#[cfg(not(feature = "diagnose"))]
12906		return ret;
12907	}
12908	#[inline(always)]
12909	fn glDepthRangef(&self, n: GLfloat, f: GLfloat) -> Result<()> {
12910		let ret = process_catch("glDepthRangef", catch_unwind(||(self.depthrangef)(n, f)));
12911		#[cfg(feature = "diagnose")]
12912		if let Ok(ret) = ret {
12913			return to_result("glDepthRangef", ret, self.glGetError());
12914		} else {
12915			return ret
12916		}
12917		#[cfg(not(feature = "diagnose"))]
12918		return ret;
12919	}
12920	#[inline(always)]
12921	fn glClearDepthf(&self, d: GLfloat) -> Result<()> {
12922		let ret = process_catch("glClearDepthf", catch_unwind(||(self.cleardepthf)(d)));
12923		#[cfg(feature = "diagnose")]
12924		if let Ok(ret) = ret {
12925			return to_result("glClearDepthf", ret, self.glGetError());
12926		} else {
12927			return ret
12928		}
12929		#[cfg(not(feature = "diagnose"))]
12930		return ret;
12931	}
12932	#[inline(always)]
12933	fn glGetProgramBinary(&self, program: GLuint, bufSize: GLsizei, length: *mut GLsizei, binaryFormat: *mut GLenum, binary: *mut c_void) -> Result<()> {
12934		let ret = process_catch("glGetProgramBinary", catch_unwind(||(self.getprogrambinary)(program, bufSize, length, binaryFormat, binary)));
12935		#[cfg(feature = "diagnose")]
12936		if let Ok(ret) = ret {
12937			return to_result("glGetProgramBinary", ret, self.glGetError());
12938		} else {
12939			return ret
12940		}
12941		#[cfg(not(feature = "diagnose"))]
12942		return ret;
12943	}
12944	#[inline(always)]
12945	fn glProgramBinary(&self, program: GLuint, binaryFormat: GLenum, binary: *const c_void, length: GLsizei) -> Result<()> {
12946		let ret = process_catch("glProgramBinary", catch_unwind(||(self.programbinary)(program, binaryFormat, binary, length)));
12947		#[cfg(feature = "diagnose")]
12948		if let Ok(ret) = ret {
12949			return to_result("glProgramBinary", ret, self.glGetError());
12950		} else {
12951			return ret
12952		}
12953		#[cfg(not(feature = "diagnose"))]
12954		return ret;
12955	}
12956	#[inline(always)]
12957	fn glProgramParameteri(&self, program: GLuint, pname: GLenum, value: GLint) -> Result<()> {
12958		let ret = process_catch("glProgramParameteri", catch_unwind(||(self.programparameteri)(program, pname, value)));
12959		#[cfg(feature = "diagnose")]
12960		if let Ok(ret) = ret {
12961			return to_result("glProgramParameteri", ret, self.glGetError());
12962		} else {
12963			return ret
12964		}
12965		#[cfg(not(feature = "diagnose"))]
12966		return ret;
12967	}
12968	#[inline(always)]
12969	fn glUseProgramStages(&self, pipeline: GLuint, stages: GLbitfield, program: GLuint) -> Result<()> {
12970		let ret = process_catch("glUseProgramStages", catch_unwind(||(self.useprogramstages)(pipeline, stages, program)));
12971		#[cfg(feature = "diagnose")]
12972		if let Ok(ret) = ret {
12973			return to_result("glUseProgramStages", ret, self.glGetError());
12974		} else {
12975			return ret
12976		}
12977		#[cfg(not(feature = "diagnose"))]
12978		return ret;
12979	}
12980	#[inline(always)]
12981	fn glActiveShaderProgram(&self, pipeline: GLuint, program: GLuint) -> Result<()> {
12982		let ret = process_catch("glActiveShaderProgram", catch_unwind(||(self.activeshaderprogram)(pipeline, program)));
12983		#[cfg(feature = "diagnose")]
12984		if let Ok(ret) = ret {
12985			return to_result("glActiveShaderProgram", ret, self.glGetError());
12986		} else {
12987			return ret
12988		}
12989		#[cfg(not(feature = "diagnose"))]
12990		return ret;
12991	}
12992	#[inline(always)]
12993	fn glCreateShaderProgramv(&self, type_: GLenum, count: GLsizei, strings: *const *const GLchar) -> Result<GLuint> {
12994		let ret = process_catch("glCreateShaderProgramv", catch_unwind(||(self.createshaderprogramv)(type_, count, strings)));
12995		#[cfg(feature = "diagnose")]
12996		if let Ok(ret) = ret {
12997			return to_result("glCreateShaderProgramv", ret, self.glGetError());
12998		} else {
12999			return ret
13000		}
13001		#[cfg(not(feature = "diagnose"))]
13002		return ret;
13003	}
13004	#[inline(always)]
13005	fn glBindProgramPipeline(&self, pipeline: GLuint) -> Result<()> {
13006		let ret = process_catch("glBindProgramPipeline", catch_unwind(||(self.bindprogrampipeline)(pipeline)));
13007		#[cfg(feature = "diagnose")]
13008		if let Ok(ret) = ret {
13009			return to_result("glBindProgramPipeline", ret, self.glGetError());
13010		} else {
13011			return ret
13012		}
13013		#[cfg(not(feature = "diagnose"))]
13014		return ret;
13015	}
13016	#[inline(always)]
13017	fn glDeleteProgramPipelines(&self, n: GLsizei, pipelines: *const GLuint) -> Result<()> {
13018		let ret = process_catch("glDeleteProgramPipelines", catch_unwind(||(self.deleteprogrampipelines)(n, pipelines)));
13019		#[cfg(feature = "diagnose")]
13020		if let Ok(ret) = ret {
13021			return to_result("glDeleteProgramPipelines", ret, self.glGetError());
13022		} else {
13023			return ret
13024		}
13025		#[cfg(not(feature = "diagnose"))]
13026		return ret;
13027	}
13028	#[inline(always)]
13029	fn glGenProgramPipelines(&self, n: GLsizei, pipelines: *mut GLuint) -> Result<()> {
13030		let ret = process_catch("glGenProgramPipelines", catch_unwind(||(self.genprogrampipelines)(n, pipelines)));
13031		#[cfg(feature = "diagnose")]
13032		if let Ok(ret) = ret {
13033			return to_result("glGenProgramPipelines", ret, self.glGetError());
13034		} else {
13035			return ret
13036		}
13037		#[cfg(not(feature = "diagnose"))]
13038		return ret;
13039	}
13040	#[inline(always)]
13041	fn glIsProgramPipeline(&self, pipeline: GLuint) -> Result<GLboolean> {
13042		let ret = process_catch("glIsProgramPipeline", catch_unwind(||(self.isprogrampipeline)(pipeline)));
13043		#[cfg(feature = "diagnose")]
13044		if let Ok(ret) = ret {
13045			return to_result("glIsProgramPipeline", ret, self.glGetError());
13046		} else {
13047			return ret
13048		}
13049		#[cfg(not(feature = "diagnose"))]
13050		return ret;
13051	}
13052	#[inline(always)]
13053	fn glGetProgramPipelineiv(&self, pipeline: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
13054		let ret = process_catch("glGetProgramPipelineiv", catch_unwind(||(self.getprogrampipelineiv)(pipeline, pname, params)));
13055		#[cfg(feature = "diagnose")]
13056		if let Ok(ret) = ret {
13057			return to_result("glGetProgramPipelineiv", ret, self.glGetError());
13058		} else {
13059			return ret
13060		}
13061		#[cfg(not(feature = "diagnose"))]
13062		return ret;
13063	}
13064	#[inline(always)]
13065	fn glProgramUniform1i(&self, program: GLuint, location: GLint, v0: GLint) -> Result<()> {
13066		let ret = process_catch("glProgramUniform1i", catch_unwind(||(self.programuniform1i)(program, location, v0)));
13067		#[cfg(feature = "diagnose")]
13068		if let Ok(ret) = ret {
13069			return to_result("glProgramUniform1i", ret, self.glGetError());
13070		} else {
13071			return ret
13072		}
13073		#[cfg(not(feature = "diagnose"))]
13074		return ret;
13075	}
13076	#[inline(always)]
13077	fn glProgramUniform1iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
13078		let ret = process_catch("glProgramUniform1iv", catch_unwind(||(self.programuniform1iv)(program, location, count, value)));
13079		#[cfg(feature = "diagnose")]
13080		if let Ok(ret) = ret {
13081			return to_result("glProgramUniform1iv", ret, self.glGetError());
13082		} else {
13083			return ret
13084		}
13085		#[cfg(not(feature = "diagnose"))]
13086		return ret;
13087	}
13088	#[inline(always)]
13089	fn glProgramUniform1f(&self, program: GLuint, location: GLint, v0: GLfloat) -> Result<()> {
13090		let ret = process_catch("glProgramUniform1f", catch_unwind(||(self.programuniform1f)(program, location, v0)));
13091		#[cfg(feature = "diagnose")]
13092		if let Ok(ret) = ret {
13093			return to_result("glProgramUniform1f", ret, self.glGetError());
13094		} else {
13095			return ret
13096		}
13097		#[cfg(not(feature = "diagnose"))]
13098		return ret;
13099	}
13100	#[inline(always)]
13101	fn glProgramUniform1fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
13102		let ret = process_catch("glProgramUniform1fv", catch_unwind(||(self.programuniform1fv)(program, location, count, value)));
13103		#[cfg(feature = "diagnose")]
13104		if let Ok(ret) = ret {
13105			return to_result("glProgramUniform1fv", ret, self.glGetError());
13106		} else {
13107			return ret
13108		}
13109		#[cfg(not(feature = "diagnose"))]
13110		return ret;
13111	}
13112	#[inline(always)]
13113	fn glProgramUniform1d(&self, program: GLuint, location: GLint, v0: GLdouble) -> Result<()> {
13114		let ret = process_catch("glProgramUniform1d", catch_unwind(||(self.programuniform1d)(program, location, v0)));
13115		#[cfg(feature = "diagnose")]
13116		if let Ok(ret) = ret {
13117			return to_result("glProgramUniform1d", ret, self.glGetError());
13118		} else {
13119			return ret
13120		}
13121		#[cfg(not(feature = "diagnose"))]
13122		return ret;
13123	}
13124	#[inline(always)]
13125	fn glProgramUniform1dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
13126		let ret = process_catch("glProgramUniform1dv", catch_unwind(||(self.programuniform1dv)(program, location, count, value)));
13127		#[cfg(feature = "diagnose")]
13128		if let Ok(ret) = ret {
13129			return to_result("glProgramUniform1dv", ret, self.glGetError());
13130		} else {
13131			return ret
13132		}
13133		#[cfg(not(feature = "diagnose"))]
13134		return ret;
13135	}
13136	#[inline(always)]
13137	fn glProgramUniform1ui(&self, program: GLuint, location: GLint, v0: GLuint) -> Result<()> {
13138		let ret = process_catch("glProgramUniform1ui", catch_unwind(||(self.programuniform1ui)(program, location, v0)));
13139		#[cfg(feature = "diagnose")]
13140		if let Ok(ret) = ret {
13141			return to_result("glProgramUniform1ui", ret, self.glGetError());
13142		} else {
13143			return ret
13144		}
13145		#[cfg(not(feature = "diagnose"))]
13146		return ret;
13147	}
13148	#[inline(always)]
13149	fn glProgramUniform1uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
13150		let ret = process_catch("glProgramUniform1uiv", catch_unwind(||(self.programuniform1uiv)(program, location, count, value)));
13151		#[cfg(feature = "diagnose")]
13152		if let Ok(ret) = ret {
13153			return to_result("glProgramUniform1uiv", ret, self.glGetError());
13154		} else {
13155			return ret
13156		}
13157		#[cfg(not(feature = "diagnose"))]
13158		return ret;
13159	}
13160	#[inline(always)]
13161	fn glProgramUniform2i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint) -> Result<()> {
13162		let ret = process_catch("glProgramUniform2i", catch_unwind(||(self.programuniform2i)(program, location, v0, v1)));
13163		#[cfg(feature = "diagnose")]
13164		if let Ok(ret) = ret {
13165			return to_result("glProgramUniform2i", ret, self.glGetError());
13166		} else {
13167			return ret
13168		}
13169		#[cfg(not(feature = "diagnose"))]
13170		return ret;
13171	}
13172	#[inline(always)]
13173	fn glProgramUniform2iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
13174		let ret = process_catch("glProgramUniform2iv", catch_unwind(||(self.programuniform2iv)(program, location, count, value)));
13175		#[cfg(feature = "diagnose")]
13176		if let Ok(ret) = ret {
13177			return to_result("glProgramUniform2iv", ret, self.glGetError());
13178		} else {
13179			return ret
13180		}
13181		#[cfg(not(feature = "diagnose"))]
13182		return ret;
13183	}
13184	#[inline(always)]
13185	fn glProgramUniform2f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat) -> Result<()> {
13186		let ret = process_catch("glProgramUniform2f", catch_unwind(||(self.programuniform2f)(program, location, v0, v1)));
13187		#[cfg(feature = "diagnose")]
13188		if let Ok(ret) = ret {
13189			return to_result("glProgramUniform2f", ret, self.glGetError());
13190		} else {
13191			return ret
13192		}
13193		#[cfg(not(feature = "diagnose"))]
13194		return ret;
13195	}
13196	#[inline(always)]
13197	fn glProgramUniform2fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
13198		let ret = process_catch("glProgramUniform2fv", catch_unwind(||(self.programuniform2fv)(program, location, count, value)));
13199		#[cfg(feature = "diagnose")]
13200		if let Ok(ret) = ret {
13201			return to_result("glProgramUniform2fv", ret, self.glGetError());
13202		} else {
13203			return ret
13204		}
13205		#[cfg(not(feature = "diagnose"))]
13206		return ret;
13207	}
13208	#[inline(always)]
13209	fn glProgramUniform2d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble) -> Result<()> {
13210		let ret = process_catch("glProgramUniform2d", catch_unwind(||(self.programuniform2d)(program, location, v0, v1)));
13211		#[cfg(feature = "diagnose")]
13212		if let Ok(ret) = ret {
13213			return to_result("glProgramUniform2d", ret, self.glGetError());
13214		} else {
13215			return ret
13216		}
13217		#[cfg(not(feature = "diagnose"))]
13218		return ret;
13219	}
13220	#[inline(always)]
13221	fn glProgramUniform2dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
13222		let ret = process_catch("glProgramUniform2dv", catch_unwind(||(self.programuniform2dv)(program, location, count, value)));
13223		#[cfg(feature = "diagnose")]
13224		if let Ok(ret) = ret {
13225			return to_result("glProgramUniform2dv", ret, self.glGetError());
13226		} else {
13227			return ret
13228		}
13229		#[cfg(not(feature = "diagnose"))]
13230		return ret;
13231	}
13232	#[inline(always)]
13233	fn glProgramUniform2ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint) -> Result<()> {
13234		let ret = process_catch("glProgramUniform2ui", catch_unwind(||(self.programuniform2ui)(program, location, v0, v1)));
13235		#[cfg(feature = "diagnose")]
13236		if let Ok(ret) = ret {
13237			return to_result("glProgramUniform2ui", ret, self.glGetError());
13238		} else {
13239			return ret
13240		}
13241		#[cfg(not(feature = "diagnose"))]
13242		return ret;
13243	}
13244	#[inline(always)]
13245	fn glProgramUniform2uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
13246		let ret = process_catch("glProgramUniform2uiv", catch_unwind(||(self.programuniform2uiv)(program, location, count, value)));
13247		#[cfg(feature = "diagnose")]
13248		if let Ok(ret) = ret {
13249			return to_result("glProgramUniform2uiv", ret, self.glGetError());
13250		} else {
13251			return ret
13252		}
13253		#[cfg(not(feature = "diagnose"))]
13254		return ret;
13255	}
13256	#[inline(always)]
13257	fn glProgramUniform3i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint, v2: GLint) -> Result<()> {
13258		let ret = process_catch("glProgramUniform3i", catch_unwind(||(self.programuniform3i)(program, location, v0, v1, v2)));
13259		#[cfg(feature = "diagnose")]
13260		if let Ok(ret) = ret {
13261			return to_result("glProgramUniform3i", ret, self.glGetError());
13262		} else {
13263			return ret
13264		}
13265		#[cfg(not(feature = "diagnose"))]
13266		return ret;
13267	}
13268	#[inline(always)]
13269	fn glProgramUniform3iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
13270		let ret = process_catch("glProgramUniform3iv", catch_unwind(||(self.programuniform3iv)(program, location, count, value)));
13271		#[cfg(feature = "diagnose")]
13272		if let Ok(ret) = ret {
13273			return to_result("glProgramUniform3iv", ret, self.glGetError());
13274		} else {
13275			return ret
13276		}
13277		#[cfg(not(feature = "diagnose"))]
13278		return ret;
13279	}
13280	#[inline(always)]
13281	fn glProgramUniform3f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat) -> Result<()> {
13282		let ret = process_catch("glProgramUniform3f", catch_unwind(||(self.programuniform3f)(program, location, v0, v1, v2)));
13283		#[cfg(feature = "diagnose")]
13284		if let Ok(ret) = ret {
13285			return to_result("glProgramUniform3f", ret, self.glGetError());
13286		} else {
13287			return ret
13288		}
13289		#[cfg(not(feature = "diagnose"))]
13290		return ret;
13291	}
13292	#[inline(always)]
13293	fn glProgramUniform3fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
13294		let ret = process_catch("glProgramUniform3fv", catch_unwind(||(self.programuniform3fv)(program, location, count, value)));
13295		#[cfg(feature = "diagnose")]
13296		if let Ok(ret) = ret {
13297			return to_result("glProgramUniform3fv", ret, self.glGetError());
13298		} else {
13299			return ret
13300		}
13301		#[cfg(not(feature = "diagnose"))]
13302		return ret;
13303	}
13304	#[inline(always)]
13305	fn glProgramUniform3d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble, v2: GLdouble) -> Result<()> {
13306		let ret = process_catch("glProgramUniform3d", catch_unwind(||(self.programuniform3d)(program, location, v0, v1, v2)));
13307		#[cfg(feature = "diagnose")]
13308		if let Ok(ret) = ret {
13309			return to_result("glProgramUniform3d", ret, self.glGetError());
13310		} else {
13311			return ret
13312		}
13313		#[cfg(not(feature = "diagnose"))]
13314		return ret;
13315	}
13316	#[inline(always)]
13317	fn glProgramUniform3dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
13318		let ret = process_catch("glProgramUniform3dv", catch_unwind(||(self.programuniform3dv)(program, location, count, value)));
13319		#[cfg(feature = "diagnose")]
13320		if let Ok(ret) = ret {
13321			return to_result("glProgramUniform3dv", ret, self.glGetError());
13322		} else {
13323			return ret
13324		}
13325		#[cfg(not(feature = "diagnose"))]
13326		return ret;
13327	}
13328	#[inline(always)]
13329	fn glProgramUniform3ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint) -> Result<()> {
13330		let ret = process_catch("glProgramUniform3ui", catch_unwind(||(self.programuniform3ui)(program, location, v0, v1, v2)));
13331		#[cfg(feature = "diagnose")]
13332		if let Ok(ret) = ret {
13333			return to_result("glProgramUniform3ui", ret, self.glGetError());
13334		} else {
13335			return ret
13336		}
13337		#[cfg(not(feature = "diagnose"))]
13338		return ret;
13339	}
13340	#[inline(always)]
13341	fn glProgramUniform3uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
13342		let ret = process_catch("glProgramUniform3uiv", catch_unwind(||(self.programuniform3uiv)(program, location, count, value)));
13343		#[cfg(feature = "diagnose")]
13344		if let Ok(ret) = ret {
13345			return to_result("glProgramUniform3uiv", ret, self.glGetError());
13346		} else {
13347			return ret
13348		}
13349		#[cfg(not(feature = "diagnose"))]
13350		return ret;
13351	}
13352	#[inline(always)]
13353	fn glProgramUniform4i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint) -> Result<()> {
13354		let ret = process_catch("glProgramUniform4i", catch_unwind(||(self.programuniform4i)(program, location, v0, v1, v2, v3)));
13355		#[cfg(feature = "diagnose")]
13356		if let Ok(ret) = ret {
13357			return to_result("glProgramUniform4i", ret, self.glGetError());
13358		} else {
13359			return ret
13360		}
13361		#[cfg(not(feature = "diagnose"))]
13362		return ret;
13363	}
13364	#[inline(always)]
13365	fn glProgramUniform4iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
13366		let ret = process_catch("glProgramUniform4iv", catch_unwind(||(self.programuniform4iv)(program, location, count, value)));
13367		#[cfg(feature = "diagnose")]
13368		if let Ok(ret) = ret {
13369			return to_result("glProgramUniform4iv", ret, self.glGetError());
13370		} else {
13371			return ret
13372		}
13373		#[cfg(not(feature = "diagnose"))]
13374		return ret;
13375	}
13376	#[inline(always)]
13377	fn glProgramUniform4f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat) -> Result<()> {
13378		let ret = process_catch("glProgramUniform4f", catch_unwind(||(self.programuniform4f)(program, location, v0, v1, v2, v3)));
13379		#[cfg(feature = "diagnose")]
13380		if let Ok(ret) = ret {
13381			return to_result("glProgramUniform4f", ret, self.glGetError());
13382		} else {
13383			return ret
13384		}
13385		#[cfg(not(feature = "diagnose"))]
13386		return ret;
13387	}
13388	#[inline(always)]
13389	fn glProgramUniform4fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
13390		let ret = process_catch("glProgramUniform4fv", catch_unwind(||(self.programuniform4fv)(program, location, count, value)));
13391		#[cfg(feature = "diagnose")]
13392		if let Ok(ret) = ret {
13393			return to_result("glProgramUniform4fv", ret, self.glGetError());
13394		} else {
13395			return ret
13396		}
13397		#[cfg(not(feature = "diagnose"))]
13398		return ret;
13399	}
13400	#[inline(always)]
13401	fn glProgramUniform4d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble, v2: GLdouble, v3: GLdouble) -> Result<()> {
13402		let ret = process_catch("glProgramUniform4d", catch_unwind(||(self.programuniform4d)(program, location, v0, v1, v2, v3)));
13403		#[cfg(feature = "diagnose")]
13404		if let Ok(ret) = ret {
13405			return to_result("glProgramUniform4d", ret, self.glGetError());
13406		} else {
13407			return ret
13408		}
13409		#[cfg(not(feature = "diagnose"))]
13410		return ret;
13411	}
13412	#[inline(always)]
13413	fn glProgramUniform4dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
13414		let ret = process_catch("glProgramUniform4dv", catch_unwind(||(self.programuniform4dv)(program, location, count, value)));
13415		#[cfg(feature = "diagnose")]
13416		if let Ok(ret) = ret {
13417			return to_result("glProgramUniform4dv", ret, self.glGetError());
13418		} else {
13419			return ret
13420		}
13421		#[cfg(not(feature = "diagnose"))]
13422		return ret;
13423	}
13424	#[inline(always)]
13425	fn glProgramUniform4ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint) -> Result<()> {
13426		let ret = process_catch("glProgramUniform4ui", catch_unwind(||(self.programuniform4ui)(program, location, v0, v1, v2, v3)));
13427		#[cfg(feature = "diagnose")]
13428		if let Ok(ret) = ret {
13429			return to_result("glProgramUniform4ui", ret, self.glGetError());
13430		} else {
13431			return ret
13432		}
13433		#[cfg(not(feature = "diagnose"))]
13434		return ret;
13435	}
13436	#[inline(always)]
13437	fn glProgramUniform4uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
13438		let ret = process_catch("glProgramUniform4uiv", catch_unwind(||(self.programuniform4uiv)(program, location, count, value)));
13439		#[cfg(feature = "diagnose")]
13440		if let Ok(ret) = ret {
13441			return to_result("glProgramUniform4uiv", ret, self.glGetError());
13442		} else {
13443			return ret
13444		}
13445		#[cfg(not(feature = "diagnose"))]
13446		return ret;
13447	}
13448	#[inline(always)]
13449	fn glProgramUniformMatrix2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13450		let ret = process_catch("glProgramUniformMatrix2fv", catch_unwind(||(self.programuniformmatrix2fv)(program, location, count, transpose, value)));
13451		#[cfg(feature = "diagnose")]
13452		if let Ok(ret) = ret {
13453			return to_result("glProgramUniformMatrix2fv", ret, self.glGetError());
13454		} else {
13455			return ret
13456		}
13457		#[cfg(not(feature = "diagnose"))]
13458		return ret;
13459	}
13460	#[inline(always)]
13461	fn glProgramUniformMatrix3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13462		let ret = process_catch("glProgramUniformMatrix3fv", catch_unwind(||(self.programuniformmatrix3fv)(program, location, count, transpose, value)));
13463		#[cfg(feature = "diagnose")]
13464		if let Ok(ret) = ret {
13465			return to_result("glProgramUniformMatrix3fv", ret, self.glGetError());
13466		} else {
13467			return ret
13468		}
13469		#[cfg(not(feature = "diagnose"))]
13470		return ret;
13471	}
13472	#[inline(always)]
13473	fn glProgramUniformMatrix4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13474		let ret = process_catch("glProgramUniformMatrix4fv", catch_unwind(||(self.programuniformmatrix4fv)(program, location, count, transpose, value)));
13475		#[cfg(feature = "diagnose")]
13476		if let Ok(ret) = ret {
13477			return to_result("glProgramUniformMatrix4fv", ret, self.glGetError());
13478		} else {
13479			return ret
13480		}
13481		#[cfg(not(feature = "diagnose"))]
13482		return ret;
13483	}
13484	#[inline(always)]
13485	fn glProgramUniformMatrix2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13486		let ret = process_catch("glProgramUniformMatrix2dv", catch_unwind(||(self.programuniformmatrix2dv)(program, location, count, transpose, value)));
13487		#[cfg(feature = "diagnose")]
13488		if let Ok(ret) = ret {
13489			return to_result("glProgramUniformMatrix2dv", ret, self.glGetError());
13490		} else {
13491			return ret
13492		}
13493		#[cfg(not(feature = "diagnose"))]
13494		return ret;
13495	}
13496	#[inline(always)]
13497	fn glProgramUniformMatrix3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13498		let ret = process_catch("glProgramUniformMatrix3dv", catch_unwind(||(self.programuniformmatrix3dv)(program, location, count, transpose, value)));
13499		#[cfg(feature = "diagnose")]
13500		if let Ok(ret) = ret {
13501			return to_result("glProgramUniformMatrix3dv", ret, self.glGetError());
13502		} else {
13503			return ret
13504		}
13505		#[cfg(not(feature = "diagnose"))]
13506		return ret;
13507	}
13508	#[inline(always)]
13509	fn glProgramUniformMatrix4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13510		let ret = process_catch("glProgramUniformMatrix4dv", catch_unwind(||(self.programuniformmatrix4dv)(program, location, count, transpose, value)));
13511		#[cfg(feature = "diagnose")]
13512		if let Ok(ret) = ret {
13513			return to_result("glProgramUniformMatrix4dv", ret, self.glGetError());
13514		} else {
13515			return ret
13516		}
13517		#[cfg(not(feature = "diagnose"))]
13518		return ret;
13519	}
13520	#[inline(always)]
13521	fn glProgramUniformMatrix2x3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13522		let ret = process_catch("glProgramUniformMatrix2x3fv", catch_unwind(||(self.programuniformmatrix2x3fv)(program, location, count, transpose, value)));
13523		#[cfg(feature = "diagnose")]
13524		if let Ok(ret) = ret {
13525			return to_result("glProgramUniformMatrix2x3fv", ret, self.glGetError());
13526		} else {
13527			return ret
13528		}
13529		#[cfg(not(feature = "diagnose"))]
13530		return ret;
13531	}
13532	#[inline(always)]
13533	fn glProgramUniformMatrix3x2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13534		let ret = process_catch("glProgramUniformMatrix3x2fv", catch_unwind(||(self.programuniformmatrix3x2fv)(program, location, count, transpose, value)));
13535		#[cfg(feature = "diagnose")]
13536		if let Ok(ret) = ret {
13537			return to_result("glProgramUniformMatrix3x2fv", ret, self.glGetError());
13538		} else {
13539			return ret
13540		}
13541		#[cfg(not(feature = "diagnose"))]
13542		return ret;
13543	}
13544	#[inline(always)]
13545	fn glProgramUniformMatrix2x4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13546		let ret = process_catch("glProgramUniformMatrix2x4fv", catch_unwind(||(self.programuniformmatrix2x4fv)(program, location, count, transpose, value)));
13547		#[cfg(feature = "diagnose")]
13548		if let Ok(ret) = ret {
13549			return to_result("glProgramUniformMatrix2x4fv", ret, self.glGetError());
13550		} else {
13551			return ret
13552		}
13553		#[cfg(not(feature = "diagnose"))]
13554		return ret;
13555	}
13556	#[inline(always)]
13557	fn glProgramUniformMatrix4x2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13558		let ret = process_catch("glProgramUniformMatrix4x2fv", catch_unwind(||(self.programuniformmatrix4x2fv)(program, location, count, transpose, value)));
13559		#[cfg(feature = "diagnose")]
13560		if let Ok(ret) = ret {
13561			return to_result("glProgramUniformMatrix4x2fv", ret, self.glGetError());
13562		} else {
13563			return ret
13564		}
13565		#[cfg(not(feature = "diagnose"))]
13566		return ret;
13567	}
13568	#[inline(always)]
13569	fn glProgramUniformMatrix3x4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13570		let ret = process_catch("glProgramUniformMatrix3x4fv", catch_unwind(||(self.programuniformmatrix3x4fv)(program, location, count, transpose, value)));
13571		#[cfg(feature = "diagnose")]
13572		if let Ok(ret) = ret {
13573			return to_result("glProgramUniformMatrix3x4fv", ret, self.glGetError());
13574		} else {
13575			return ret
13576		}
13577		#[cfg(not(feature = "diagnose"))]
13578		return ret;
13579	}
13580	#[inline(always)]
13581	fn glProgramUniformMatrix4x3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
13582		let ret = process_catch("glProgramUniformMatrix4x3fv", catch_unwind(||(self.programuniformmatrix4x3fv)(program, location, count, transpose, value)));
13583		#[cfg(feature = "diagnose")]
13584		if let Ok(ret) = ret {
13585			return to_result("glProgramUniformMatrix4x3fv", ret, self.glGetError());
13586		} else {
13587			return ret
13588		}
13589		#[cfg(not(feature = "diagnose"))]
13590		return ret;
13591	}
13592	#[inline(always)]
13593	fn glProgramUniformMatrix2x3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13594		let ret = process_catch("glProgramUniformMatrix2x3dv", catch_unwind(||(self.programuniformmatrix2x3dv)(program, location, count, transpose, value)));
13595		#[cfg(feature = "diagnose")]
13596		if let Ok(ret) = ret {
13597			return to_result("glProgramUniformMatrix2x3dv", ret, self.glGetError());
13598		} else {
13599			return ret
13600		}
13601		#[cfg(not(feature = "diagnose"))]
13602		return ret;
13603	}
13604	#[inline(always)]
13605	fn glProgramUniformMatrix3x2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13606		let ret = process_catch("glProgramUniformMatrix3x2dv", catch_unwind(||(self.programuniformmatrix3x2dv)(program, location, count, transpose, value)));
13607		#[cfg(feature = "diagnose")]
13608		if let Ok(ret) = ret {
13609			return to_result("glProgramUniformMatrix3x2dv", ret, self.glGetError());
13610		} else {
13611			return ret
13612		}
13613		#[cfg(not(feature = "diagnose"))]
13614		return ret;
13615	}
13616	#[inline(always)]
13617	fn glProgramUniformMatrix2x4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13618		let ret = process_catch("glProgramUniformMatrix2x4dv", catch_unwind(||(self.programuniformmatrix2x4dv)(program, location, count, transpose, value)));
13619		#[cfg(feature = "diagnose")]
13620		if let Ok(ret) = ret {
13621			return to_result("glProgramUniformMatrix2x4dv", ret, self.glGetError());
13622		} else {
13623			return ret
13624		}
13625		#[cfg(not(feature = "diagnose"))]
13626		return ret;
13627	}
13628	#[inline(always)]
13629	fn glProgramUniformMatrix4x2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13630		let ret = process_catch("glProgramUniformMatrix4x2dv", catch_unwind(||(self.programuniformmatrix4x2dv)(program, location, count, transpose, value)));
13631		#[cfg(feature = "diagnose")]
13632		if let Ok(ret) = ret {
13633			return to_result("glProgramUniformMatrix4x2dv", ret, self.glGetError());
13634		} else {
13635			return ret
13636		}
13637		#[cfg(not(feature = "diagnose"))]
13638		return ret;
13639	}
13640	#[inline(always)]
13641	fn glProgramUniformMatrix3x4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13642		let ret = process_catch("glProgramUniformMatrix3x4dv", catch_unwind(||(self.programuniformmatrix3x4dv)(program, location, count, transpose, value)));
13643		#[cfg(feature = "diagnose")]
13644		if let Ok(ret) = ret {
13645			return to_result("glProgramUniformMatrix3x4dv", ret, self.glGetError());
13646		} else {
13647			return ret
13648		}
13649		#[cfg(not(feature = "diagnose"))]
13650		return ret;
13651	}
13652	#[inline(always)]
13653	fn glProgramUniformMatrix4x3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
13654		let ret = process_catch("glProgramUniformMatrix4x3dv", catch_unwind(||(self.programuniformmatrix4x3dv)(program, location, count, transpose, value)));
13655		#[cfg(feature = "diagnose")]
13656		if let Ok(ret) = ret {
13657			return to_result("glProgramUniformMatrix4x3dv", ret, self.glGetError());
13658		} else {
13659			return ret
13660		}
13661		#[cfg(not(feature = "diagnose"))]
13662		return ret;
13663	}
13664	#[inline(always)]
13665	fn glValidateProgramPipeline(&self, pipeline: GLuint) -> Result<()> {
13666		let ret = process_catch("glValidateProgramPipeline", catch_unwind(||(self.validateprogrampipeline)(pipeline)));
13667		#[cfg(feature = "diagnose")]
13668		if let Ok(ret) = ret {
13669			return to_result("glValidateProgramPipeline", ret, self.glGetError());
13670		} else {
13671			return ret
13672		}
13673		#[cfg(not(feature = "diagnose"))]
13674		return ret;
13675	}
13676	#[inline(always)]
13677	fn glGetProgramPipelineInfoLog(&self, pipeline: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()> {
13678		let ret = process_catch("glGetProgramPipelineInfoLog", catch_unwind(||(self.getprogrampipelineinfolog)(pipeline, bufSize, length, infoLog)));
13679		#[cfg(feature = "diagnose")]
13680		if let Ok(ret) = ret {
13681			return to_result("glGetProgramPipelineInfoLog", ret, self.glGetError());
13682		} else {
13683			return ret
13684		}
13685		#[cfg(not(feature = "diagnose"))]
13686		return ret;
13687	}
13688	#[inline(always)]
13689	fn glVertexAttribL1d(&self, index: GLuint, x: GLdouble) -> Result<()> {
13690		let ret = process_catch("glVertexAttribL1d", catch_unwind(||(self.vertexattribl1d)(index, x)));
13691		#[cfg(feature = "diagnose")]
13692		if let Ok(ret) = ret {
13693			return to_result("glVertexAttribL1d", ret, self.glGetError());
13694		} else {
13695			return ret
13696		}
13697		#[cfg(not(feature = "diagnose"))]
13698		return ret;
13699	}
13700	#[inline(always)]
13701	fn glVertexAttribL2d(&self, index: GLuint, x: GLdouble, y: GLdouble) -> Result<()> {
13702		let ret = process_catch("glVertexAttribL2d", catch_unwind(||(self.vertexattribl2d)(index, x, y)));
13703		#[cfg(feature = "diagnose")]
13704		if let Ok(ret) = ret {
13705			return to_result("glVertexAttribL2d", ret, self.glGetError());
13706		} else {
13707			return ret
13708		}
13709		#[cfg(not(feature = "diagnose"))]
13710		return ret;
13711	}
13712	#[inline(always)]
13713	fn glVertexAttribL3d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()> {
13714		let ret = process_catch("glVertexAttribL3d", catch_unwind(||(self.vertexattribl3d)(index, x, y, z)));
13715		#[cfg(feature = "diagnose")]
13716		if let Ok(ret) = ret {
13717			return to_result("glVertexAttribL3d", ret, self.glGetError());
13718		} else {
13719			return ret
13720		}
13721		#[cfg(not(feature = "diagnose"))]
13722		return ret;
13723	}
13724	#[inline(always)]
13725	fn glVertexAttribL4d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()> {
13726		let ret = process_catch("glVertexAttribL4d", catch_unwind(||(self.vertexattribl4d)(index, x, y, z, w)));
13727		#[cfg(feature = "diagnose")]
13728		if let Ok(ret) = ret {
13729			return to_result("glVertexAttribL4d", ret, self.glGetError());
13730		} else {
13731			return ret
13732		}
13733		#[cfg(not(feature = "diagnose"))]
13734		return ret;
13735	}
13736	#[inline(always)]
13737	fn glVertexAttribL1dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
13738		let ret = process_catch("glVertexAttribL1dv", catch_unwind(||(self.vertexattribl1dv)(index, v)));
13739		#[cfg(feature = "diagnose")]
13740		if let Ok(ret) = ret {
13741			return to_result("glVertexAttribL1dv", ret, self.glGetError());
13742		} else {
13743			return ret
13744		}
13745		#[cfg(not(feature = "diagnose"))]
13746		return ret;
13747	}
13748	#[inline(always)]
13749	fn glVertexAttribL2dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
13750		let ret = process_catch("glVertexAttribL2dv", catch_unwind(||(self.vertexattribl2dv)(index, v)));
13751		#[cfg(feature = "diagnose")]
13752		if let Ok(ret) = ret {
13753			return to_result("glVertexAttribL2dv", ret, self.glGetError());
13754		} else {
13755			return ret
13756		}
13757		#[cfg(not(feature = "diagnose"))]
13758		return ret;
13759	}
13760	#[inline(always)]
13761	fn glVertexAttribL3dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
13762		let ret = process_catch("glVertexAttribL3dv", catch_unwind(||(self.vertexattribl3dv)(index, v)));
13763		#[cfg(feature = "diagnose")]
13764		if let Ok(ret) = ret {
13765			return to_result("glVertexAttribL3dv", ret, self.glGetError());
13766		} else {
13767			return ret
13768		}
13769		#[cfg(not(feature = "diagnose"))]
13770		return ret;
13771	}
13772	#[inline(always)]
13773	fn glVertexAttribL4dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
13774		let ret = process_catch("glVertexAttribL4dv", catch_unwind(||(self.vertexattribl4dv)(index, v)));
13775		#[cfg(feature = "diagnose")]
13776		if let Ok(ret) = ret {
13777			return to_result("glVertexAttribL4dv", ret, self.glGetError());
13778		} else {
13779			return ret
13780		}
13781		#[cfg(not(feature = "diagnose"))]
13782		return ret;
13783	}
13784	#[inline(always)]
13785	fn glVertexAttribLPointer(&self, index: GLuint, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()> {
13786		let ret = process_catch("glVertexAttribLPointer", catch_unwind(||(self.vertexattriblpointer)(index, size, type_, stride, pointer)));
13787		#[cfg(feature = "diagnose")]
13788		if let Ok(ret) = ret {
13789			return to_result("glVertexAttribLPointer", ret, self.glGetError());
13790		} else {
13791			return ret
13792		}
13793		#[cfg(not(feature = "diagnose"))]
13794		return ret;
13795	}
13796	#[inline(always)]
13797	fn glGetVertexAttribLdv(&self, index: GLuint, pname: GLenum, params: *mut GLdouble) -> Result<()> {
13798		let ret = process_catch("glGetVertexAttribLdv", catch_unwind(||(self.getvertexattribldv)(index, pname, params)));
13799		#[cfg(feature = "diagnose")]
13800		if let Ok(ret) = ret {
13801			return to_result("glGetVertexAttribLdv", ret, self.glGetError());
13802		} else {
13803			return ret
13804		}
13805		#[cfg(not(feature = "diagnose"))]
13806		return ret;
13807	}
13808	#[inline(always)]
13809	fn glViewportArrayv(&self, first: GLuint, count: GLsizei, v: *const GLfloat) -> Result<()> {
13810		let ret = process_catch("glViewportArrayv", catch_unwind(||(self.viewportarrayv)(first, count, v)));
13811		#[cfg(feature = "diagnose")]
13812		if let Ok(ret) = ret {
13813			return to_result("glViewportArrayv", ret, self.glGetError());
13814		} else {
13815			return ret
13816		}
13817		#[cfg(not(feature = "diagnose"))]
13818		return ret;
13819	}
13820	#[inline(always)]
13821	fn glViewportIndexedf(&self, index: GLuint, x: GLfloat, y: GLfloat, w: GLfloat, h: GLfloat) -> Result<()> {
13822		let ret = process_catch("glViewportIndexedf", catch_unwind(||(self.viewportindexedf)(index, x, y, w, h)));
13823		#[cfg(feature = "diagnose")]
13824		if let Ok(ret) = ret {
13825			return to_result("glViewportIndexedf", ret, self.glGetError());
13826		} else {
13827			return ret
13828		}
13829		#[cfg(not(feature = "diagnose"))]
13830		return ret;
13831	}
13832	#[inline(always)]
13833	fn glViewportIndexedfv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
13834		let ret = process_catch("glViewportIndexedfv", catch_unwind(||(self.viewportindexedfv)(index, v)));
13835		#[cfg(feature = "diagnose")]
13836		if let Ok(ret) = ret {
13837			return to_result("glViewportIndexedfv", ret, self.glGetError());
13838		} else {
13839			return ret
13840		}
13841		#[cfg(not(feature = "diagnose"))]
13842		return ret;
13843	}
13844	#[inline(always)]
13845	fn glScissorArrayv(&self, first: GLuint, count: GLsizei, v: *const GLint) -> Result<()> {
13846		let ret = process_catch("glScissorArrayv", catch_unwind(||(self.scissorarrayv)(first, count, v)));
13847		#[cfg(feature = "diagnose")]
13848		if let Ok(ret) = ret {
13849			return to_result("glScissorArrayv", ret, self.glGetError());
13850		} else {
13851			return ret
13852		}
13853		#[cfg(not(feature = "diagnose"))]
13854		return ret;
13855	}
13856	#[inline(always)]
13857	fn glScissorIndexed(&self, index: GLuint, left: GLint, bottom: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
13858		let ret = process_catch("glScissorIndexed", catch_unwind(||(self.scissorindexed)(index, left, bottom, width, height)));
13859		#[cfg(feature = "diagnose")]
13860		if let Ok(ret) = ret {
13861			return to_result("glScissorIndexed", ret, self.glGetError());
13862		} else {
13863			return ret
13864		}
13865		#[cfg(not(feature = "diagnose"))]
13866		return ret;
13867	}
13868	#[inline(always)]
13869	fn glScissorIndexedv(&self, index: GLuint, v: *const GLint) -> Result<()> {
13870		let ret = process_catch("glScissorIndexedv", catch_unwind(||(self.scissorindexedv)(index, v)));
13871		#[cfg(feature = "diagnose")]
13872		if let Ok(ret) = ret {
13873			return to_result("glScissorIndexedv", ret, self.glGetError());
13874		} else {
13875			return ret
13876		}
13877		#[cfg(not(feature = "diagnose"))]
13878		return ret;
13879	}
13880	#[inline(always)]
13881	fn glDepthRangeArrayv(&self, first: GLuint, count: GLsizei, v: *const GLdouble) -> Result<()> {
13882		let ret = process_catch("glDepthRangeArrayv", catch_unwind(||(self.depthrangearrayv)(first, count, v)));
13883		#[cfg(feature = "diagnose")]
13884		if let Ok(ret) = ret {
13885			return to_result("glDepthRangeArrayv", ret, self.glGetError());
13886		} else {
13887			return ret
13888		}
13889		#[cfg(not(feature = "diagnose"))]
13890		return ret;
13891	}
13892	#[inline(always)]
13893	fn glDepthRangeIndexed(&self, index: GLuint, n: GLdouble, f: GLdouble) -> Result<()> {
13894		let ret = process_catch("glDepthRangeIndexed", catch_unwind(||(self.depthrangeindexed)(index, n, f)));
13895		#[cfg(feature = "diagnose")]
13896		if let Ok(ret) = ret {
13897			return to_result("glDepthRangeIndexed", ret, self.glGetError());
13898		} else {
13899			return ret
13900		}
13901		#[cfg(not(feature = "diagnose"))]
13902		return ret;
13903	}
13904	#[inline(always)]
13905	fn glGetFloati_v(&self, target: GLenum, index: GLuint, data: *mut GLfloat) -> Result<()> {
13906		let ret = process_catch("glGetFloati_v", catch_unwind(||(self.getfloati_v)(target, index, data)));
13907		#[cfg(feature = "diagnose")]
13908		if let Ok(ret) = ret {
13909			return to_result("glGetFloati_v", ret, self.glGetError());
13910		} else {
13911			return ret
13912		}
13913		#[cfg(not(feature = "diagnose"))]
13914		return ret;
13915	}
13916	#[inline(always)]
13917	fn glGetDoublei_v(&self, target: GLenum, index: GLuint, data: *mut GLdouble) -> Result<()> {
13918		let ret = process_catch("glGetDoublei_v", catch_unwind(||(self.getdoublei_v)(target, index, data)));
13919		#[cfg(feature = "diagnose")]
13920		if let Ok(ret) = ret {
13921			return to_result("glGetDoublei_v", ret, self.glGetError());
13922		} else {
13923			return ret
13924		}
13925		#[cfg(not(feature = "diagnose"))]
13926		return ret;
13927	}
13928}
13929
13930impl Version41 {
13931	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
13932		let (_spec, major, minor, release) = base.get_version();
13933		if (major, minor, release) < (4, 1, 0) {
13934			return Self::default();
13935		}
13936		Self {
13937			available: true,
13938			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
13939			releaseshadercompiler: {let proc = get_proc_address("glReleaseShaderCompiler"); if proc == null() {dummy_pfnglreleaseshadercompilerproc} else {unsafe{transmute(proc)}}},
13940			shaderbinary: {let proc = get_proc_address("glShaderBinary"); if proc == null() {dummy_pfnglshaderbinaryproc} else {unsafe{transmute(proc)}}},
13941			getshaderprecisionformat: {let proc = get_proc_address("glGetShaderPrecisionFormat"); if proc == null() {dummy_pfnglgetshaderprecisionformatproc} else {unsafe{transmute(proc)}}},
13942			depthrangef: {let proc = get_proc_address("glDepthRangef"); if proc == null() {dummy_pfngldepthrangefproc} else {unsafe{transmute(proc)}}},
13943			cleardepthf: {let proc = get_proc_address("glClearDepthf"); if proc == null() {dummy_pfnglcleardepthfproc} else {unsafe{transmute(proc)}}},
13944			getprogrambinary: {let proc = get_proc_address("glGetProgramBinary"); if proc == null() {dummy_pfnglgetprogrambinaryproc} else {unsafe{transmute(proc)}}},
13945			programbinary: {let proc = get_proc_address("glProgramBinary"); if proc == null() {dummy_pfnglprogrambinaryproc} else {unsafe{transmute(proc)}}},
13946			programparameteri: {let proc = get_proc_address("glProgramParameteri"); if proc == null() {dummy_pfnglprogramparameteriproc} else {unsafe{transmute(proc)}}},
13947			useprogramstages: {let proc = get_proc_address("glUseProgramStages"); if proc == null() {dummy_pfngluseprogramstagesproc} else {unsafe{transmute(proc)}}},
13948			activeshaderprogram: {let proc = get_proc_address("glActiveShaderProgram"); if proc == null() {dummy_pfnglactiveshaderprogramproc} else {unsafe{transmute(proc)}}},
13949			createshaderprogramv: {let proc = get_proc_address("glCreateShaderProgramv"); if proc == null() {dummy_pfnglcreateshaderprogramvproc} else {unsafe{transmute(proc)}}},
13950			bindprogrampipeline: {let proc = get_proc_address("glBindProgramPipeline"); if proc == null() {dummy_pfnglbindprogrampipelineproc} else {unsafe{transmute(proc)}}},
13951			deleteprogrampipelines: {let proc = get_proc_address("glDeleteProgramPipelines"); if proc == null() {dummy_pfngldeleteprogrampipelinesproc} else {unsafe{transmute(proc)}}},
13952			genprogrampipelines: {let proc = get_proc_address("glGenProgramPipelines"); if proc == null() {dummy_pfnglgenprogrampipelinesproc} else {unsafe{transmute(proc)}}},
13953			isprogrampipeline: {let proc = get_proc_address("glIsProgramPipeline"); if proc == null() {dummy_pfnglisprogrampipelineproc} else {unsafe{transmute(proc)}}},
13954			getprogrampipelineiv: {let proc = get_proc_address("glGetProgramPipelineiv"); if proc == null() {dummy_pfnglgetprogrampipelineivproc} else {unsafe{transmute(proc)}}},
13955			programuniform1i: {let proc = get_proc_address("glProgramUniform1i"); if proc == null() {dummy_pfnglprogramuniform1iproc} else {unsafe{transmute(proc)}}},
13956			programuniform1iv: {let proc = get_proc_address("glProgramUniform1iv"); if proc == null() {dummy_pfnglprogramuniform1ivproc} else {unsafe{transmute(proc)}}},
13957			programuniform1f: {let proc = get_proc_address("glProgramUniform1f"); if proc == null() {dummy_pfnglprogramuniform1fproc} else {unsafe{transmute(proc)}}},
13958			programuniform1fv: {let proc = get_proc_address("glProgramUniform1fv"); if proc == null() {dummy_pfnglprogramuniform1fvproc} else {unsafe{transmute(proc)}}},
13959			programuniform1d: {let proc = get_proc_address("glProgramUniform1d"); if proc == null() {dummy_pfnglprogramuniform1dproc} else {unsafe{transmute(proc)}}},
13960			programuniform1dv: {let proc = get_proc_address("glProgramUniform1dv"); if proc == null() {dummy_pfnglprogramuniform1dvproc} else {unsafe{transmute(proc)}}},
13961			programuniform1ui: {let proc = get_proc_address("glProgramUniform1ui"); if proc == null() {dummy_pfnglprogramuniform1uiproc} else {unsafe{transmute(proc)}}},
13962			programuniform1uiv: {let proc = get_proc_address("glProgramUniform1uiv"); if proc == null() {dummy_pfnglprogramuniform1uivproc} else {unsafe{transmute(proc)}}},
13963			programuniform2i: {let proc = get_proc_address("glProgramUniform2i"); if proc == null() {dummy_pfnglprogramuniform2iproc} else {unsafe{transmute(proc)}}},
13964			programuniform2iv: {let proc = get_proc_address("glProgramUniform2iv"); if proc == null() {dummy_pfnglprogramuniform2ivproc} else {unsafe{transmute(proc)}}},
13965			programuniform2f: {let proc = get_proc_address("glProgramUniform2f"); if proc == null() {dummy_pfnglprogramuniform2fproc} else {unsafe{transmute(proc)}}},
13966			programuniform2fv: {let proc = get_proc_address("glProgramUniform2fv"); if proc == null() {dummy_pfnglprogramuniform2fvproc} else {unsafe{transmute(proc)}}},
13967			programuniform2d: {let proc = get_proc_address("glProgramUniform2d"); if proc == null() {dummy_pfnglprogramuniform2dproc} else {unsafe{transmute(proc)}}},
13968			programuniform2dv: {let proc = get_proc_address("glProgramUniform2dv"); if proc == null() {dummy_pfnglprogramuniform2dvproc} else {unsafe{transmute(proc)}}},
13969			programuniform2ui: {let proc = get_proc_address("glProgramUniform2ui"); if proc == null() {dummy_pfnglprogramuniform2uiproc} else {unsafe{transmute(proc)}}},
13970			programuniform2uiv: {let proc = get_proc_address("glProgramUniform2uiv"); if proc == null() {dummy_pfnglprogramuniform2uivproc} else {unsafe{transmute(proc)}}},
13971			programuniform3i: {let proc = get_proc_address("glProgramUniform3i"); if proc == null() {dummy_pfnglprogramuniform3iproc} else {unsafe{transmute(proc)}}},
13972			programuniform3iv: {let proc = get_proc_address("glProgramUniform3iv"); if proc == null() {dummy_pfnglprogramuniform3ivproc} else {unsafe{transmute(proc)}}},
13973			programuniform3f: {let proc = get_proc_address("glProgramUniform3f"); if proc == null() {dummy_pfnglprogramuniform3fproc} else {unsafe{transmute(proc)}}},
13974			programuniform3fv: {let proc = get_proc_address("glProgramUniform3fv"); if proc == null() {dummy_pfnglprogramuniform3fvproc} else {unsafe{transmute(proc)}}},
13975			programuniform3d: {let proc = get_proc_address("glProgramUniform3d"); if proc == null() {dummy_pfnglprogramuniform3dproc} else {unsafe{transmute(proc)}}},
13976			programuniform3dv: {let proc = get_proc_address("glProgramUniform3dv"); if proc == null() {dummy_pfnglprogramuniform3dvproc} else {unsafe{transmute(proc)}}},
13977			programuniform3ui: {let proc = get_proc_address("glProgramUniform3ui"); if proc == null() {dummy_pfnglprogramuniform3uiproc} else {unsafe{transmute(proc)}}},
13978			programuniform3uiv: {let proc = get_proc_address("glProgramUniform3uiv"); if proc == null() {dummy_pfnglprogramuniform3uivproc} else {unsafe{transmute(proc)}}},
13979			programuniform4i: {let proc = get_proc_address("glProgramUniform4i"); if proc == null() {dummy_pfnglprogramuniform4iproc} else {unsafe{transmute(proc)}}},
13980			programuniform4iv: {let proc = get_proc_address("glProgramUniform4iv"); if proc == null() {dummy_pfnglprogramuniform4ivproc} else {unsafe{transmute(proc)}}},
13981			programuniform4f: {let proc = get_proc_address("glProgramUniform4f"); if proc == null() {dummy_pfnglprogramuniform4fproc} else {unsafe{transmute(proc)}}},
13982			programuniform4fv: {let proc = get_proc_address("glProgramUniform4fv"); if proc == null() {dummy_pfnglprogramuniform4fvproc} else {unsafe{transmute(proc)}}},
13983			programuniform4d: {let proc = get_proc_address("glProgramUniform4d"); if proc == null() {dummy_pfnglprogramuniform4dproc} else {unsafe{transmute(proc)}}},
13984			programuniform4dv: {let proc = get_proc_address("glProgramUniform4dv"); if proc == null() {dummy_pfnglprogramuniform4dvproc} else {unsafe{transmute(proc)}}},
13985			programuniform4ui: {let proc = get_proc_address("glProgramUniform4ui"); if proc == null() {dummy_pfnglprogramuniform4uiproc} else {unsafe{transmute(proc)}}},
13986			programuniform4uiv: {let proc = get_proc_address("glProgramUniform4uiv"); if proc == null() {dummy_pfnglprogramuniform4uivproc} else {unsafe{transmute(proc)}}},
13987			programuniformmatrix2fv: {let proc = get_proc_address("glProgramUniformMatrix2fv"); if proc == null() {dummy_pfnglprogramuniformmatrix2fvproc} else {unsafe{transmute(proc)}}},
13988			programuniformmatrix3fv: {let proc = get_proc_address("glProgramUniformMatrix3fv"); if proc == null() {dummy_pfnglprogramuniformmatrix3fvproc} else {unsafe{transmute(proc)}}},
13989			programuniformmatrix4fv: {let proc = get_proc_address("glProgramUniformMatrix4fv"); if proc == null() {dummy_pfnglprogramuniformmatrix4fvproc} else {unsafe{transmute(proc)}}},
13990			programuniformmatrix2dv: {let proc = get_proc_address("glProgramUniformMatrix2dv"); if proc == null() {dummy_pfnglprogramuniformmatrix2dvproc} else {unsafe{transmute(proc)}}},
13991			programuniformmatrix3dv: {let proc = get_proc_address("glProgramUniformMatrix3dv"); if proc == null() {dummy_pfnglprogramuniformmatrix3dvproc} else {unsafe{transmute(proc)}}},
13992			programuniformmatrix4dv: {let proc = get_proc_address("glProgramUniformMatrix4dv"); if proc == null() {dummy_pfnglprogramuniformmatrix4dvproc} else {unsafe{transmute(proc)}}},
13993			programuniformmatrix2x3fv: {let proc = get_proc_address("glProgramUniformMatrix2x3fv"); if proc == null() {dummy_pfnglprogramuniformmatrix2x3fvproc} else {unsafe{transmute(proc)}}},
13994			programuniformmatrix3x2fv: {let proc = get_proc_address("glProgramUniformMatrix3x2fv"); if proc == null() {dummy_pfnglprogramuniformmatrix3x2fvproc} else {unsafe{transmute(proc)}}},
13995			programuniformmatrix2x4fv: {let proc = get_proc_address("glProgramUniformMatrix2x4fv"); if proc == null() {dummy_pfnglprogramuniformmatrix2x4fvproc} else {unsafe{transmute(proc)}}},
13996			programuniformmatrix4x2fv: {let proc = get_proc_address("glProgramUniformMatrix4x2fv"); if proc == null() {dummy_pfnglprogramuniformmatrix4x2fvproc} else {unsafe{transmute(proc)}}},
13997			programuniformmatrix3x4fv: {let proc = get_proc_address("glProgramUniformMatrix3x4fv"); if proc == null() {dummy_pfnglprogramuniformmatrix3x4fvproc} else {unsafe{transmute(proc)}}},
13998			programuniformmatrix4x3fv: {let proc = get_proc_address("glProgramUniformMatrix4x3fv"); if proc == null() {dummy_pfnglprogramuniformmatrix4x3fvproc} else {unsafe{transmute(proc)}}},
13999			programuniformmatrix2x3dv: {let proc = get_proc_address("glProgramUniformMatrix2x3dv"); if proc == null() {dummy_pfnglprogramuniformmatrix2x3dvproc} else {unsafe{transmute(proc)}}},
14000			programuniformmatrix3x2dv: {let proc = get_proc_address("glProgramUniformMatrix3x2dv"); if proc == null() {dummy_pfnglprogramuniformmatrix3x2dvproc} else {unsafe{transmute(proc)}}},
14001			programuniformmatrix2x4dv: {let proc = get_proc_address("glProgramUniformMatrix2x4dv"); if proc == null() {dummy_pfnglprogramuniformmatrix2x4dvproc} else {unsafe{transmute(proc)}}},
14002			programuniformmatrix4x2dv: {let proc = get_proc_address("glProgramUniformMatrix4x2dv"); if proc == null() {dummy_pfnglprogramuniformmatrix4x2dvproc} else {unsafe{transmute(proc)}}},
14003			programuniformmatrix3x4dv: {let proc = get_proc_address("glProgramUniformMatrix3x4dv"); if proc == null() {dummy_pfnglprogramuniformmatrix3x4dvproc} else {unsafe{transmute(proc)}}},
14004			programuniformmatrix4x3dv: {let proc = get_proc_address("glProgramUniformMatrix4x3dv"); if proc == null() {dummy_pfnglprogramuniformmatrix4x3dvproc} else {unsafe{transmute(proc)}}},
14005			validateprogrampipeline: {let proc = get_proc_address("glValidateProgramPipeline"); if proc == null() {dummy_pfnglvalidateprogrampipelineproc} else {unsafe{transmute(proc)}}},
14006			getprogrampipelineinfolog: {let proc = get_proc_address("glGetProgramPipelineInfoLog"); if proc == null() {dummy_pfnglgetprogrampipelineinfologproc} else {unsafe{transmute(proc)}}},
14007			vertexattribl1d: {let proc = get_proc_address("glVertexAttribL1d"); if proc == null() {dummy_pfnglvertexattribl1dproc} else {unsafe{transmute(proc)}}},
14008			vertexattribl2d: {let proc = get_proc_address("glVertexAttribL2d"); if proc == null() {dummy_pfnglvertexattribl2dproc} else {unsafe{transmute(proc)}}},
14009			vertexattribl3d: {let proc = get_proc_address("glVertexAttribL3d"); if proc == null() {dummy_pfnglvertexattribl3dproc} else {unsafe{transmute(proc)}}},
14010			vertexattribl4d: {let proc = get_proc_address("glVertexAttribL4d"); if proc == null() {dummy_pfnglvertexattribl4dproc} else {unsafe{transmute(proc)}}},
14011			vertexattribl1dv: {let proc = get_proc_address("glVertexAttribL1dv"); if proc == null() {dummy_pfnglvertexattribl1dvproc} else {unsafe{transmute(proc)}}},
14012			vertexattribl2dv: {let proc = get_proc_address("glVertexAttribL2dv"); if proc == null() {dummy_pfnglvertexattribl2dvproc} else {unsafe{transmute(proc)}}},
14013			vertexattribl3dv: {let proc = get_proc_address("glVertexAttribL3dv"); if proc == null() {dummy_pfnglvertexattribl3dvproc} else {unsafe{transmute(proc)}}},
14014			vertexattribl4dv: {let proc = get_proc_address("glVertexAttribL4dv"); if proc == null() {dummy_pfnglvertexattribl4dvproc} else {unsafe{transmute(proc)}}},
14015			vertexattriblpointer: {let proc = get_proc_address("glVertexAttribLPointer"); if proc == null() {dummy_pfnglvertexattriblpointerproc} else {unsafe{transmute(proc)}}},
14016			getvertexattribldv: {let proc = get_proc_address("glGetVertexAttribLdv"); if proc == null() {dummy_pfnglgetvertexattribldvproc} else {unsafe{transmute(proc)}}},
14017			viewportarrayv: {let proc = get_proc_address("glViewportArrayv"); if proc == null() {dummy_pfnglviewportarrayvproc} else {unsafe{transmute(proc)}}},
14018			viewportindexedf: {let proc = get_proc_address("glViewportIndexedf"); if proc == null() {dummy_pfnglviewportindexedfproc} else {unsafe{transmute(proc)}}},
14019			viewportindexedfv: {let proc = get_proc_address("glViewportIndexedfv"); if proc == null() {dummy_pfnglviewportindexedfvproc} else {unsafe{transmute(proc)}}},
14020			scissorarrayv: {let proc = get_proc_address("glScissorArrayv"); if proc == null() {dummy_pfnglscissorarrayvproc} else {unsafe{transmute(proc)}}},
14021			scissorindexed: {let proc = get_proc_address("glScissorIndexed"); if proc == null() {dummy_pfnglscissorindexedproc} else {unsafe{transmute(proc)}}},
14022			scissorindexedv: {let proc = get_proc_address("glScissorIndexedv"); if proc == null() {dummy_pfnglscissorindexedvproc} else {unsafe{transmute(proc)}}},
14023			depthrangearrayv: {let proc = get_proc_address("glDepthRangeArrayv"); if proc == null() {dummy_pfngldepthrangearrayvproc} else {unsafe{transmute(proc)}}},
14024			depthrangeindexed: {let proc = get_proc_address("glDepthRangeIndexed"); if proc == null() {dummy_pfngldepthrangeindexedproc} else {unsafe{transmute(proc)}}},
14025			getfloati_v: {let proc = get_proc_address("glGetFloati_v"); if proc == null() {dummy_pfnglgetfloati_vproc} else {unsafe{transmute(proc)}}},
14026			getdoublei_v: {let proc = get_proc_address("glGetDoublei_v"); if proc == null() {dummy_pfnglgetdoublei_vproc} else {unsafe{transmute(proc)}}},
14027		}
14028	}
14029	#[inline(always)]
14030	pub fn get_available(&self) -> bool {
14031		self.available
14032	}
14033}
14034
14035impl Default for Version41 {
14036	fn default() -> Self {
14037		Self {
14038			available: false,
14039			geterror: dummy_pfnglgeterrorproc,
14040			releaseshadercompiler: dummy_pfnglreleaseshadercompilerproc,
14041			shaderbinary: dummy_pfnglshaderbinaryproc,
14042			getshaderprecisionformat: dummy_pfnglgetshaderprecisionformatproc,
14043			depthrangef: dummy_pfngldepthrangefproc,
14044			cleardepthf: dummy_pfnglcleardepthfproc,
14045			getprogrambinary: dummy_pfnglgetprogrambinaryproc,
14046			programbinary: dummy_pfnglprogrambinaryproc,
14047			programparameteri: dummy_pfnglprogramparameteriproc,
14048			useprogramstages: dummy_pfngluseprogramstagesproc,
14049			activeshaderprogram: dummy_pfnglactiveshaderprogramproc,
14050			createshaderprogramv: dummy_pfnglcreateshaderprogramvproc,
14051			bindprogrampipeline: dummy_pfnglbindprogrampipelineproc,
14052			deleteprogrampipelines: dummy_pfngldeleteprogrampipelinesproc,
14053			genprogrampipelines: dummy_pfnglgenprogrampipelinesproc,
14054			isprogrampipeline: dummy_pfnglisprogrampipelineproc,
14055			getprogrampipelineiv: dummy_pfnglgetprogrampipelineivproc,
14056			programuniform1i: dummy_pfnglprogramuniform1iproc,
14057			programuniform1iv: dummy_pfnglprogramuniform1ivproc,
14058			programuniform1f: dummy_pfnglprogramuniform1fproc,
14059			programuniform1fv: dummy_pfnglprogramuniform1fvproc,
14060			programuniform1d: dummy_pfnglprogramuniform1dproc,
14061			programuniform1dv: dummy_pfnglprogramuniform1dvproc,
14062			programuniform1ui: dummy_pfnglprogramuniform1uiproc,
14063			programuniform1uiv: dummy_pfnglprogramuniform1uivproc,
14064			programuniform2i: dummy_pfnglprogramuniform2iproc,
14065			programuniform2iv: dummy_pfnglprogramuniform2ivproc,
14066			programuniform2f: dummy_pfnglprogramuniform2fproc,
14067			programuniform2fv: dummy_pfnglprogramuniform2fvproc,
14068			programuniform2d: dummy_pfnglprogramuniform2dproc,
14069			programuniform2dv: dummy_pfnglprogramuniform2dvproc,
14070			programuniform2ui: dummy_pfnglprogramuniform2uiproc,
14071			programuniform2uiv: dummy_pfnglprogramuniform2uivproc,
14072			programuniform3i: dummy_pfnglprogramuniform3iproc,
14073			programuniform3iv: dummy_pfnglprogramuniform3ivproc,
14074			programuniform3f: dummy_pfnglprogramuniform3fproc,
14075			programuniform3fv: dummy_pfnglprogramuniform3fvproc,
14076			programuniform3d: dummy_pfnglprogramuniform3dproc,
14077			programuniform3dv: dummy_pfnglprogramuniform3dvproc,
14078			programuniform3ui: dummy_pfnglprogramuniform3uiproc,
14079			programuniform3uiv: dummy_pfnglprogramuniform3uivproc,
14080			programuniform4i: dummy_pfnglprogramuniform4iproc,
14081			programuniform4iv: dummy_pfnglprogramuniform4ivproc,
14082			programuniform4f: dummy_pfnglprogramuniform4fproc,
14083			programuniform4fv: dummy_pfnglprogramuniform4fvproc,
14084			programuniform4d: dummy_pfnglprogramuniform4dproc,
14085			programuniform4dv: dummy_pfnglprogramuniform4dvproc,
14086			programuniform4ui: dummy_pfnglprogramuniform4uiproc,
14087			programuniform4uiv: dummy_pfnglprogramuniform4uivproc,
14088			programuniformmatrix2fv: dummy_pfnglprogramuniformmatrix2fvproc,
14089			programuniformmatrix3fv: dummy_pfnglprogramuniformmatrix3fvproc,
14090			programuniformmatrix4fv: dummy_pfnglprogramuniformmatrix4fvproc,
14091			programuniformmatrix2dv: dummy_pfnglprogramuniformmatrix2dvproc,
14092			programuniformmatrix3dv: dummy_pfnglprogramuniformmatrix3dvproc,
14093			programuniformmatrix4dv: dummy_pfnglprogramuniformmatrix4dvproc,
14094			programuniformmatrix2x3fv: dummy_pfnglprogramuniformmatrix2x3fvproc,
14095			programuniformmatrix3x2fv: dummy_pfnglprogramuniformmatrix3x2fvproc,
14096			programuniformmatrix2x4fv: dummy_pfnglprogramuniformmatrix2x4fvproc,
14097			programuniformmatrix4x2fv: dummy_pfnglprogramuniformmatrix4x2fvproc,
14098			programuniformmatrix3x4fv: dummy_pfnglprogramuniformmatrix3x4fvproc,
14099			programuniformmatrix4x3fv: dummy_pfnglprogramuniformmatrix4x3fvproc,
14100			programuniformmatrix2x3dv: dummy_pfnglprogramuniformmatrix2x3dvproc,
14101			programuniformmatrix3x2dv: dummy_pfnglprogramuniformmatrix3x2dvproc,
14102			programuniformmatrix2x4dv: dummy_pfnglprogramuniformmatrix2x4dvproc,
14103			programuniformmatrix4x2dv: dummy_pfnglprogramuniformmatrix4x2dvproc,
14104			programuniformmatrix3x4dv: dummy_pfnglprogramuniformmatrix3x4dvproc,
14105			programuniformmatrix4x3dv: dummy_pfnglprogramuniformmatrix4x3dvproc,
14106			validateprogrampipeline: dummy_pfnglvalidateprogrampipelineproc,
14107			getprogrampipelineinfolog: dummy_pfnglgetprogrampipelineinfologproc,
14108			vertexattribl1d: dummy_pfnglvertexattribl1dproc,
14109			vertexattribl2d: dummy_pfnglvertexattribl2dproc,
14110			vertexattribl3d: dummy_pfnglvertexattribl3dproc,
14111			vertexattribl4d: dummy_pfnglvertexattribl4dproc,
14112			vertexattribl1dv: dummy_pfnglvertexattribl1dvproc,
14113			vertexattribl2dv: dummy_pfnglvertexattribl2dvproc,
14114			vertexattribl3dv: dummy_pfnglvertexattribl3dvproc,
14115			vertexattribl4dv: dummy_pfnglvertexattribl4dvproc,
14116			vertexattriblpointer: dummy_pfnglvertexattriblpointerproc,
14117			getvertexattribldv: dummy_pfnglgetvertexattribldvproc,
14118			viewportarrayv: dummy_pfnglviewportarrayvproc,
14119			viewportindexedf: dummy_pfnglviewportindexedfproc,
14120			viewportindexedfv: dummy_pfnglviewportindexedfvproc,
14121			scissorarrayv: dummy_pfnglscissorarrayvproc,
14122			scissorindexed: dummy_pfnglscissorindexedproc,
14123			scissorindexedv: dummy_pfnglscissorindexedvproc,
14124			depthrangearrayv: dummy_pfngldepthrangearrayvproc,
14125			depthrangeindexed: dummy_pfngldepthrangeindexedproc,
14126			getfloati_v: dummy_pfnglgetfloati_vproc,
14127			getdoublei_v: dummy_pfnglgetdoublei_vproc,
14128		}
14129	}
14130}
14131impl Debug for Version41 {
14132	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
14133		if self.available {
14134			f.debug_struct("Version41")
14135			.field("available", &self.available)
14136			.field("releaseshadercompiler", unsafe{if transmute::<_, *const c_void>(self.releaseshadercompiler) == (dummy_pfnglreleaseshadercompilerproc as *const c_void) {&null::<PFNGLRELEASESHADERCOMPILERPROC>()} else {&self.releaseshadercompiler}})
14137			.field("shaderbinary", unsafe{if transmute::<_, *const c_void>(self.shaderbinary) == (dummy_pfnglshaderbinaryproc as *const c_void) {&null::<PFNGLSHADERBINARYPROC>()} else {&self.shaderbinary}})
14138			.field("getshaderprecisionformat", unsafe{if transmute::<_, *const c_void>(self.getshaderprecisionformat) == (dummy_pfnglgetshaderprecisionformatproc as *const c_void) {&null::<PFNGLGETSHADERPRECISIONFORMATPROC>()} else {&self.getshaderprecisionformat}})
14139			.field("depthrangef", unsafe{if transmute::<_, *const c_void>(self.depthrangef) == (dummy_pfngldepthrangefproc as *const c_void) {&null::<PFNGLDEPTHRANGEFPROC>()} else {&self.depthrangef}})
14140			.field("cleardepthf", unsafe{if transmute::<_, *const c_void>(self.cleardepthf) == (dummy_pfnglcleardepthfproc as *const c_void) {&null::<PFNGLCLEARDEPTHFPROC>()} else {&self.cleardepthf}})
14141			.field("getprogrambinary", unsafe{if transmute::<_, *const c_void>(self.getprogrambinary) == (dummy_pfnglgetprogrambinaryproc as *const c_void) {&null::<PFNGLGETPROGRAMBINARYPROC>()} else {&self.getprogrambinary}})
14142			.field("programbinary", unsafe{if transmute::<_, *const c_void>(self.programbinary) == (dummy_pfnglprogrambinaryproc as *const c_void) {&null::<PFNGLPROGRAMBINARYPROC>()} else {&self.programbinary}})
14143			.field("programparameteri", unsafe{if transmute::<_, *const c_void>(self.programparameteri) == (dummy_pfnglprogramparameteriproc as *const c_void) {&null::<PFNGLPROGRAMPARAMETERIPROC>()} else {&self.programparameteri}})
14144			.field("useprogramstages", unsafe{if transmute::<_, *const c_void>(self.useprogramstages) == (dummy_pfngluseprogramstagesproc as *const c_void) {&null::<PFNGLUSEPROGRAMSTAGESPROC>()} else {&self.useprogramstages}})
14145			.field("activeshaderprogram", unsafe{if transmute::<_, *const c_void>(self.activeshaderprogram) == (dummy_pfnglactiveshaderprogramproc as *const c_void) {&null::<PFNGLACTIVESHADERPROGRAMPROC>()} else {&self.activeshaderprogram}})
14146			.field("createshaderprogramv", unsafe{if transmute::<_, *const c_void>(self.createshaderprogramv) == (dummy_pfnglcreateshaderprogramvproc as *const c_void) {&null::<PFNGLCREATESHADERPROGRAMVPROC>()} else {&self.createshaderprogramv}})
14147			.field("bindprogrampipeline", unsafe{if transmute::<_, *const c_void>(self.bindprogrampipeline) == (dummy_pfnglbindprogrampipelineproc as *const c_void) {&null::<PFNGLBINDPROGRAMPIPELINEPROC>()} else {&self.bindprogrampipeline}})
14148			.field("deleteprogrampipelines", unsafe{if transmute::<_, *const c_void>(self.deleteprogrampipelines) == (dummy_pfngldeleteprogrampipelinesproc as *const c_void) {&null::<PFNGLDELETEPROGRAMPIPELINESPROC>()} else {&self.deleteprogrampipelines}})
14149			.field("genprogrampipelines", unsafe{if transmute::<_, *const c_void>(self.genprogrampipelines) == (dummy_pfnglgenprogrampipelinesproc as *const c_void) {&null::<PFNGLGENPROGRAMPIPELINESPROC>()} else {&self.genprogrampipelines}})
14150			.field("isprogrampipeline", unsafe{if transmute::<_, *const c_void>(self.isprogrampipeline) == (dummy_pfnglisprogrampipelineproc as *const c_void) {&null::<PFNGLISPROGRAMPIPELINEPROC>()} else {&self.isprogrampipeline}})
14151			.field("getprogrampipelineiv", unsafe{if transmute::<_, *const c_void>(self.getprogrampipelineiv) == (dummy_pfnglgetprogrampipelineivproc as *const c_void) {&null::<PFNGLGETPROGRAMPIPELINEIVPROC>()} else {&self.getprogrampipelineiv}})
14152			.field("programuniform1i", unsafe{if transmute::<_, *const c_void>(self.programuniform1i) == (dummy_pfnglprogramuniform1iproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM1IPROC>()} else {&self.programuniform1i}})
14153			.field("programuniform1iv", unsafe{if transmute::<_, *const c_void>(self.programuniform1iv) == (dummy_pfnglprogramuniform1ivproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM1IVPROC>()} else {&self.programuniform1iv}})
14154			.field("programuniform1f", unsafe{if transmute::<_, *const c_void>(self.programuniform1f) == (dummy_pfnglprogramuniform1fproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM1FPROC>()} else {&self.programuniform1f}})
14155			.field("programuniform1fv", unsafe{if transmute::<_, *const c_void>(self.programuniform1fv) == (dummy_pfnglprogramuniform1fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM1FVPROC>()} else {&self.programuniform1fv}})
14156			.field("programuniform1d", unsafe{if transmute::<_, *const c_void>(self.programuniform1d) == (dummy_pfnglprogramuniform1dproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM1DPROC>()} else {&self.programuniform1d}})
14157			.field("programuniform1dv", unsafe{if transmute::<_, *const c_void>(self.programuniform1dv) == (dummy_pfnglprogramuniform1dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM1DVPROC>()} else {&self.programuniform1dv}})
14158			.field("programuniform1ui", unsafe{if transmute::<_, *const c_void>(self.programuniform1ui) == (dummy_pfnglprogramuniform1uiproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM1UIPROC>()} else {&self.programuniform1ui}})
14159			.field("programuniform1uiv", unsafe{if transmute::<_, *const c_void>(self.programuniform1uiv) == (dummy_pfnglprogramuniform1uivproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM1UIVPROC>()} else {&self.programuniform1uiv}})
14160			.field("programuniform2i", unsafe{if transmute::<_, *const c_void>(self.programuniform2i) == (dummy_pfnglprogramuniform2iproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM2IPROC>()} else {&self.programuniform2i}})
14161			.field("programuniform2iv", unsafe{if transmute::<_, *const c_void>(self.programuniform2iv) == (dummy_pfnglprogramuniform2ivproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM2IVPROC>()} else {&self.programuniform2iv}})
14162			.field("programuniform2f", unsafe{if transmute::<_, *const c_void>(self.programuniform2f) == (dummy_pfnglprogramuniform2fproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM2FPROC>()} else {&self.programuniform2f}})
14163			.field("programuniform2fv", unsafe{if transmute::<_, *const c_void>(self.programuniform2fv) == (dummy_pfnglprogramuniform2fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM2FVPROC>()} else {&self.programuniform2fv}})
14164			.field("programuniform2d", unsafe{if transmute::<_, *const c_void>(self.programuniform2d) == (dummy_pfnglprogramuniform2dproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM2DPROC>()} else {&self.programuniform2d}})
14165			.field("programuniform2dv", unsafe{if transmute::<_, *const c_void>(self.programuniform2dv) == (dummy_pfnglprogramuniform2dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM2DVPROC>()} else {&self.programuniform2dv}})
14166			.field("programuniform2ui", unsafe{if transmute::<_, *const c_void>(self.programuniform2ui) == (dummy_pfnglprogramuniform2uiproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM2UIPROC>()} else {&self.programuniform2ui}})
14167			.field("programuniform2uiv", unsafe{if transmute::<_, *const c_void>(self.programuniform2uiv) == (dummy_pfnglprogramuniform2uivproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM2UIVPROC>()} else {&self.programuniform2uiv}})
14168			.field("programuniform3i", unsafe{if transmute::<_, *const c_void>(self.programuniform3i) == (dummy_pfnglprogramuniform3iproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM3IPROC>()} else {&self.programuniform3i}})
14169			.field("programuniform3iv", unsafe{if transmute::<_, *const c_void>(self.programuniform3iv) == (dummy_pfnglprogramuniform3ivproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM3IVPROC>()} else {&self.programuniform3iv}})
14170			.field("programuniform3f", unsafe{if transmute::<_, *const c_void>(self.programuniform3f) == (dummy_pfnglprogramuniform3fproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM3FPROC>()} else {&self.programuniform3f}})
14171			.field("programuniform3fv", unsafe{if transmute::<_, *const c_void>(self.programuniform3fv) == (dummy_pfnglprogramuniform3fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM3FVPROC>()} else {&self.programuniform3fv}})
14172			.field("programuniform3d", unsafe{if transmute::<_, *const c_void>(self.programuniform3d) == (dummy_pfnglprogramuniform3dproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM3DPROC>()} else {&self.programuniform3d}})
14173			.field("programuniform3dv", unsafe{if transmute::<_, *const c_void>(self.programuniform3dv) == (dummy_pfnglprogramuniform3dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM3DVPROC>()} else {&self.programuniform3dv}})
14174			.field("programuniform3ui", unsafe{if transmute::<_, *const c_void>(self.programuniform3ui) == (dummy_pfnglprogramuniform3uiproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM3UIPROC>()} else {&self.programuniform3ui}})
14175			.field("programuniform3uiv", unsafe{if transmute::<_, *const c_void>(self.programuniform3uiv) == (dummy_pfnglprogramuniform3uivproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM3UIVPROC>()} else {&self.programuniform3uiv}})
14176			.field("programuniform4i", unsafe{if transmute::<_, *const c_void>(self.programuniform4i) == (dummy_pfnglprogramuniform4iproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM4IPROC>()} else {&self.programuniform4i}})
14177			.field("programuniform4iv", unsafe{if transmute::<_, *const c_void>(self.programuniform4iv) == (dummy_pfnglprogramuniform4ivproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM4IVPROC>()} else {&self.programuniform4iv}})
14178			.field("programuniform4f", unsafe{if transmute::<_, *const c_void>(self.programuniform4f) == (dummy_pfnglprogramuniform4fproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM4FPROC>()} else {&self.programuniform4f}})
14179			.field("programuniform4fv", unsafe{if transmute::<_, *const c_void>(self.programuniform4fv) == (dummy_pfnglprogramuniform4fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM4FVPROC>()} else {&self.programuniform4fv}})
14180			.field("programuniform4d", unsafe{if transmute::<_, *const c_void>(self.programuniform4d) == (dummy_pfnglprogramuniform4dproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM4DPROC>()} else {&self.programuniform4d}})
14181			.field("programuniform4dv", unsafe{if transmute::<_, *const c_void>(self.programuniform4dv) == (dummy_pfnglprogramuniform4dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM4DVPROC>()} else {&self.programuniform4dv}})
14182			.field("programuniform4ui", unsafe{if transmute::<_, *const c_void>(self.programuniform4ui) == (dummy_pfnglprogramuniform4uiproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM4UIPROC>()} else {&self.programuniform4ui}})
14183			.field("programuniform4uiv", unsafe{if transmute::<_, *const c_void>(self.programuniform4uiv) == (dummy_pfnglprogramuniform4uivproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORM4UIVPROC>()} else {&self.programuniform4uiv}})
14184			.field("programuniformmatrix2fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix2fv) == (dummy_pfnglprogramuniformmatrix2fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX2FVPROC>()} else {&self.programuniformmatrix2fv}})
14185			.field("programuniformmatrix3fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix3fv) == (dummy_pfnglprogramuniformmatrix3fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX3FVPROC>()} else {&self.programuniformmatrix3fv}})
14186			.field("programuniformmatrix4fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix4fv) == (dummy_pfnglprogramuniformmatrix4fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX4FVPROC>()} else {&self.programuniformmatrix4fv}})
14187			.field("programuniformmatrix2dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix2dv) == (dummy_pfnglprogramuniformmatrix2dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX2DVPROC>()} else {&self.programuniformmatrix2dv}})
14188			.field("programuniformmatrix3dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix3dv) == (dummy_pfnglprogramuniformmatrix3dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX3DVPROC>()} else {&self.programuniformmatrix3dv}})
14189			.field("programuniformmatrix4dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix4dv) == (dummy_pfnglprogramuniformmatrix4dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX4DVPROC>()} else {&self.programuniformmatrix4dv}})
14190			.field("programuniformmatrix2x3fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix2x3fv) == (dummy_pfnglprogramuniformmatrix2x3fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX2X3FVPROC>()} else {&self.programuniformmatrix2x3fv}})
14191			.field("programuniformmatrix3x2fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix3x2fv) == (dummy_pfnglprogramuniformmatrix3x2fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX3X2FVPROC>()} else {&self.programuniformmatrix3x2fv}})
14192			.field("programuniformmatrix2x4fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix2x4fv) == (dummy_pfnglprogramuniformmatrix2x4fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX2X4FVPROC>()} else {&self.programuniformmatrix2x4fv}})
14193			.field("programuniformmatrix4x2fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix4x2fv) == (dummy_pfnglprogramuniformmatrix4x2fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX4X2FVPROC>()} else {&self.programuniformmatrix4x2fv}})
14194			.field("programuniformmatrix3x4fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix3x4fv) == (dummy_pfnglprogramuniformmatrix3x4fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX3X4FVPROC>()} else {&self.programuniformmatrix3x4fv}})
14195			.field("programuniformmatrix4x3fv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix4x3fv) == (dummy_pfnglprogramuniformmatrix4x3fvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX4X3FVPROC>()} else {&self.programuniformmatrix4x3fv}})
14196			.field("programuniformmatrix2x3dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix2x3dv) == (dummy_pfnglprogramuniformmatrix2x3dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX2X3DVPROC>()} else {&self.programuniformmatrix2x3dv}})
14197			.field("programuniformmatrix3x2dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix3x2dv) == (dummy_pfnglprogramuniformmatrix3x2dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX3X2DVPROC>()} else {&self.programuniformmatrix3x2dv}})
14198			.field("programuniformmatrix2x4dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix2x4dv) == (dummy_pfnglprogramuniformmatrix2x4dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX2X4DVPROC>()} else {&self.programuniformmatrix2x4dv}})
14199			.field("programuniformmatrix4x2dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix4x2dv) == (dummy_pfnglprogramuniformmatrix4x2dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX4X2DVPROC>()} else {&self.programuniformmatrix4x2dv}})
14200			.field("programuniformmatrix3x4dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix3x4dv) == (dummy_pfnglprogramuniformmatrix3x4dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX3X4DVPROC>()} else {&self.programuniformmatrix3x4dv}})
14201			.field("programuniformmatrix4x3dv", unsafe{if transmute::<_, *const c_void>(self.programuniformmatrix4x3dv) == (dummy_pfnglprogramuniformmatrix4x3dvproc as *const c_void) {&null::<PFNGLPROGRAMUNIFORMMATRIX4X3DVPROC>()} else {&self.programuniformmatrix4x3dv}})
14202			.field("validateprogrampipeline", unsafe{if transmute::<_, *const c_void>(self.validateprogrampipeline) == (dummy_pfnglvalidateprogrampipelineproc as *const c_void) {&null::<PFNGLVALIDATEPROGRAMPIPELINEPROC>()} else {&self.validateprogrampipeline}})
14203			.field("getprogrampipelineinfolog", unsafe{if transmute::<_, *const c_void>(self.getprogrampipelineinfolog) == (dummy_pfnglgetprogrampipelineinfologproc as *const c_void) {&null::<PFNGLGETPROGRAMPIPELINEINFOLOGPROC>()} else {&self.getprogrampipelineinfolog}})
14204			.field("vertexattribl1d", unsafe{if transmute::<_, *const c_void>(self.vertexattribl1d) == (dummy_pfnglvertexattribl1dproc as *const c_void) {&null::<PFNGLVERTEXATTRIBL1DPROC>()} else {&self.vertexattribl1d}})
14205			.field("vertexattribl2d", unsafe{if transmute::<_, *const c_void>(self.vertexattribl2d) == (dummy_pfnglvertexattribl2dproc as *const c_void) {&null::<PFNGLVERTEXATTRIBL2DPROC>()} else {&self.vertexattribl2d}})
14206			.field("vertexattribl3d", unsafe{if transmute::<_, *const c_void>(self.vertexattribl3d) == (dummy_pfnglvertexattribl3dproc as *const c_void) {&null::<PFNGLVERTEXATTRIBL3DPROC>()} else {&self.vertexattribl3d}})
14207			.field("vertexattribl4d", unsafe{if transmute::<_, *const c_void>(self.vertexattribl4d) == (dummy_pfnglvertexattribl4dproc as *const c_void) {&null::<PFNGLVERTEXATTRIBL4DPROC>()} else {&self.vertexattribl4d}})
14208			.field("vertexattribl1dv", unsafe{if transmute::<_, *const c_void>(self.vertexattribl1dv) == (dummy_pfnglvertexattribl1dvproc as *const c_void) {&null::<PFNGLVERTEXATTRIBL1DVPROC>()} else {&self.vertexattribl1dv}})
14209			.field("vertexattribl2dv", unsafe{if transmute::<_, *const c_void>(self.vertexattribl2dv) == (dummy_pfnglvertexattribl2dvproc as *const c_void) {&null::<PFNGLVERTEXATTRIBL2DVPROC>()} else {&self.vertexattribl2dv}})
14210			.field("vertexattribl3dv", unsafe{if transmute::<_, *const c_void>(self.vertexattribl3dv) == (dummy_pfnglvertexattribl3dvproc as *const c_void) {&null::<PFNGLVERTEXATTRIBL3DVPROC>()} else {&self.vertexattribl3dv}})
14211			.field("vertexattribl4dv", unsafe{if transmute::<_, *const c_void>(self.vertexattribl4dv) == (dummy_pfnglvertexattribl4dvproc as *const c_void) {&null::<PFNGLVERTEXATTRIBL4DVPROC>()} else {&self.vertexattribl4dv}})
14212			.field("vertexattriblpointer", unsafe{if transmute::<_, *const c_void>(self.vertexattriblpointer) == (dummy_pfnglvertexattriblpointerproc as *const c_void) {&null::<PFNGLVERTEXATTRIBLPOINTERPROC>()} else {&self.vertexattriblpointer}})
14213			.field("getvertexattribldv", unsafe{if transmute::<_, *const c_void>(self.getvertexattribldv) == (dummy_pfnglgetvertexattribldvproc as *const c_void) {&null::<PFNGLGETVERTEXATTRIBLDVPROC>()} else {&self.getvertexattribldv}})
14214			.field("viewportarrayv", unsafe{if transmute::<_, *const c_void>(self.viewportarrayv) == (dummy_pfnglviewportarrayvproc as *const c_void) {&null::<PFNGLVIEWPORTARRAYVPROC>()} else {&self.viewportarrayv}})
14215			.field("viewportindexedf", unsafe{if transmute::<_, *const c_void>(self.viewportindexedf) == (dummy_pfnglviewportindexedfproc as *const c_void) {&null::<PFNGLVIEWPORTINDEXEDFPROC>()} else {&self.viewportindexedf}})
14216			.field("viewportindexedfv", unsafe{if transmute::<_, *const c_void>(self.viewportindexedfv) == (dummy_pfnglviewportindexedfvproc as *const c_void) {&null::<PFNGLVIEWPORTINDEXEDFVPROC>()} else {&self.viewportindexedfv}})
14217			.field("scissorarrayv", unsafe{if transmute::<_, *const c_void>(self.scissorarrayv) == (dummy_pfnglscissorarrayvproc as *const c_void) {&null::<PFNGLSCISSORARRAYVPROC>()} else {&self.scissorarrayv}})
14218			.field("scissorindexed", unsafe{if transmute::<_, *const c_void>(self.scissorindexed) == (dummy_pfnglscissorindexedproc as *const c_void) {&null::<PFNGLSCISSORINDEXEDPROC>()} else {&self.scissorindexed}})
14219			.field("scissorindexedv", unsafe{if transmute::<_, *const c_void>(self.scissorindexedv) == (dummy_pfnglscissorindexedvproc as *const c_void) {&null::<PFNGLSCISSORINDEXEDVPROC>()} else {&self.scissorindexedv}})
14220			.field("depthrangearrayv", unsafe{if transmute::<_, *const c_void>(self.depthrangearrayv) == (dummy_pfngldepthrangearrayvproc as *const c_void) {&null::<PFNGLDEPTHRANGEARRAYVPROC>()} else {&self.depthrangearrayv}})
14221			.field("depthrangeindexed", unsafe{if transmute::<_, *const c_void>(self.depthrangeindexed) == (dummy_pfngldepthrangeindexedproc as *const c_void) {&null::<PFNGLDEPTHRANGEINDEXEDPROC>()} else {&self.depthrangeindexed}})
14222			.field("getfloati_v", unsafe{if transmute::<_, *const c_void>(self.getfloati_v) == (dummy_pfnglgetfloati_vproc as *const c_void) {&null::<PFNGLGETFLOATI_VPROC>()} else {&self.getfloati_v}})
14223			.field("getdoublei_v", unsafe{if transmute::<_, *const c_void>(self.getdoublei_v) == (dummy_pfnglgetdoublei_vproc as *const c_void) {&null::<PFNGLGETDOUBLEI_VPROC>()} else {&self.getdoublei_v}})
14224			.finish()
14225		} else {
14226			f.debug_struct("Version41")
14227			.field("available", &self.available)
14228			.finish_non_exhaustive()
14229		}
14230	}
14231}
14232type PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC = extern "system" fn(GLenum, GLint, GLsizei, GLsizei, GLuint);
14233type PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC = extern "system" fn(GLenum, GLsizei, GLenum, *const c_void, GLsizei, GLuint);
14234type PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC = extern "system" fn(GLenum, GLsizei, GLenum, *const c_void, GLsizei, GLint, GLuint);
14235type PFNGLGETINTERNALFORMATIVPROC = extern "system" fn(GLenum, GLenum, GLenum, GLsizei, *mut GLint);
14236type PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC = extern "system" fn(GLuint, GLuint, GLenum, *mut GLint);
14237type PFNGLBINDIMAGETEXTUREPROC = extern "system" fn(GLuint, GLuint, GLint, GLboolean, GLint, GLenum, GLenum);
14238type PFNGLMEMORYBARRIERPROC = extern "system" fn(GLbitfield);
14239type PFNGLTEXSTORAGE1DPROC = extern "system" fn(GLenum, GLsizei, GLenum, GLsizei);
14240type PFNGLTEXSTORAGE2DPROC = extern "system" fn(GLenum, GLsizei, GLenum, GLsizei, GLsizei);
14241type PFNGLTEXSTORAGE3DPROC = extern "system" fn(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei);
14242type PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC = extern "system" fn(GLenum, GLuint, GLsizei);
14243type PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC = extern "system" fn(GLenum, GLuint, GLuint, GLsizei);
14244extern "system" fn dummy_pfngldrawarraysinstancedbaseinstanceproc (_: GLenum, _: GLint, _: GLsizei, _: GLsizei, _: GLuint) {
14245	panic!("OpenGL function pointer `glDrawArraysInstancedBaseInstance()` is null.")
14246}
14247extern "system" fn dummy_pfngldrawelementsinstancedbaseinstanceproc (_: GLenum, _: GLsizei, _: GLenum, _: *const c_void, _: GLsizei, _: GLuint) {
14248	panic!("OpenGL function pointer `glDrawElementsInstancedBaseInstance()` is null.")
14249}
14250extern "system" fn dummy_pfngldrawelementsinstancedbasevertexbaseinstanceproc (_: GLenum, _: GLsizei, _: GLenum, _: *const c_void, _: GLsizei, _: GLint, _: GLuint) {
14251	panic!("OpenGL function pointer `glDrawElementsInstancedBaseVertexBaseInstance()` is null.")
14252}
14253extern "system" fn dummy_pfnglgetinternalformativproc (_: GLenum, _: GLenum, _: GLenum, _: GLsizei, _: *mut GLint) {
14254	panic!("OpenGL function pointer `glGetInternalformativ()` is null.")
14255}
14256extern "system" fn dummy_pfnglgetactiveatomiccounterbufferivproc (_: GLuint, _: GLuint, _: GLenum, _: *mut GLint) {
14257	panic!("OpenGL function pointer `glGetActiveAtomicCounterBufferiv()` is null.")
14258}
14259extern "system" fn dummy_pfnglbindimagetextureproc (_: GLuint, _: GLuint, _: GLint, _: GLboolean, _: GLint, _: GLenum, _: GLenum) {
14260	panic!("OpenGL function pointer `glBindImageTexture()` is null.")
14261}
14262extern "system" fn dummy_pfnglmemorybarrierproc (_: GLbitfield) {
14263	panic!("OpenGL function pointer `glMemoryBarrier()` is null.")
14264}
14265extern "system" fn dummy_pfngltexstorage1dproc (_: GLenum, _: GLsizei, _: GLenum, _: GLsizei) {
14266	panic!("OpenGL function pointer `glTexStorage1D()` is null.")
14267}
14268extern "system" fn dummy_pfngltexstorage2dproc (_: GLenum, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei) {
14269	panic!("OpenGL function pointer `glTexStorage2D()` is null.")
14270}
14271extern "system" fn dummy_pfngltexstorage3dproc (_: GLenum, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei, _: GLsizei) {
14272	panic!("OpenGL function pointer `glTexStorage3D()` is null.")
14273}
14274extern "system" fn dummy_pfngldrawtransformfeedbackinstancedproc (_: GLenum, _: GLuint, _: GLsizei) {
14275	panic!("OpenGL function pointer `glDrawTransformFeedbackInstanced()` is null.")
14276}
14277extern "system" fn dummy_pfngldrawtransformfeedbackstreaminstancedproc (_: GLenum, _: GLuint, _: GLuint, _: GLsizei) {
14278	panic!("OpenGL function pointer `glDrawTransformFeedbackStreamInstanced()` is null.")
14279}
14280pub const GL_COPY_READ_BUFFER_BINDING: GLenum = 0x8F36;
14281pub const GL_COPY_WRITE_BUFFER_BINDING: GLenum = 0x8F37;
14282pub const GL_TRANSFORM_FEEDBACK_ACTIVE: GLenum = 0x8E24;
14283pub const GL_TRANSFORM_FEEDBACK_PAUSED: GLenum = 0x8E23;
14284pub const GL_UNPACK_COMPRESSED_BLOCK_WIDTH: GLenum = 0x9127;
14285pub const GL_UNPACK_COMPRESSED_BLOCK_HEIGHT: GLenum = 0x9128;
14286pub const GL_UNPACK_COMPRESSED_BLOCK_DEPTH: GLenum = 0x9129;
14287pub const GL_UNPACK_COMPRESSED_BLOCK_SIZE: GLenum = 0x912A;
14288pub const GL_PACK_COMPRESSED_BLOCK_WIDTH: GLenum = 0x912B;
14289pub const GL_PACK_COMPRESSED_BLOCK_HEIGHT: GLenum = 0x912C;
14290pub const GL_PACK_COMPRESSED_BLOCK_DEPTH: GLenum = 0x912D;
14291pub const GL_PACK_COMPRESSED_BLOCK_SIZE: GLenum = 0x912E;
14292pub const GL_NUM_SAMPLE_COUNTS: GLenum = 0x9380;
14293pub const GL_MIN_MAP_BUFFER_ALIGNMENT: GLenum = 0x90BC;
14294pub const GL_ATOMIC_COUNTER_BUFFER: GLenum = 0x92C0;
14295pub const GL_ATOMIC_COUNTER_BUFFER_BINDING: GLenum = 0x92C1;
14296pub const GL_ATOMIC_COUNTER_BUFFER_START: GLenum = 0x92C2;
14297pub const GL_ATOMIC_COUNTER_BUFFER_SIZE: GLenum = 0x92C3;
14298pub const GL_ATOMIC_COUNTER_BUFFER_DATA_SIZE: GLenum = 0x92C4;
14299pub const GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTERS: GLenum = 0x92C5;
14300pub const GL_ATOMIC_COUNTER_BUFFER_ACTIVE_ATOMIC_COUNTER_INDICES: GLenum = 0x92C6;
14301pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_VERTEX_SHADER: GLenum = 0x92C7;
14302pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_CONTROL_SHADER: GLenum = 0x92C8;
14303pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_TESS_EVALUATION_SHADER: GLenum = 0x92C9;
14304pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_GEOMETRY_SHADER: GLenum = 0x92CA;
14305pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_FRAGMENT_SHADER: GLenum = 0x92CB;
14306pub const GL_MAX_VERTEX_ATOMIC_COUNTER_BUFFERS: GLenum = 0x92CC;
14307pub const GL_MAX_TESS_CONTROL_ATOMIC_COUNTER_BUFFERS: GLenum = 0x92CD;
14308pub const GL_MAX_TESS_EVALUATION_ATOMIC_COUNTER_BUFFERS: GLenum = 0x92CE;
14309pub const GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS: GLenum = 0x92CF;
14310pub const GL_MAX_FRAGMENT_ATOMIC_COUNTER_BUFFERS: GLenum = 0x92D0;
14311pub const GL_MAX_COMBINED_ATOMIC_COUNTER_BUFFERS: GLenum = 0x92D1;
14312pub const GL_MAX_VERTEX_ATOMIC_COUNTERS: GLenum = 0x92D2;
14313pub const GL_MAX_TESS_CONTROL_ATOMIC_COUNTERS: GLenum = 0x92D3;
14314pub const GL_MAX_TESS_EVALUATION_ATOMIC_COUNTERS: GLenum = 0x92D4;
14315pub const GL_MAX_GEOMETRY_ATOMIC_COUNTERS: GLenum = 0x92D5;
14316pub const GL_MAX_FRAGMENT_ATOMIC_COUNTERS: GLenum = 0x92D6;
14317pub const GL_MAX_COMBINED_ATOMIC_COUNTERS: GLenum = 0x92D7;
14318pub const GL_MAX_ATOMIC_COUNTER_BUFFER_SIZE: GLenum = 0x92D8;
14319pub const GL_MAX_ATOMIC_COUNTER_BUFFER_BINDINGS: GLenum = 0x92DC;
14320pub const GL_ACTIVE_ATOMIC_COUNTER_BUFFERS: GLenum = 0x92D9;
14321pub const GL_UNIFORM_ATOMIC_COUNTER_BUFFER_INDEX: GLenum = 0x92DA;
14322pub const GL_UNSIGNED_INT_ATOMIC_COUNTER: GLenum = 0x92DB;
14323pub const GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT: GLbitfield = 0x00000001;
14324pub const GL_ELEMENT_ARRAY_BARRIER_BIT: GLbitfield = 0x00000002;
14325pub const GL_UNIFORM_BARRIER_BIT: GLbitfield = 0x00000004;
14326pub const GL_TEXTURE_FETCH_BARRIER_BIT: GLbitfield = 0x00000008;
14327pub const GL_SHADER_IMAGE_ACCESS_BARRIER_BIT: GLbitfield = 0x00000020;
14328pub const GL_COMMAND_BARRIER_BIT: GLbitfield = 0x00000040;
14329pub const GL_PIXEL_BUFFER_BARRIER_BIT: GLbitfield = 0x00000080;
14330pub const GL_TEXTURE_UPDATE_BARRIER_BIT: GLbitfield = 0x00000100;
14331pub const GL_BUFFER_UPDATE_BARRIER_BIT: GLbitfield = 0x00000200;
14332pub const GL_FRAMEBUFFER_BARRIER_BIT: GLbitfield = 0x00000400;
14333pub const GL_TRANSFORM_FEEDBACK_BARRIER_BIT: GLbitfield = 0x00000800;
14334pub const GL_ATOMIC_COUNTER_BARRIER_BIT: GLbitfield = 0x00001000;
14335pub const GL_ALL_BARRIER_BITS: GLbitfield = 0xFFFFFFFF;
14336pub const GL_MAX_IMAGE_UNITS: GLenum = 0x8F38;
14337pub const GL_MAX_COMBINED_IMAGE_UNITS_AND_FRAGMENT_OUTPUTS: GLenum = 0x8F39;
14338pub const GL_IMAGE_BINDING_NAME: GLenum = 0x8F3A;
14339pub const GL_IMAGE_BINDING_LEVEL: GLenum = 0x8F3B;
14340pub const GL_IMAGE_BINDING_LAYERED: GLenum = 0x8F3C;
14341pub const GL_IMAGE_BINDING_LAYER: GLenum = 0x8F3D;
14342pub const GL_IMAGE_BINDING_ACCESS: GLenum = 0x8F3E;
14343pub const GL_IMAGE_1D: GLenum = 0x904C;
14344pub const GL_IMAGE_2D: GLenum = 0x904D;
14345pub const GL_IMAGE_3D: GLenum = 0x904E;
14346pub const GL_IMAGE_2D_RECT: GLenum = 0x904F;
14347pub const GL_IMAGE_CUBE: GLenum = 0x9050;
14348pub const GL_IMAGE_BUFFER: GLenum = 0x9051;
14349pub const GL_IMAGE_1D_ARRAY: GLenum = 0x9052;
14350pub const GL_IMAGE_2D_ARRAY: GLenum = 0x9053;
14351pub const GL_IMAGE_CUBE_MAP_ARRAY: GLenum = 0x9054;
14352pub const GL_IMAGE_2D_MULTISAMPLE: GLenum = 0x9055;
14353pub const GL_IMAGE_2D_MULTISAMPLE_ARRAY: GLenum = 0x9056;
14354pub const GL_INT_IMAGE_1D: GLenum = 0x9057;
14355pub const GL_INT_IMAGE_2D: GLenum = 0x9058;
14356pub const GL_INT_IMAGE_3D: GLenum = 0x9059;
14357pub const GL_INT_IMAGE_2D_RECT: GLenum = 0x905A;
14358pub const GL_INT_IMAGE_CUBE: GLenum = 0x905B;
14359pub const GL_INT_IMAGE_BUFFER: GLenum = 0x905C;
14360pub const GL_INT_IMAGE_1D_ARRAY: GLenum = 0x905D;
14361pub const GL_INT_IMAGE_2D_ARRAY: GLenum = 0x905E;
14362pub const GL_INT_IMAGE_CUBE_MAP_ARRAY: GLenum = 0x905F;
14363pub const GL_INT_IMAGE_2D_MULTISAMPLE: GLenum = 0x9060;
14364pub const GL_INT_IMAGE_2D_MULTISAMPLE_ARRAY: GLenum = 0x9061;
14365pub const GL_UNSIGNED_INT_IMAGE_1D: GLenum = 0x9062;
14366pub const GL_UNSIGNED_INT_IMAGE_2D: GLenum = 0x9063;
14367pub const GL_UNSIGNED_INT_IMAGE_3D: GLenum = 0x9064;
14368pub const GL_UNSIGNED_INT_IMAGE_2D_RECT: GLenum = 0x9065;
14369pub const GL_UNSIGNED_INT_IMAGE_CUBE: GLenum = 0x9066;
14370pub const GL_UNSIGNED_INT_IMAGE_BUFFER: GLenum = 0x9067;
14371pub const GL_UNSIGNED_INT_IMAGE_1D_ARRAY: GLenum = 0x9068;
14372pub const GL_UNSIGNED_INT_IMAGE_2D_ARRAY: GLenum = 0x9069;
14373pub const GL_UNSIGNED_INT_IMAGE_CUBE_MAP_ARRAY: GLenum = 0x906A;
14374pub const GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE: GLenum = 0x906B;
14375pub const GL_UNSIGNED_INT_IMAGE_2D_MULTISAMPLE_ARRAY: GLenum = 0x906C;
14376pub const GL_MAX_IMAGE_SAMPLES: GLenum = 0x906D;
14377pub const GL_IMAGE_BINDING_FORMAT: GLenum = 0x906E;
14378pub const GL_IMAGE_FORMAT_COMPATIBILITY_TYPE: GLenum = 0x90C7;
14379pub const GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE: GLenum = 0x90C8;
14380pub const GL_IMAGE_FORMAT_COMPATIBILITY_BY_CLASS: GLenum = 0x90C9;
14381pub const GL_MAX_VERTEX_IMAGE_UNIFORMS: GLenum = 0x90CA;
14382pub const GL_MAX_TESS_CONTROL_IMAGE_UNIFORMS: GLenum = 0x90CB;
14383pub const GL_MAX_TESS_EVALUATION_IMAGE_UNIFORMS: GLenum = 0x90CC;
14384pub const GL_MAX_GEOMETRY_IMAGE_UNIFORMS: GLenum = 0x90CD;
14385pub const GL_MAX_FRAGMENT_IMAGE_UNIFORMS: GLenum = 0x90CE;
14386pub const GL_MAX_COMBINED_IMAGE_UNIFORMS: GLenum = 0x90CF;
14387pub const GL_COMPRESSED_RGBA_BPTC_UNORM: GLenum = 0x8E8C;
14388pub const GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM: GLenum = 0x8E8D;
14389pub const GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT: GLenum = 0x8E8E;
14390pub const GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT: GLenum = 0x8E8F;
14391pub const GL_TEXTURE_IMMUTABLE_FORMAT: GLenum = 0x912F;
14392
14393pub trait GL_4_2 {
14394	fn glGetError(&self) -> GLenum;
14395	fn glDrawArraysInstancedBaseInstance(&self, mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei, baseinstance: GLuint) -> Result<()>;
14396	fn glDrawElementsInstancedBaseInstance(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, baseinstance: GLuint) -> Result<()>;
14397	fn glDrawElementsInstancedBaseVertexBaseInstance(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, basevertex: GLint, baseinstance: GLuint) -> Result<()>;
14398	fn glGetInternalformativ(&self, target: GLenum, internalformat: GLenum, pname: GLenum, count: GLsizei, params: *mut GLint) -> Result<()>;
14399	fn glGetActiveAtomicCounterBufferiv(&self, program: GLuint, bufferIndex: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
14400	fn glBindImageTexture(&self, unit: GLuint, texture: GLuint, level: GLint, layered: GLboolean, layer: GLint, access: GLenum, format: GLenum) -> Result<()>;
14401	fn glMemoryBarrier(&self, barriers: GLbitfield) -> Result<()>;
14402	fn glTexStorage1D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei) -> Result<()>;
14403	fn glTexStorage2D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()>;
14404	fn glTexStorage3D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()>;
14405	fn glDrawTransformFeedbackInstanced(&self, mode: GLenum, id: GLuint, instancecount: GLsizei) -> Result<()>;
14406	fn glDrawTransformFeedbackStreamInstanced(&self, mode: GLenum, id: GLuint, stream: GLuint, instancecount: GLsizei) -> Result<()>;
14407}
14408
14409#[derive(Clone, Copy, PartialEq, Eq, Hash)]
14410pub struct Version42 {
14411	available: bool,
14412	geterror: PFNGLGETERRORPROC,
14413	drawarraysinstancedbaseinstance: PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC,
14414	drawelementsinstancedbaseinstance: PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC,
14415	drawelementsinstancedbasevertexbaseinstance: PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC,
14416	getinternalformativ: PFNGLGETINTERNALFORMATIVPROC,
14417	getactiveatomiccounterbufferiv: PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC,
14418	bindimagetexture: PFNGLBINDIMAGETEXTUREPROC,
14419	memorybarrier: PFNGLMEMORYBARRIERPROC,
14420	texstorage1d: PFNGLTEXSTORAGE1DPROC,
14421	texstorage2d: PFNGLTEXSTORAGE2DPROC,
14422	texstorage3d: PFNGLTEXSTORAGE3DPROC,
14423	drawtransformfeedbackinstanced: PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC,
14424	drawtransformfeedbackstreaminstanced: PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC,
14425}
14426
14427impl GL_4_2 for Version42 {
14428	#[inline(always)]
14429	fn glGetError(&self) -> GLenum {
14430		(self.geterror)()
14431	}
14432	#[inline(always)]
14433	fn glDrawArraysInstancedBaseInstance(&self, mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei, baseinstance: GLuint) -> Result<()> {
14434		let ret = process_catch("glDrawArraysInstancedBaseInstance", catch_unwind(||(self.drawarraysinstancedbaseinstance)(mode, first, count, instancecount, baseinstance)));
14435		#[cfg(feature = "diagnose")]
14436		if let Ok(ret) = ret {
14437			return to_result("glDrawArraysInstancedBaseInstance", ret, self.glGetError());
14438		} else {
14439			return ret
14440		}
14441		#[cfg(not(feature = "diagnose"))]
14442		return ret;
14443	}
14444	#[inline(always)]
14445	fn glDrawElementsInstancedBaseInstance(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, baseinstance: GLuint) -> Result<()> {
14446		let ret = process_catch("glDrawElementsInstancedBaseInstance", catch_unwind(||(self.drawelementsinstancedbaseinstance)(mode, count, type_, indices, instancecount, baseinstance)));
14447		#[cfg(feature = "diagnose")]
14448		if let Ok(ret) = ret {
14449			return to_result("glDrawElementsInstancedBaseInstance", ret, self.glGetError());
14450		} else {
14451			return ret
14452		}
14453		#[cfg(not(feature = "diagnose"))]
14454		return ret;
14455	}
14456	#[inline(always)]
14457	fn glDrawElementsInstancedBaseVertexBaseInstance(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, basevertex: GLint, baseinstance: GLuint) -> Result<()> {
14458		let ret = process_catch("glDrawElementsInstancedBaseVertexBaseInstance", catch_unwind(||(self.drawelementsinstancedbasevertexbaseinstance)(mode, count, type_, indices, instancecount, basevertex, baseinstance)));
14459		#[cfg(feature = "diagnose")]
14460		if let Ok(ret) = ret {
14461			return to_result("glDrawElementsInstancedBaseVertexBaseInstance", ret, self.glGetError());
14462		} else {
14463			return ret
14464		}
14465		#[cfg(not(feature = "diagnose"))]
14466		return ret;
14467	}
14468	#[inline(always)]
14469	fn glGetInternalformativ(&self, target: GLenum, internalformat: GLenum, pname: GLenum, count: GLsizei, params: *mut GLint) -> Result<()> {
14470		let ret = process_catch("glGetInternalformativ", catch_unwind(||(self.getinternalformativ)(target, internalformat, pname, count, params)));
14471		#[cfg(feature = "diagnose")]
14472		if let Ok(ret) = ret {
14473			return to_result("glGetInternalformativ", ret, self.glGetError());
14474		} else {
14475			return ret
14476		}
14477		#[cfg(not(feature = "diagnose"))]
14478		return ret;
14479	}
14480	#[inline(always)]
14481	fn glGetActiveAtomicCounterBufferiv(&self, program: GLuint, bufferIndex: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
14482		let ret = process_catch("glGetActiveAtomicCounterBufferiv", catch_unwind(||(self.getactiveatomiccounterbufferiv)(program, bufferIndex, pname, params)));
14483		#[cfg(feature = "diagnose")]
14484		if let Ok(ret) = ret {
14485			return to_result("glGetActiveAtomicCounterBufferiv", ret, self.glGetError());
14486		} else {
14487			return ret
14488		}
14489		#[cfg(not(feature = "diagnose"))]
14490		return ret;
14491	}
14492	#[inline(always)]
14493	fn glBindImageTexture(&self, unit: GLuint, texture: GLuint, level: GLint, layered: GLboolean, layer: GLint, access: GLenum, format: GLenum) -> Result<()> {
14494		let ret = process_catch("glBindImageTexture", catch_unwind(||(self.bindimagetexture)(unit, texture, level, layered, layer, access, format)));
14495		#[cfg(feature = "diagnose")]
14496		if let Ok(ret) = ret {
14497			return to_result("glBindImageTexture", ret, self.glGetError());
14498		} else {
14499			return ret
14500		}
14501		#[cfg(not(feature = "diagnose"))]
14502		return ret;
14503	}
14504	#[inline(always)]
14505	fn glMemoryBarrier(&self, barriers: GLbitfield) -> Result<()> {
14506		let ret = process_catch("glMemoryBarrier", catch_unwind(||(self.memorybarrier)(barriers)));
14507		#[cfg(feature = "diagnose")]
14508		if let Ok(ret) = ret {
14509			return to_result("glMemoryBarrier", ret, self.glGetError());
14510		} else {
14511			return ret
14512		}
14513		#[cfg(not(feature = "diagnose"))]
14514		return ret;
14515	}
14516	#[inline(always)]
14517	fn glTexStorage1D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei) -> Result<()> {
14518		let ret = process_catch("glTexStorage1D", catch_unwind(||(self.texstorage1d)(target, levels, internalformat, width)));
14519		#[cfg(feature = "diagnose")]
14520		if let Ok(ret) = ret {
14521			return to_result("glTexStorage1D", ret, self.glGetError());
14522		} else {
14523			return ret
14524		}
14525		#[cfg(not(feature = "diagnose"))]
14526		return ret;
14527	}
14528	#[inline(always)]
14529	fn glTexStorage2D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
14530		let ret = process_catch("glTexStorage2D", catch_unwind(||(self.texstorage2d)(target, levels, internalformat, width, height)));
14531		#[cfg(feature = "diagnose")]
14532		if let Ok(ret) = ret {
14533			return to_result("glTexStorage2D", ret, self.glGetError());
14534		} else {
14535			return ret
14536		}
14537		#[cfg(not(feature = "diagnose"))]
14538		return ret;
14539	}
14540	#[inline(always)]
14541	fn glTexStorage3D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()> {
14542		let ret = process_catch("glTexStorage3D", catch_unwind(||(self.texstorage3d)(target, levels, internalformat, width, height, depth)));
14543		#[cfg(feature = "diagnose")]
14544		if let Ok(ret) = ret {
14545			return to_result("glTexStorage3D", ret, self.glGetError());
14546		} else {
14547			return ret
14548		}
14549		#[cfg(not(feature = "diagnose"))]
14550		return ret;
14551	}
14552	#[inline(always)]
14553	fn glDrawTransformFeedbackInstanced(&self, mode: GLenum, id: GLuint, instancecount: GLsizei) -> Result<()> {
14554		let ret = process_catch("glDrawTransformFeedbackInstanced", catch_unwind(||(self.drawtransformfeedbackinstanced)(mode, id, instancecount)));
14555		#[cfg(feature = "diagnose")]
14556		if let Ok(ret) = ret {
14557			return to_result("glDrawTransformFeedbackInstanced", ret, self.glGetError());
14558		} else {
14559			return ret
14560		}
14561		#[cfg(not(feature = "diagnose"))]
14562		return ret;
14563	}
14564	#[inline(always)]
14565	fn glDrawTransformFeedbackStreamInstanced(&self, mode: GLenum, id: GLuint, stream: GLuint, instancecount: GLsizei) -> Result<()> {
14566		let ret = process_catch("glDrawTransformFeedbackStreamInstanced", catch_unwind(||(self.drawtransformfeedbackstreaminstanced)(mode, id, stream, instancecount)));
14567		#[cfg(feature = "diagnose")]
14568		if let Ok(ret) = ret {
14569			return to_result("glDrawTransformFeedbackStreamInstanced", ret, self.glGetError());
14570		} else {
14571			return ret
14572		}
14573		#[cfg(not(feature = "diagnose"))]
14574		return ret;
14575	}
14576}
14577
14578impl Version42 {
14579	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
14580		let (_spec, major, minor, release) = base.get_version();
14581		if (major, minor, release) < (4, 2, 0) {
14582			return Self::default();
14583		}
14584		Self {
14585			available: true,
14586			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
14587			drawarraysinstancedbaseinstance: {let proc = get_proc_address("glDrawArraysInstancedBaseInstance"); if proc == null() {dummy_pfngldrawarraysinstancedbaseinstanceproc} else {unsafe{transmute(proc)}}},
14588			drawelementsinstancedbaseinstance: {let proc = get_proc_address("glDrawElementsInstancedBaseInstance"); if proc == null() {dummy_pfngldrawelementsinstancedbaseinstanceproc} else {unsafe{transmute(proc)}}},
14589			drawelementsinstancedbasevertexbaseinstance: {let proc = get_proc_address("glDrawElementsInstancedBaseVertexBaseInstance"); if proc == null() {dummy_pfngldrawelementsinstancedbasevertexbaseinstanceproc} else {unsafe{transmute(proc)}}},
14590			getinternalformativ: {let proc = get_proc_address("glGetInternalformativ"); if proc == null() {dummy_pfnglgetinternalformativproc} else {unsafe{transmute(proc)}}},
14591			getactiveatomiccounterbufferiv: {let proc = get_proc_address("glGetActiveAtomicCounterBufferiv"); if proc == null() {dummy_pfnglgetactiveatomiccounterbufferivproc} else {unsafe{transmute(proc)}}},
14592			bindimagetexture: {let proc = get_proc_address("glBindImageTexture"); if proc == null() {dummy_pfnglbindimagetextureproc} else {unsafe{transmute(proc)}}},
14593			memorybarrier: {let proc = get_proc_address("glMemoryBarrier"); if proc == null() {dummy_pfnglmemorybarrierproc} else {unsafe{transmute(proc)}}},
14594			texstorage1d: {let proc = get_proc_address("glTexStorage1D"); if proc == null() {dummy_pfngltexstorage1dproc} else {unsafe{transmute(proc)}}},
14595			texstorage2d: {let proc = get_proc_address("glTexStorage2D"); if proc == null() {dummy_pfngltexstorage2dproc} else {unsafe{transmute(proc)}}},
14596			texstorage3d: {let proc = get_proc_address("glTexStorage3D"); if proc == null() {dummy_pfngltexstorage3dproc} else {unsafe{transmute(proc)}}},
14597			drawtransformfeedbackinstanced: {let proc = get_proc_address("glDrawTransformFeedbackInstanced"); if proc == null() {dummy_pfngldrawtransformfeedbackinstancedproc} else {unsafe{transmute(proc)}}},
14598			drawtransformfeedbackstreaminstanced: {let proc = get_proc_address("glDrawTransformFeedbackStreamInstanced"); if proc == null() {dummy_pfngldrawtransformfeedbackstreaminstancedproc} else {unsafe{transmute(proc)}}},
14599		}
14600	}
14601	#[inline(always)]
14602	pub fn get_available(&self) -> bool {
14603		self.available
14604	}
14605}
14606
14607impl Default for Version42 {
14608	fn default() -> Self {
14609		Self {
14610			available: false,
14611			geterror: dummy_pfnglgeterrorproc,
14612			drawarraysinstancedbaseinstance: dummy_pfngldrawarraysinstancedbaseinstanceproc,
14613			drawelementsinstancedbaseinstance: dummy_pfngldrawelementsinstancedbaseinstanceproc,
14614			drawelementsinstancedbasevertexbaseinstance: dummy_pfngldrawelementsinstancedbasevertexbaseinstanceproc,
14615			getinternalformativ: dummy_pfnglgetinternalformativproc,
14616			getactiveatomiccounterbufferiv: dummy_pfnglgetactiveatomiccounterbufferivproc,
14617			bindimagetexture: dummy_pfnglbindimagetextureproc,
14618			memorybarrier: dummy_pfnglmemorybarrierproc,
14619			texstorage1d: dummy_pfngltexstorage1dproc,
14620			texstorage2d: dummy_pfngltexstorage2dproc,
14621			texstorage3d: dummy_pfngltexstorage3dproc,
14622			drawtransformfeedbackinstanced: dummy_pfngldrawtransformfeedbackinstancedproc,
14623			drawtransformfeedbackstreaminstanced: dummy_pfngldrawtransformfeedbackstreaminstancedproc,
14624		}
14625	}
14626}
14627impl Debug for Version42 {
14628	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
14629		if self.available {
14630			f.debug_struct("Version42")
14631			.field("available", &self.available)
14632			.field("drawarraysinstancedbaseinstance", unsafe{if transmute::<_, *const c_void>(self.drawarraysinstancedbaseinstance) == (dummy_pfngldrawarraysinstancedbaseinstanceproc as *const c_void) {&null::<PFNGLDRAWARRAYSINSTANCEDBASEINSTANCEPROC>()} else {&self.drawarraysinstancedbaseinstance}})
14633			.field("drawelementsinstancedbaseinstance", unsafe{if transmute::<_, *const c_void>(self.drawelementsinstancedbaseinstance) == (dummy_pfngldrawelementsinstancedbaseinstanceproc as *const c_void) {&null::<PFNGLDRAWELEMENTSINSTANCEDBASEINSTANCEPROC>()} else {&self.drawelementsinstancedbaseinstance}})
14634			.field("drawelementsinstancedbasevertexbaseinstance", unsafe{if transmute::<_, *const c_void>(self.drawelementsinstancedbasevertexbaseinstance) == (dummy_pfngldrawelementsinstancedbasevertexbaseinstanceproc as *const c_void) {&null::<PFNGLDRAWELEMENTSINSTANCEDBASEVERTEXBASEINSTANCEPROC>()} else {&self.drawelementsinstancedbasevertexbaseinstance}})
14635			.field("getinternalformativ", unsafe{if transmute::<_, *const c_void>(self.getinternalformativ) == (dummy_pfnglgetinternalformativproc as *const c_void) {&null::<PFNGLGETINTERNALFORMATIVPROC>()} else {&self.getinternalformativ}})
14636			.field("getactiveatomiccounterbufferiv", unsafe{if transmute::<_, *const c_void>(self.getactiveatomiccounterbufferiv) == (dummy_pfnglgetactiveatomiccounterbufferivproc as *const c_void) {&null::<PFNGLGETACTIVEATOMICCOUNTERBUFFERIVPROC>()} else {&self.getactiveatomiccounterbufferiv}})
14637			.field("bindimagetexture", unsafe{if transmute::<_, *const c_void>(self.bindimagetexture) == (dummy_pfnglbindimagetextureproc as *const c_void) {&null::<PFNGLBINDIMAGETEXTUREPROC>()} else {&self.bindimagetexture}})
14638			.field("memorybarrier", unsafe{if transmute::<_, *const c_void>(self.memorybarrier) == (dummy_pfnglmemorybarrierproc as *const c_void) {&null::<PFNGLMEMORYBARRIERPROC>()} else {&self.memorybarrier}})
14639			.field("texstorage1d", unsafe{if transmute::<_, *const c_void>(self.texstorage1d) == (dummy_pfngltexstorage1dproc as *const c_void) {&null::<PFNGLTEXSTORAGE1DPROC>()} else {&self.texstorage1d}})
14640			.field("texstorage2d", unsafe{if transmute::<_, *const c_void>(self.texstorage2d) == (dummy_pfngltexstorage2dproc as *const c_void) {&null::<PFNGLTEXSTORAGE2DPROC>()} else {&self.texstorage2d}})
14641			.field("texstorage3d", unsafe{if transmute::<_, *const c_void>(self.texstorage3d) == (dummy_pfngltexstorage3dproc as *const c_void) {&null::<PFNGLTEXSTORAGE3DPROC>()} else {&self.texstorage3d}})
14642			.field("drawtransformfeedbackinstanced", unsafe{if transmute::<_, *const c_void>(self.drawtransformfeedbackinstanced) == (dummy_pfngldrawtransformfeedbackinstancedproc as *const c_void) {&null::<PFNGLDRAWTRANSFORMFEEDBACKINSTANCEDPROC>()} else {&self.drawtransformfeedbackinstanced}})
14643			.field("drawtransformfeedbackstreaminstanced", unsafe{if transmute::<_, *const c_void>(self.drawtransformfeedbackstreaminstanced) == (dummy_pfngldrawtransformfeedbackstreaminstancedproc as *const c_void) {&null::<PFNGLDRAWTRANSFORMFEEDBACKSTREAMINSTANCEDPROC>()} else {&self.drawtransformfeedbackstreaminstanced}})
14644			.finish()
14645		} else {
14646			f.debug_struct("Version42")
14647			.field("available", &self.available)
14648			.finish_non_exhaustive()
14649		}
14650	}
14651}
14652type PFNGLCLEARBUFFERDATAPROC = extern "system" fn(GLenum, GLenum, GLenum, GLenum, *const c_void);
14653type PFNGLCLEARBUFFERSUBDATAPROC = extern "system" fn(GLenum, GLenum, GLintptr, GLsizeiptr, GLenum, GLenum, *const c_void);
14654type PFNGLDISPATCHCOMPUTEPROC = extern "system" fn(GLuint, GLuint, GLuint);
14655type PFNGLDISPATCHCOMPUTEINDIRECTPROC = extern "system" fn(GLintptr);
14656type PFNGLCOPYIMAGESUBDATAPROC = extern "system" fn(GLuint, GLenum, GLint, GLint, GLint, GLint, GLuint, GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
14657type PFNGLFRAMEBUFFERPARAMETERIPROC = extern "system" fn(GLenum, GLenum, GLint);
14658type PFNGLGETFRAMEBUFFERPARAMETERIVPROC = extern "system" fn(GLenum, GLenum, *mut GLint);
14659type PFNGLGETINTERNALFORMATI64VPROC = extern "system" fn(GLenum, GLenum, GLenum, GLsizei, *mut GLint64);
14660type PFNGLINVALIDATETEXSUBIMAGEPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei);
14661type PFNGLINVALIDATETEXIMAGEPROC = extern "system" fn(GLuint, GLint);
14662type PFNGLINVALIDATEBUFFERSUBDATAPROC = extern "system" fn(GLuint, GLintptr, GLsizeiptr);
14663type PFNGLINVALIDATEBUFFERDATAPROC = extern "system" fn(GLuint);
14664type PFNGLINVALIDATEFRAMEBUFFERPROC = extern "system" fn(GLenum, GLsizei, *const GLenum);
14665type PFNGLINVALIDATESUBFRAMEBUFFERPROC = extern "system" fn(GLenum, GLsizei, *const GLenum, GLint, GLint, GLsizei, GLsizei);
14666type PFNGLMULTIDRAWARRAYSINDIRECTPROC = extern "system" fn(GLenum, *const c_void, GLsizei, GLsizei);
14667type PFNGLMULTIDRAWELEMENTSINDIRECTPROC = extern "system" fn(GLenum, GLenum, *const c_void, GLsizei, GLsizei);
14668type PFNGLGETPROGRAMINTERFACEIVPROC = extern "system" fn(GLuint, GLenum, GLenum, *mut GLint);
14669type PFNGLGETPROGRAMRESOURCEINDEXPROC = extern "system" fn(GLuint, GLenum, *const GLchar) -> GLuint;
14670type PFNGLGETPROGRAMRESOURCENAMEPROC = extern "system" fn(GLuint, GLenum, GLuint, GLsizei, *mut GLsizei, *mut GLchar);
14671type PFNGLGETPROGRAMRESOURCEIVPROC = extern "system" fn(GLuint, GLenum, GLuint, GLsizei, *const GLenum, GLsizei, *mut GLsizei, *mut GLint);
14672type PFNGLGETPROGRAMRESOURCELOCATIONPROC = extern "system" fn(GLuint, GLenum, *const GLchar) -> GLint;
14673type PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC = extern "system" fn(GLuint, GLenum, *const GLchar) -> GLint;
14674type PFNGLSHADERSTORAGEBLOCKBINDINGPROC = extern "system" fn(GLuint, GLuint, GLuint);
14675type PFNGLTEXBUFFERRANGEPROC = extern "system" fn(GLenum, GLenum, GLuint, GLintptr, GLsizeiptr);
14676type PFNGLTEXSTORAGE2DMULTISAMPLEPROC = extern "system" fn(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLboolean);
14677type PFNGLTEXSTORAGE3DMULTISAMPLEPROC = extern "system" fn(GLenum, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
14678type PFNGLTEXTUREVIEWPROC = extern "system" fn(GLuint, GLenum, GLuint, GLenum, GLuint, GLuint, GLuint, GLuint);
14679type PFNGLBINDVERTEXBUFFERPROC = extern "system" fn(GLuint, GLuint, GLintptr, GLsizei);
14680type PFNGLVERTEXATTRIBFORMATPROC = extern "system" fn(GLuint, GLint, GLenum, GLboolean, GLuint);
14681type PFNGLVERTEXATTRIBIFORMATPROC = extern "system" fn(GLuint, GLint, GLenum, GLuint);
14682type PFNGLVERTEXATTRIBLFORMATPROC = extern "system" fn(GLuint, GLint, GLenum, GLuint);
14683type PFNGLVERTEXATTRIBBINDINGPROC = extern "system" fn(GLuint, GLuint);
14684type PFNGLVERTEXBINDINGDIVISORPROC = extern "system" fn(GLuint, GLuint);
14685type PFNGLDEBUGMESSAGECONTROLPROC = extern "system" fn(GLenum, GLenum, GLenum, GLsizei, *const GLuint, GLboolean);
14686type PFNGLDEBUGMESSAGEINSERTPROC = extern "system" fn(GLenum, GLenum, GLuint, GLenum, GLsizei, *const GLchar);
14687type PFNGLDEBUGMESSAGECALLBACKPROC = extern "system" fn(GLDEBUGPROC, *const c_void);
14688type PFNGLGETDEBUGMESSAGELOGPROC = extern "system" fn(GLuint, GLsizei, *mut GLenum, *mut GLenum, *mut GLuint, *mut GLenum, *mut GLsizei, *mut GLchar) -> GLuint;
14689type PFNGLPUSHDEBUGGROUPPROC = extern "system" fn(GLenum, GLuint, GLsizei, *const GLchar);
14690type PFNGLPOPDEBUGGROUPPROC = extern "system" fn();
14691type PFNGLOBJECTLABELPROC = extern "system" fn(GLenum, GLuint, GLsizei, *const GLchar);
14692type PFNGLGETOBJECTLABELPROC = extern "system" fn(GLenum, GLuint, GLsizei, *mut GLsizei, *mut GLchar);
14693type PFNGLOBJECTPTRLABELPROC = extern "system" fn(*const c_void, GLsizei, *const GLchar);
14694type PFNGLGETOBJECTPTRLABELPROC = extern "system" fn(*const c_void, GLsizei, *mut GLsizei, *mut GLchar);
14695extern "system" fn dummy_pfnglclearbufferdataproc (_: GLenum, _: GLenum, _: GLenum, _: GLenum, _: *const c_void) {
14696	panic!("OpenGL function pointer `glClearBufferData()` is null.")
14697}
14698extern "system" fn dummy_pfnglclearbuffersubdataproc (_: GLenum, _: GLenum, _: GLintptr, _: GLsizeiptr, _: GLenum, _: GLenum, _: *const c_void) {
14699	panic!("OpenGL function pointer `glClearBufferSubData()` is null.")
14700}
14701extern "system" fn dummy_pfngldispatchcomputeproc (_: GLuint, _: GLuint, _: GLuint) {
14702	panic!("OpenGL function pointer `glDispatchCompute()` is null.")
14703}
14704extern "system" fn dummy_pfngldispatchcomputeindirectproc (_: GLintptr) {
14705	panic!("OpenGL function pointer `glDispatchComputeIndirect()` is null.")
14706}
14707extern "system" fn dummy_pfnglcopyimagesubdataproc (_: GLuint, _: GLenum, _: GLint, _: GLint, _: GLint, _: GLint, _: GLuint, _: GLenum, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei) {
14708	panic!("OpenGL function pointer `glCopyImageSubData()` is null.")
14709}
14710extern "system" fn dummy_pfnglframebufferparameteriproc (_: GLenum, _: GLenum, _: GLint) {
14711	panic!("OpenGL function pointer `glFramebufferParameteri()` is null.")
14712}
14713extern "system" fn dummy_pfnglgetframebufferparameterivproc (_: GLenum, _: GLenum, _: *mut GLint) {
14714	panic!("OpenGL function pointer `glGetFramebufferParameteriv()` is null.")
14715}
14716extern "system" fn dummy_pfnglgetinternalformati64vproc (_: GLenum, _: GLenum, _: GLenum, _: GLsizei, _: *mut GLint64) {
14717	panic!("OpenGL function pointer `glGetInternalformati64v()` is null.")
14718}
14719extern "system" fn dummy_pfnglinvalidatetexsubimageproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei) {
14720	panic!("OpenGL function pointer `glInvalidateTexSubImage()` is null.")
14721}
14722extern "system" fn dummy_pfnglinvalidateteximageproc (_: GLuint, _: GLint) {
14723	panic!("OpenGL function pointer `glInvalidateTexImage()` is null.")
14724}
14725extern "system" fn dummy_pfnglinvalidatebuffersubdataproc (_: GLuint, _: GLintptr, _: GLsizeiptr) {
14726	panic!("OpenGL function pointer `glInvalidateBufferSubData()` is null.")
14727}
14728extern "system" fn dummy_pfnglinvalidatebufferdataproc (_: GLuint) {
14729	panic!("OpenGL function pointer `glInvalidateBufferData()` is null.")
14730}
14731extern "system" fn dummy_pfnglinvalidateframebufferproc (_: GLenum, _: GLsizei, _: *const GLenum) {
14732	panic!("OpenGL function pointer `glInvalidateFramebuffer()` is null.")
14733}
14734extern "system" fn dummy_pfnglinvalidatesubframebufferproc (_: GLenum, _: GLsizei, _: *const GLenum, _: GLint, _: GLint, _: GLsizei, _: GLsizei) {
14735	panic!("OpenGL function pointer `glInvalidateSubFramebuffer()` is null.")
14736}
14737extern "system" fn dummy_pfnglmultidrawarraysindirectproc (_: GLenum, _: *const c_void, _: GLsizei, _: GLsizei) {
14738	panic!("OpenGL function pointer `glMultiDrawArraysIndirect()` is null.")
14739}
14740extern "system" fn dummy_pfnglmultidrawelementsindirectproc (_: GLenum, _: GLenum, _: *const c_void, _: GLsizei, _: GLsizei) {
14741	panic!("OpenGL function pointer `glMultiDrawElementsIndirect()` is null.")
14742}
14743extern "system" fn dummy_pfnglgetprograminterfaceivproc (_: GLuint, _: GLenum, _: GLenum, _: *mut GLint) {
14744	panic!("OpenGL function pointer `glGetProgramInterfaceiv()` is null.")
14745}
14746extern "system" fn dummy_pfnglgetprogramresourceindexproc (_: GLuint, _: GLenum, _: *const GLchar) -> GLuint {
14747	panic!("OpenGL function pointer `glGetProgramResourceIndex()` is null.")
14748}
14749extern "system" fn dummy_pfnglgetprogramresourcenameproc (_: GLuint, _: GLenum, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
14750	panic!("OpenGL function pointer `glGetProgramResourceName()` is null.")
14751}
14752extern "system" fn dummy_pfnglgetprogramresourceivproc (_: GLuint, _: GLenum, _: GLuint, _: GLsizei, _: *const GLenum, _: GLsizei, _: *mut GLsizei, _: *mut GLint) {
14753	panic!("OpenGL function pointer `glGetProgramResourceiv()` is null.")
14754}
14755extern "system" fn dummy_pfnglgetprogramresourcelocationproc (_: GLuint, _: GLenum, _: *const GLchar) -> GLint {
14756	panic!("OpenGL function pointer `glGetProgramResourceLocation()` is null.")
14757}
14758extern "system" fn dummy_pfnglgetprogramresourcelocationindexproc (_: GLuint, _: GLenum, _: *const GLchar) -> GLint {
14759	panic!("OpenGL function pointer `glGetProgramResourceLocationIndex()` is null.")
14760}
14761extern "system" fn dummy_pfnglshaderstorageblockbindingproc (_: GLuint, _: GLuint, _: GLuint) {
14762	panic!("OpenGL function pointer `glShaderStorageBlockBinding()` is null.")
14763}
14764extern "system" fn dummy_pfngltexbufferrangeproc (_: GLenum, _: GLenum, _: GLuint, _: GLintptr, _: GLsizeiptr) {
14765	panic!("OpenGL function pointer `glTexBufferRange()` is null.")
14766}
14767extern "system" fn dummy_pfngltexstorage2dmultisampleproc (_: GLenum, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei, _: GLboolean) {
14768	panic!("OpenGL function pointer `glTexStorage2DMultisample()` is null.")
14769}
14770extern "system" fn dummy_pfngltexstorage3dmultisampleproc (_: GLenum, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei, _: GLsizei, _: GLboolean) {
14771	panic!("OpenGL function pointer `glTexStorage3DMultisample()` is null.")
14772}
14773extern "system" fn dummy_pfngltextureviewproc (_: GLuint, _: GLenum, _: GLuint, _: GLenum, _: GLuint, _: GLuint, _: GLuint, _: GLuint) {
14774	panic!("OpenGL function pointer `glTextureView()` is null.")
14775}
14776extern "system" fn dummy_pfnglbindvertexbufferproc (_: GLuint, _: GLuint, _: GLintptr, _: GLsizei) {
14777	panic!("OpenGL function pointer `glBindVertexBuffer()` is null.")
14778}
14779extern "system" fn dummy_pfnglvertexattribformatproc (_: GLuint, _: GLint, _: GLenum, _: GLboolean, _: GLuint) {
14780	panic!("OpenGL function pointer `glVertexAttribFormat()` is null.")
14781}
14782extern "system" fn dummy_pfnglvertexattribiformatproc (_: GLuint, _: GLint, _: GLenum, _: GLuint) {
14783	panic!("OpenGL function pointer `glVertexAttribIFormat()` is null.")
14784}
14785extern "system" fn dummy_pfnglvertexattriblformatproc (_: GLuint, _: GLint, _: GLenum, _: GLuint) {
14786	panic!("OpenGL function pointer `glVertexAttribLFormat()` is null.")
14787}
14788extern "system" fn dummy_pfnglvertexattribbindingproc (_: GLuint, _: GLuint) {
14789	panic!("OpenGL function pointer `glVertexAttribBinding()` is null.")
14790}
14791extern "system" fn dummy_pfnglvertexbindingdivisorproc (_: GLuint, _: GLuint) {
14792	panic!("OpenGL function pointer `glVertexBindingDivisor()` is null.")
14793}
14794extern "system" fn dummy_pfngldebugmessagecontrolproc (_: GLenum, _: GLenum, _: GLenum, _: GLsizei, _: *const GLuint, _: GLboolean) {
14795	panic!("OpenGL function pointer `glDebugMessageControl()` is null.")
14796}
14797extern "system" fn dummy_pfngldebugmessageinsertproc (_: GLenum, _: GLenum, _: GLuint, _: GLenum, _: GLsizei, _: *const GLchar) {
14798	panic!("OpenGL function pointer `glDebugMessageInsert()` is null.")
14799}
14800extern "system" fn dummy_pfngldebugmessagecallbackproc (_: GLDEBUGPROC, _: *const c_void) {
14801	panic!("OpenGL function pointer `glDebugMessageCallback()` is null.")
14802}
14803extern "system" fn dummy_pfnglgetdebugmessagelogproc (_: GLuint, _: GLsizei, _: *mut GLenum, _: *mut GLenum, _: *mut GLuint, _: *mut GLenum, _: *mut GLsizei, _: *mut GLchar) -> GLuint {
14804	panic!("OpenGL function pointer `glGetDebugMessageLog()` is null.")
14805}
14806extern "system" fn dummy_pfnglpushdebuggroupproc (_: GLenum, _: GLuint, _: GLsizei, _: *const GLchar) {
14807	panic!("OpenGL function pointer `glPushDebugGroup()` is null.")
14808}
14809extern "system" fn dummy_pfnglpopdebuggroupproc () {
14810	panic!("OpenGL function pointer `glPopDebugGroup()` is null.")
14811}
14812extern "system" fn dummy_pfnglobjectlabelproc (_: GLenum, _: GLuint, _: GLsizei, _: *const GLchar) {
14813	panic!("OpenGL function pointer `glObjectLabel()` is null.")
14814}
14815extern "system" fn dummy_pfnglgetobjectlabelproc (_: GLenum, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
14816	panic!("OpenGL function pointer `glGetObjectLabel()` is null.")
14817}
14818extern "system" fn dummy_pfnglobjectptrlabelproc (_: *const c_void, _: GLsizei, _: *const GLchar) {
14819	panic!("OpenGL function pointer `glObjectPtrLabel()` is null.")
14820}
14821extern "system" fn dummy_pfnglgetobjectptrlabelproc (_: *const c_void, _: GLsizei, _: *mut GLsizei, _: *mut GLchar) {
14822	panic!("OpenGL function pointer `glGetObjectPtrLabel()` is null.")
14823}
14824pub const GL_NUM_SHADING_LANGUAGE_VERSIONS: GLenum = 0x82E9;
14825pub const GL_VERTEX_ATTRIB_ARRAY_LONG: GLenum = 0x874E;
14826pub const GL_COMPRESSED_RGB8_ETC2: GLenum = 0x9274;
14827pub const GL_COMPRESSED_SRGB8_ETC2: GLenum = 0x9275;
14828pub const GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2: GLenum = 0x9276;
14829pub const GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2: GLenum = 0x9277;
14830pub const GL_COMPRESSED_RGBA8_ETC2_EAC: GLenum = 0x9278;
14831pub const GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC: GLenum = 0x9279;
14832pub const GL_COMPRESSED_R11_EAC: GLenum = 0x9270;
14833pub const GL_COMPRESSED_SIGNED_R11_EAC: GLenum = 0x9271;
14834pub const GL_COMPRESSED_RG11_EAC: GLenum = 0x9272;
14835pub const GL_COMPRESSED_SIGNED_RG11_EAC: GLenum = 0x9273;
14836pub const GL_PRIMITIVE_RESTART_FIXED_INDEX: GLenum = 0x8D69;
14837pub const GL_ANY_SAMPLES_PASSED_CONSERVATIVE: GLenum = 0x8D6A;
14838pub const GL_MAX_ELEMENT_INDEX: GLenum = 0x8D6B;
14839pub const GL_COMPUTE_SHADER: GLenum = 0x91B9;
14840pub const GL_MAX_COMPUTE_UNIFORM_BLOCKS: GLenum = 0x91BB;
14841pub const GL_MAX_COMPUTE_TEXTURE_IMAGE_UNITS: GLenum = 0x91BC;
14842pub const GL_MAX_COMPUTE_IMAGE_UNIFORMS: GLenum = 0x91BD;
14843pub const GL_MAX_COMPUTE_SHARED_MEMORY_SIZE: GLenum = 0x8262;
14844pub const GL_MAX_COMPUTE_UNIFORM_COMPONENTS: GLenum = 0x8263;
14845pub const GL_MAX_COMPUTE_ATOMIC_COUNTER_BUFFERS: GLenum = 0x8264;
14846pub const GL_MAX_COMPUTE_ATOMIC_COUNTERS: GLenum = 0x8265;
14847pub const GL_MAX_COMBINED_COMPUTE_UNIFORM_COMPONENTS: GLenum = 0x8266;
14848pub const GL_MAX_COMPUTE_WORK_GROUP_INVOCATIONS: GLenum = 0x90EB;
14849pub const GL_MAX_COMPUTE_WORK_GROUP_COUNT: GLenum = 0x91BE;
14850pub const GL_MAX_COMPUTE_WORK_GROUP_SIZE: GLenum = 0x91BF;
14851pub const GL_COMPUTE_WORK_GROUP_SIZE: GLenum = 0x8267;
14852pub const GL_UNIFORM_BLOCK_REFERENCED_BY_COMPUTE_SHADER: GLenum = 0x90EC;
14853pub const GL_ATOMIC_COUNTER_BUFFER_REFERENCED_BY_COMPUTE_SHADER: GLenum = 0x90ED;
14854pub const GL_DISPATCH_INDIRECT_BUFFER: GLenum = 0x90EE;
14855pub const GL_DISPATCH_INDIRECT_BUFFER_BINDING: GLenum = 0x90EF;
14856pub const GL_COMPUTE_SHADER_BIT: GLbitfield = 0x00000020;
14857pub const GL_DEBUG_OUTPUT_SYNCHRONOUS: GLenum = 0x8242;
14858pub const GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH: GLenum = 0x8243;
14859pub const GL_DEBUG_CALLBACK_FUNCTION: GLenum = 0x8244;
14860pub const GL_DEBUG_CALLBACK_USER_PARAM: GLenum = 0x8245;
14861pub const GL_DEBUG_SOURCE_API: GLenum = 0x8246;
14862pub const GL_DEBUG_SOURCE_WINDOW_SYSTEM: GLenum = 0x8247;
14863pub const GL_DEBUG_SOURCE_SHADER_COMPILER: GLenum = 0x8248;
14864pub const GL_DEBUG_SOURCE_THIRD_PARTY: GLenum = 0x8249;
14865pub const GL_DEBUG_SOURCE_APPLICATION: GLenum = 0x824A;
14866pub const GL_DEBUG_SOURCE_OTHER: GLenum = 0x824B;
14867pub const GL_DEBUG_TYPE_ERROR: GLenum = 0x824C;
14868pub const GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR: GLenum = 0x824D;
14869pub const GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR: GLenum = 0x824E;
14870pub const GL_DEBUG_TYPE_PORTABILITY: GLenum = 0x824F;
14871pub const GL_DEBUG_TYPE_PERFORMANCE: GLenum = 0x8250;
14872pub const GL_DEBUG_TYPE_OTHER: GLenum = 0x8251;
14873pub const GL_MAX_DEBUG_MESSAGE_LENGTH: GLenum = 0x9143;
14874pub const GL_MAX_DEBUG_LOGGED_MESSAGES: GLenum = 0x9144;
14875pub const GL_DEBUG_LOGGED_MESSAGES: GLenum = 0x9145;
14876pub const GL_DEBUG_SEVERITY_HIGH: GLenum = 0x9146;
14877pub const GL_DEBUG_SEVERITY_MEDIUM: GLenum = 0x9147;
14878pub const GL_DEBUG_SEVERITY_LOW: GLenum = 0x9148;
14879pub const GL_DEBUG_TYPE_MARKER: GLenum = 0x8268;
14880pub const GL_DEBUG_TYPE_PUSH_GROUP: GLenum = 0x8269;
14881pub const GL_DEBUG_TYPE_POP_GROUP: GLenum = 0x826A;
14882pub const GL_DEBUG_SEVERITY_NOTIFICATION: GLenum = 0x826B;
14883pub const GL_MAX_DEBUG_GROUP_STACK_DEPTH: GLenum = 0x826C;
14884pub const GL_DEBUG_GROUP_STACK_DEPTH: GLenum = 0x826D;
14885pub const GL_BUFFER: GLenum = 0x82E0;
14886pub const GL_SHADER: GLenum = 0x82E1;
14887pub const GL_PROGRAM: GLenum = 0x82E2;
14888pub const GL_QUERY: GLenum = 0x82E3;
14889pub const GL_PROGRAM_PIPELINE: GLenum = 0x82E4;
14890pub const GL_SAMPLER: GLenum = 0x82E6;
14891pub const GL_MAX_LABEL_LENGTH: GLenum = 0x82E8;
14892pub const GL_DEBUG_OUTPUT: GLenum = 0x92E0;
14893pub const GL_CONTEXT_FLAG_DEBUG_BIT: GLbitfield = 0x00000002;
14894pub const GL_MAX_UNIFORM_LOCATIONS: GLenum = 0x826E;
14895pub const GL_FRAMEBUFFER_DEFAULT_WIDTH: GLenum = 0x9310;
14896pub const GL_FRAMEBUFFER_DEFAULT_HEIGHT: GLenum = 0x9311;
14897pub const GL_FRAMEBUFFER_DEFAULT_LAYERS: GLenum = 0x9312;
14898pub const GL_FRAMEBUFFER_DEFAULT_SAMPLES: GLenum = 0x9313;
14899pub const GL_FRAMEBUFFER_DEFAULT_FIXED_SAMPLE_LOCATIONS: GLenum = 0x9314;
14900pub const GL_MAX_FRAMEBUFFER_WIDTH: GLenum = 0x9315;
14901pub const GL_MAX_FRAMEBUFFER_HEIGHT: GLenum = 0x9316;
14902pub const GL_MAX_FRAMEBUFFER_LAYERS: GLenum = 0x9317;
14903pub const GL_MAX_FRAMEBUFFER_SAMPLES: GLenum = 0x9318;
14904pub const GL_INTERNALFORMAT_SUPPORTED: GLenum = 0x826F;
14905pub const GL_INTERNALFORMAT_PREFERRED: GLenum = 0x8270;
14906pub const GL_INTERNALFORMAT_RED_SIZE: GLenum = 0x8271;
14907pub const GL_INTERNALFORMAT_GREEN_SIZE: GLenum = 0x8272;
14908pub const GL_INTERNALFORMAT_BLUE_SIZE: GLenum = 0x8273;
14909pub const GL_INTERNALFORMAT_ALPHA_SIZE: GLenum = 0x8274;
14910pub const GL_INTERNALFORMAT_DEPTH_SIZE: GLenum = 0x8275;
14911pub const GL_INTERNALFORMAT_STENCIL_SIZE: GLenum = 0x8276;
14912pub const GL_INTERNALFORMAT_SHARED_SIZE: GLenum = 0x8277;
14913pub const GL_INTERNALFORMAT_RED_TYPE: GLenum = 0x8278;
14914pub const GL_INTERNALFORMAT_GREEN_TYPE: GLenum = 0x8279;
14915pub const GL_INTERNALFORMAT_BLUE_TYPE: GLenum = 0x827A;
14916pub const GL_INTERNALFORMAT_ALPHA_TYPE: GLenum = 0x827B;
14917pub const GL_INTERNALFORMAT_DEPTH_TYPE: GLenum = 0x827C;
14918pub const GL_INTERNALFORMAT_STENCIL_TYPE: GLenum = 0x827D;
14919pub const GL_MAX_WIDTH: GLenum = 0x827E;
14920pub const GL_MAX_HEIGHT: GLenum = 0x827F;
14921pub const GL_MAX_DEPTH: GLenum = 0x8280;
14922pub const GL_MAX_LAYERS: GLenum = 0x8281;
14923pub const GL_MAX_COMBINED_DIMENSIONS: GLenum = 0x8282;
14924pub const GL_COLOR_COMPONENTS: GLenum = 0x8283;
14925pub const GL_DEPTH_COMPONENTS: GLenum = 0x8284;
14926pub const GL_STENCIL_COMPONENTS: GLenum = 0x8285;
14927pub const GL_COLOR_RENDERABLE: GLenum = 0x8286;
14928pub const GL_DEPTH_RENDERABLE: GLenum = 0x8287;
14929pub const GL_STENCIL_RENDERABLE: GLenum = 0x8288;
14930pub const GL_FRAMEBUFFER_RENDERABLE: GLenum = 0x8289;
14931pub const GL_FRAMEBUFFER_RENDERABLE_LAYERED: GLenum = 0x828A;
14932pub const GL_FRAMEBUFFER_BLEND: GLenum = 0x828B;
14933pub const GL_READ_PIXELS: GLenum = 0x828C;
14934pub const GL_READ_PIXELS_FORMAT: GLenum = 0x828D;
14935pub const GL_READ_PIXELS_TYPE: GLenum = 0x828E;
14936pub const GL_TEXTURE_IMAGE_FORMAT: GLenum = 0x828F;
14937pub const GL_TEXTURE_IMAGE_TYPE: GLenum = 0x8290;
14938pub const GL_GET_TEXTURE_IMAGE_FORMAT: GLenum = 0x8291;
14939pub const GL_GET_TEXTURE_IMAGE_TYPE: GLenum = 0x8292;
14940pub const GL_MIPMAP: GLenum = 0x8293;
14941pub const GL_MANUAL_GENERATE_MIPMAP: GLenum = 0x8294;
14942pub const GL_AUTO_GENERATE_MIPMAP: GLenum = 0x8295;
14943pub const GL_COLOR_ENCODING: GLenum = 0x8296;
14944pub const GL_SRGB_READ: GLenum = 0x8297;
14945pub const GL_SRGB_WRITE: GLenum = 0x8298;
14946pub const GL_FILTER: GLenum = 0x829A;
14947pub const GL_VERTEX_TEXTURE: GLenum = 0x829B;
14948pub const GL_TESS_CONTROL_TEXTURE: GLenum = 0x829C;
14949pub const GL_TESS_EVALUATION_TEXTURE: GLenum = 0x829D;
14950pub const GL_GEOMETRY_TEXTURE: GLenum = 0x829E;
14951pub const GL_FRAGMENT_TEXTURE: GLenum = 0x829F;
14952pub const GL_COMPUTE_TEXTURE: GLenum = 0x82A0;
14953pub const GL_TEXTURE_SHADOW: GLenum = 0x82A1;
14954pub const GL_TEXTURE_GATHER: GLenum = 0x82A2;
14955pub const GL_TEXTURE_GATHER_SHADOW: GLenum = 0x82A3;
14956pub const GL_SHADER_IMAGE_LOAD: GLenum = 0x82A4;
14957pub const GL_SHADER_IMAGE_STORE: GLenum = 0x82A5;
14958pub const GL_SHADER_IMAGE_ATOMIC: GLenum = 0x82A6;
14959pub const GL_IMAGE_TEXEL_SIZE: GLenum = 0x82A7;
14960pub const GL_IMAGE_COMPATIBILITY_CLASS: GLenum = 0x82A8;
14961pub const GL_IMAGE_PIXEL_FORMAT: GLenum = 0x82A9;
14962pub const GL_IMAGE_PIXEL_TYPE: GLenum = 0x82AA;
14963pub const GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_TEST: GLenum = 0x82AC;
14964pub const GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_TEST: GLenum = 0x82AD;
14965pub const GL_SIMULTANEOUS_TEXTURE_AND_DEPTH_WRITE: GLenum = 0x82AE;
14966pub const GL_SIMULTANEOUS_TEXTURE_AND_STENCIL_WRITE: GLenum = 0x82AF;
14967pub const GL_TEXTURE_COMPRESSED_BLOCK_WIDTH: GLenum = 0x82B1;
14968pub const GL_TEXTURE_COMPRESSED_BLOCK_HEIGHT: GLenum = 0x82B2;
14969pub const GL_TEXTURE_COMPRESSED_BLOCK_SIZE: GLenum = 0x82B3;
14970pub const GL_CLEAR_BUFFER: GLenum = 0x82B4;
14971pub const GL_TEXTURE_VIEW: GLenum = 0x82B5;
14972pub const GL_VIEW_COMPATIBILITY_CLASS: GLenum = 0x82B6;
14973pub const GL_FULL_SUPPORT: GLenum = 0x82B7;
14974pub const GL_CAVEAT_SUPPORT: GLenum = 0x82B8;
14975pub const GL_IMAGE_CLASS_4_X_32: GLenum = 0x82B9;
14976pub const GL_IMAGE_CLASS_2_X_32: GLenum = 0x82BA;
14977pub const GL_IMAGE_CLASS_1_X_32: GLenum = 0x82BB;
14978pub const GL_IMAGE_CLASS_4_X_16: GLenum = 0x82BC;
14979pub const GL_IMAGE_CLASS_2_X_16: GLenum = 0x82BD;
14980pub const GL_IMAGE_CLASS_1_X_16: GLenum = 0x82BE;
14981pub const GL_IMAGE_CLASS_4_X_8: GLenum = 0x82BF;
14982pub const GL_IMAGE_CLASS_2_X_8: GLenum = 0x82C0;
14983pub const GL_IMAGE_CLASS_1_X_8: GLenum = 0x82C1;
14984pub const GL_IMAGE_CLASS_11_11_10: GLenum = 0x82C2;
14985pub const GL_IMAGE_CLASS_10_10_10_2: GLenum = 0x82C3;
14986pub const GL_VIEW_CLASS_128_BITS: GLenum = 0x82C4;
14987pub const GL_VIEW_CLASS_96_BITS: GLenum = 0x82C5;
14988pub const GL_VIEW_CLASS_64_BITS: GLenum = 0x82C6;
14989pub const GL_VIEW_CLASS_48_BITS: GLenum = 0x82C7;
14990pub const GL_VIEW_CLASS_32_BITS: GLenum = 0x82C8;
14991pub const GL_VIEW_CLASS_24_BITS: GLenum = 0x82C9;
14992pub const GL_VIEW_CLASS_16_BITS: GLenum = 0x82CA;
14993pub const GL_VIEW_CLASS_8_BITS: GLenum = 0x82CB;
14994pub const GL_VIEW_CLASS_S3TC_DXT1_RGB: GLenum = 0x82CC;
14995pub const GL_VIEW_CLASS_S3TC_DXT1_RGBA: GLenum = 0x82CD;
14996pub const GL_VIEW_CLASS_S3TC_DXT3_RGBA: GLenum = 0x82CE;
14997pub const GL_VIEW_CLASS_S3TC_DXT5_RGBA: GLenum = 0x82CF;
14998pub const GL_VIEW_CLASS_RGTC1_RED: GLenum = 0x82D0;
14999pub const GL_VIEW_CLASS_RGTC2_RG: GLenum = 0x82D1;
15000pub const GL_VIEW_CLASS_BPTC_UNORM: GLenum = 0x82D2;
15001pub const GL_VIEW_CLASS_BPTC_FLOAT: GLenum = 0x82D3;
15002pub const GL_UNIFORM: GLenum = 0x92E1;
15003pub const GL_UNIFORM_BLOCK: GLenum = 0x92E2;
15004pub const GL_PROGRAM_INPUT: GLenum = 0x92E3;
15005pub const GL_PROGRAM_OUTPUT: GLenum = 0x92E4;
15006pub const GL_BUFFER_VARIABLE: GLenum = 0x92E5;
15007pub const GL_SHADER_STORAGE_BLOCK: GLenum = 0x92E6;
15008pub const GL_VERTEX_SUBROUTINE: GLenum = 0x92E8;
15009pub const GL_TESS_CONTROL_SUBROUTINE: GLenum = 0x92E9;
15010pub const GL_TESS_EVALUATION_SUBROUTINE: GLenum = 0x92EA;
15011pub const GL_GEOMETRY_SUBROUTINE: GLenum = 0x92EB;
15012pub const GL_FRAGMENT_SUBROUTINE: GLenum = 0x92EC;
15013pub const GL_COMPUTE_SUBROUTINE: GLenum = 0x92ED;
15014pub const GL_VERTEX_SUBROUTINE_UNIFORM: GLenum = 0x92EE;
15015pub const GL_TESS_CONTROL_SUBROUTINE_UNIFORM: GLenum = 0x92EF;
15016pub const GL_TESS_EVALUATION_SUBROUTINE_UNIFORM: GLenum = 0x92F0;
15017pub const GL_GEOMETRY_SUBROUTINE_UNIFORM: GLenum = 0x92F1;
15018pub const GL_FRAGMENT_SUBROUTINE_UNIFORM: GLenum = 0x92F2;
15019pub const GL_COMPUTE_SUBROUTINE_UNIFORM: GLenum = 0x92F3;
15020pub const GL_TRANSFORM_FEEDBACK_VARYING: GLenum = 0x92F4;
15021pub const GL_ACTIVE_RESOURCES: GLenum = 0x92F5;
15022pub const GL_MAX_NAME_LENGTH: GLenum = 0x92F6;
15023pub const GL_MAX_NUM_ACTIVE_VARIABLES: GLenum = 0x92F7;
15024pub const GL_MAX_NUM_COMPATIBLE_SUBROUTINES: GLenum = 0x92F8;
15025pub const GL_NAME_LENGTH: GLenum = 0x92F9;
15026pub const GL_TYPE: GLenum = 0x92FA;
15027pub const GL_ARRAY_SIZE: GLenum = 0x92FB;
15028pub const GL_OFFSET: GLenum = 0x92FC;
15029pub const GL_BLOCK_INDEX: GLenum = 0x92FD;
15030pub const GL_ARRAY_STRIDE: GLenum = 0x92FE;
15031pub const GL_MATRIX_STRIDE: GLenum = 0x92FF;
15032pub const GL_IS_ROW_MAJOR: GLenum = 0x9300;
15033pub const GL_ATOMIC_COUNTER_BUFFER_INDEX: GLenum = 0x9301;
15034pub const GL_BUFFER_BINDING: GLenum = 0x9302;
15035pub const GL_BUFFER_DATA_SIZE: GLenum = 0x9303;
15036pub const GL_NUM_ACTIVE_VARIABLES: GLenum = 0x9304;
15037pub const GL_ACTIVE_VARIABLES: GLenum = 0x9305;
15038pub const GL_REFERENCED_BY_VERTEX_SHADER: GLenum = 0x9306;
15039pub const GL_REFERENCED_BY_TESS_CONTROL_SHADER: GLenum = 0x9307;
15040pub const GL_REFERENCED_BY_TESS_EVALUATION_SHADER: GLenum = 0x9308;
15041pub const GL_REFERENCED_BY_GEOMETRY_SHADER: GLenum = 0x9309;
15042pub const GL_REFERENCED_BY_FRAGMENT_SHADER: GLenum = 0x930A;
15043pub const GL_REFERENCED_BY_COMPUTE_SHADER: GLenum = 0x930B;
15044pub const GL_TOP_LEVEL_ARRAY_SIZE: GLenum = 0x930C;
15045pub const GL_TOP_LEVEL_ARRAY_STRIDE: GLenum = 0x930D;
15046pub const GL_LOCATION: GLenum = 0x930E;
15047pub const GL_LOCATION_INDEX: GLenum = 0x930F;
15048pub const GL_IS_PER_PATCH: GLenum = 0x92E7;
15049pub const GL_SHADER_STORAGE_BUFFER: GLenum = 0x90D2;
15050pub const GL_SHADER_STORAGE_BUFFER_BINDING: GLenum = 0x90D3;
15051pub const GL_SHADER_STORAGE_BUFFER_START: GLenum = 0x90D4;
15052pub const GL_SHADER_STORAGE_BUFFER_SIZE: GLenum = 0x90D5;
15053pub const GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS: GLenum = 0x90D6;
15054pub const GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS: GLenum = 0x90D7;
15055pub const GL_MAX_TESS_CONTROL_SHADER_STORAGE_BLOCKS: GLenum = 0x90D8;
15056pub const GL_MAX_TESS_EVALUATION_SHADER_STORAGE_BLOCKS: GLenum = 0x90D9;
15057pub const GL_MAX_FRAGMENT_SHADER_STORAGE_BLOCKS: GLenum = 0x90DA;
15058pub const GL_MAX_COMPUTE_SHADER_STORAGE_BLOCKS: GLenum = 0x90DB;
15059pub const GL_MAX_COMBINED_SHADER_STORAGE_BLOCKS: GLenum = 0x90DC;
15060pub const GL_MAX_SHADER_STORAGE_BUFFER_BINDINGS: GLenum = 0x90DD;
15061pub const GL_MAX_SHADER_STORAGE_BLOCK_SIZE: GLenum = 0x90DE;
15062pub const GL_SHADER_STORAGE_BUFFER_OFFSET_ALIGNMENT: GLenum = 0x90DF;
15063pub const GL_SHADER_STORAGE_BARRIER_BIT: GLbitfield = 0x00002000;
15064pub const GL_MAX_COMBINED_SHADER_OUTPUT_RESOURCES: GLenum = 0x8F39;
15065pub const GL_DEPTH_STENCIL_TEXTURE_MODE: GLenum = 0x90EA;
15066pub const GL_TEXTURE_BUFFER_OFFSET: GLenum = 0x919D;
15067pub const GL_TEXTURE_BUFFER_SIZE: GLenum = 0x919E;
15068pub const GL_TEXTURE_BUFFER_OFFSET_ALIGNMENT: GLenum = 0x919F;
15069pub const GL_TEXTURE_VIEW_MIN_LEVEL: GLenum = 0x82DB;
15070pub const GL_TEXTURE_VIEW_NUM_LEVELS: GLenum = 0x82DC;
15071pub const GL_TEXTURE_VIEW_MIN_LAYER: GLenum = 0x82DD;
15072pub const GL_TEXTURE_VIEW_NUM_LAYERS: GLenum = 0x82DE;
15073pub const GL_TEXTURE_IMMUTABLE_LEVELS: GLenum = 0x82DF;
15074pub const GL_VERTEX_ATTRIB_BINDING: GLenum = 0x82D4;
15075pub const GL_VERTEX_ATTRIB_RELATIVE_OFFSET: GLenum = 0x82D5;
15076pub const GL_VERTEX_BINDING_DIVISOR: GLenum = 0x82D6;
15077pub const GL_VERTEX_BINDING_OFFSET: GLenum = 0x82D7;
15078pub const GL_VERTEX_BINDING_STRIDE: GLenum = 0x82D8;
15079pub const GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET: GLenum = 0x82D9;
15080pub const GL_MAX_VERTEX_ATTRIB_BINDINGS: GLenum = 0x82DA;
15081pub const GL_VERTEX_BINDING_BUFFER: GLenum = 0x8F4F;
15082pub const GL_DISPLAY_LIST: GLenum = 0x82E7;
15083
15084pub trait GL_4_3 {
15085	fn glGetError(&self) -> GLenum;
15086	fn glClearBufferData(&self, target: GLenum, internalformat: GLenum, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()>;
15087	fn glClearBufferSubData(&self, target: GLenum, internalformat: GLenum, offset: GLintptr, size: GLsizeiptr, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()>;
15088	fn glDispatchCompute(&self, num_groups_x: GLuint, num_groups_y: GLuint, num_groups_z: GLuint) -> Result<()>;
15089	fn glDispatchComputeIndirect(&self, indirect: GLintptr) -> Result<()>;
15090	fn glCopyImageSubData(&self, srcName: GLuint, srcTarget: GLenum, srcLevel: GLint, srcX: GLint, srcY: GLint, srcZ: GLint, dstName: GLuint, dstTarget: GLenum, dstLevel: GLint, dstX: GLint, dstY: GLint, dstZ: GLint, srcWidth: GLsizei, srcHeight: GLsizei, srcDepth: GLsizei) -> Result<()>;
15091	fn glFramebufferParameteri(&self, target: GLenum, pname: GLenum, param: GLint) -> Result<()>;
15092	fn glGetFramebufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
15093	fn glGetInternalformati64v(&self, target: GLenum, internalformat: GLenum, pname: GLenum, count: GLsizei, params: *mut GLint64) -> Result<()>;
15094	fn glInvalidateTexSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()>;
15095	fn glInvalidateTexImage(&self, texture: GLuint, level: GLint) -> Result<()>;
15096	fn glInvalidateBufferSubData(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr) -> Result<()>;
15097	fn glInvalidateBufferData(&self, buffer: GLuint) -> Result<()>;
15098	fn glInvalidateFramebuffer(&self, target: GLenum, numAttachments: GLsizei, attachments: *const GLenum) -> Result<()>;
15099	fn glInvalidateSubFramebuffer(&self, target: GLenum, numAttachments: GLsizei, attachments: *const GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
15100	fn glMultiDrawArraysIndirect(&self, mode: GLenum, indirect: *const c_void, drawcount: GLsizei, stride: GLsizei) -> Result<()>;
15101	fn glMultiDrawElementsIndirect(&self, mode: GLenum, type_: GLenum, indirect: *const c_void, drawcount: GLsizei, stride: GLsizei) -> Result<()>;
15102	fn glGetProgramInterfaceiv(&self, program: GLuint, programInterface: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
15103	fn glGetProgramResourceIndex(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLuint>;
15104	fn glGetProgramResourceName(&self, program: GLuint, programInterface: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()>;
15105	fn glGetProgramResourceiv(&self, program: GLuint, programInterface: GLenum, index: GLuint, propCount: GLsizei, props: *const GLenum, count: GLsizei, length: *mut GLsizei, params: *mut GLint) -> Result<()>;
15106	fn glGetProgramResourceLocation(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLint>;
15107	fn glGetProgramResourceLocationIndex(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLint>;
15108	fn glShaderStorageBlockBinding(&self, program: GLuint, storageBlockIndex: GLuint, storageBlockBinding: GLuint) -> Result<()>;
15109	fn glTexBufferRange(&self, target: GLenum, internalformat: GLenum, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()>;
15110	fn glTexStorage2DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()>;
15111	fn glTexStorage3DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()>;
15112	fn glTextureView(&self, texture: GLuint, target: GLenum, origtexture: GLuint, internalformat: GLenum, minlevel: GLuint, numlevels: GLuint, minlayer: GLuint, numlayers: GLuint) -> Result<()>;
15113	fn glBindVertexBuffer(&self, bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei) -> Result<()>;
15114	fn glVertexAttribFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, relativeoffset: GLuint) -> Result<()>;
15115	fn glVertexAttribIFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()>;
15116	fn glVertexAttribLFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()>;
15117	fn glVertexAttribBinding(&self, attribindex: GLuint, bindingindex: GLuint) -> Result<()>;
15118	fn glVertexBindingDivisor(&self, bindingindex: GLuint, divisor: GLuint) -> Result<()>;
15119	fn glDebugMessageControl(&self, source: GLenum, type_: GLenum, severity: GLenum, count: GLsizei, ids: *const GLuint, enabled: GLboolean) -> Result<()>;
15120	fn glDebugMessageInsert(&self, source: GLenum, type_: GLenum, id: GLuint, severity: GLenum, length: GLsizei, buf: *const GLchar) -> Result<()>;
15121	fn glDebugMessageCallback(&self, callback: GLDEBUGPROC, userParam: *const c_void) -> Result<()>;
15122	fn glGetDebugMessageLog(&self, count: GLuint, bufSize: GLsizei, sources: *mut GLenum, types: *mut GLenum, ids: *mut GLuint, severities: *mut GLenum, lengths: *mut GLsizei, messageLog: *mut GLchar) -> Result<GLuint>;
15123	fn glPushDebugGroup(&self, source: GLenum, id: GLuint, length: GLsizei, message: *const GLchar) -> Result<()>;
15124	fn glPopDebugGroup(&self) -> Result<()>;
15125	fn glObjectLabel(&self, identifier: GLenum, name: GLuint, length: GLsizei, label: *const GLchar) -> Result<()>;
15126	fn glGetObjectLabel(&self, identifier: GLenum, name: GLuint, bufSize: GLsizei, length: *mut GLsizei, label: *mut GLchar) -> Result<()>;
15127	fn glObjectPtrLabel(&self, ptr: *const c_void, length: GLsizei, label: *const GLchar) -> Result<()>;
15128	fn glGetObjectPtrLabel(&self, ptr: *const c_void, bufSize: GLsizei, length: *mut GLsizei, label: *mut GLchar) -> Result<()>;
15129}
15130
15131#[derive(Clone, Copy, PartialEq, Eq, Hash)]
15132pub struct Version43 {
15133	available: bool,
15134	geterror: PFNGLGETERRORPROC,
15135	clearbufferdata: PFNGLCLEARBUFFERDATAPROC,
15136	clearbuffersubdata: PFNGLCLEARBUFFERSUBDATAPROC,
15137	dispatchcompute: PFNGLDISPATCHCOMPUTEPROC,
15138	dispatchcomputeindirect: PFNGLDISPATCHCOMPUTEINDIRECTPROC,
15139	copyimagesubdata: PFNGLCOPYIMAGESUBDATAPROC,
15140	framebufferparameteri: PFNGLFRAMEBUFFERPARAMETERIPROC,
15141	getframebufferparameteriv: PFNGLGETFRAMEBUFFERPARAMETERIVPROC,
15142	getinternalformati64v: PFNGLGETINTERNALFORMATI64VPROC,
15143	invalidatetexsubimage: PFNGLINVALIDATETEXSUBIMAGEPROC,
15144	invalidateteximage: PFNGLINVALIDATETEXIMAGEPROC,
15145	invalidatebuffersubdata: PFNGLINVALIDATEBUFFERSUBDATAPROC,
15146	invalidatebufferdata: PFNGLINVALIDATEBUFFERDATAPROC,
15147	invalidateframebuffer: PFNGLINVALIDATEFRAMEBUFFERPROC,
15148	invalidatesubframebuffer: PFNGLINVALIDATESUBFRAMEBUFFERPROC,
15149	multidrawarraysindirect: PFNGLMULTIDRAWARRAYSINDIRECTPROC,
15150	multidrawelementsindirect: PFNGLMULTIDRAWELEMENTSINDIRECTPROC,
15151	getprograminterfaceiv: PFNGLGETPROGRAMINTERFACEIVPROC,
15152	getprogramresourceindex: PFNGLGETPROGRAMRESOURCEINDEXPROC,
15153	getprogramresourcename: PFNGLGETPROGRAMRESOURCENAMEPROC,
15154	getprogramresourceiv: PFNGLGETPROGRAMRESOURCEIVPROC,
15155	getprogramresourcelocation: PFNGLGETPROGRAMRESOURCELOCATIONPROC,
15156	getprogramresourcelocationindex: PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC,
15157	shaderstorageblockbinding: PFNGLSHADERSTORAGEBLOCKBINDINGPROC,
15158	texbufferrange: PFNGLTEXBUFFERRANGEPROC,
15159	texstorage2dmultisample: PFNGLTEXSTORAGE2DMULTISAMPLEPROC,
15160	texstorage3dmultisample: PFNGLTEXSTORAGE3DMULTISAMPLEPROC,
15161	textureview: PFNGLTEXTUREVIEWPROC,
15162	bindvertexbuffer: PFNGLBINDVERTEXBUFFERPROC,
15163	vertexattribformat: PFNGLVERTEXATTRIBFORMATPROC,
15164	vertexattribiformat: PFNGLVERTEXATTRIBIFORMATPROC,
15165	vertexattriblformat: PFNGLVERTEXATTRIBLFORMATPROC,
15166	vertexattribbinding: PFNGLVERTEXATTRIBBINDINGPROC,
15167	vertexbindingdivisor: PFNGLVERTEXBINDINGDIVISORPROC,
15168	debugmessagecontrol: PFNGLDEBUGMESSAGECONTROLPROC,
15169	debugmessageinsert: PFNGLDEBUGMESSAGEINSERTPROC,
15170	debugmessagecallback: PFNGLDEBUGMESSAGECALLBACKPROC,
15171	getdebugmessagelog: PFNGLGETDEBUGMESSAGELOGPROC,
15172	pushdebuggroup: PFNGLPUSHDEBUGGROUPPROC,
15173	popdebuggroup: PFNGLPOPDEBUGGROUPPROC,
15174	objectlabel: PFNGLOBJECTLABELPROC,
15175	getobjectlabel: PFNGLGETOBJECTLABELPROC,
15176	objectptrlabel: PFNGLOBJECTPTRLABELPROC,
15177	getobjectptrlabel: PFNGLGETOBJECTPTRLABELPROC,
15178}
15179
15180impl GL_4_3 for Version43 {
15181	#[inline(always)]
15182	fn glGetError(&self) -> GLenum {
15183		(self.geterror)()
15184	}
15185	#[inline(always)]
15186	fn glClearBufferData(&self, target: GLenum, internalformat: GLenum, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
15187		let ret = process_catch("glClearBufferData", catch_unwind(||(self.clearbufferdata)(target, internalformat, format, type_, data)));
15188		#[cfg(feature = "diagnose")]
15189		if let Ok(ret) = ret {
15190			return to_result("glClearBufferData", ret, self.glGetError());
15191		} else {
15192			return ret
15193		}
15194		#[cfg(not(feature = "diagnose"))]
15195		return ret;
15196	}
15197	#[inline(always)]
15198	fn glClearBufferSubData(&self, target: GLenum, internalformat: GLenum, offset: GLintptr, size: GLsizeiptr, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
15199		let ret = process_catch("glClearBufferSubData", catch_unwind(||(self.clearbuffersubdata)(target, internalformat, offset, size, format, type_, data)));
15200		#[cfg(feature = "diagnose")]
15201		if let Ok(ret) = ret {
15202			return to_result("glClearBufferSubData", ret, self.glGetError());
15203		} else {
15204			return ret
15205		}
15206		#[cfg(not(feature = "diagnose"))]
15207		return ret;
15208	}
15209	#[inline(always)]
15210	fn glDispatchCompute(&self, num_groups_x: GLuint, num_groups_y: GLuint, num_groups_z: GLuint) -> Result<()> {
15211		let ret = process_catch("glDispatchCompute", catch_unwind(||(self.dispatchcompute)(num_groups_x, num_groups_y, num_groups_z)));
15212		#[cfg(feature = "diagnose")]
15213		if let Ok(ret) = ret {
15214			return to_result("glDispatchCompute", ret, self.glGetError());
15215		} else {
15216			return ret
15217		}
15218		#[cfg(not(feature = "diagnose"))]
15219		return ret;
15220	}
15221	#[inline(always)]
15222	fn glDispatchComputeIndirect(&self, indirect: GLintptr) -> Result<()> {
15223		let ret = process_catch("glDispatchComputeIndirect", catch_unwind(||(self.dispatchcomputeindirect)(indirect)));
15224		#[cfg(feature = "diagnose")]
15225		if let Ok(ret) = ret {
15226			return to_result("glDispatchComputeIndirect", ret, self.glGetError());
15227		} else {
15228			return ret
15229		}
15230		#[cfg(not(feature = "diagnose"))]
15231		return ret;
15232	}
15233	#[inline(always)]
15234	fn glCopyImageSubData(&self, srcName: GLuint, srcTarget: GLenum, srcLevel: GLint, srcX: GLint, srcY: GLint, srcZ: GLint, dstName: GLuint, dstTarget: GLenum, dstLevel: GLint, dstX: GLint, dstY: GLint, dstZ: GLint, srcWidth: GLsizei, srcHeight: GLsizei, srcDepth: GLsizei) -> Result<()> {
15235		let ret = process_catch("glCopyImageSubData", catch_unwind(||(self.copyimagesubdata)(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth)));
15236		#[cfg(feature = "diagnose")]
15237		if let Ok(ret) = ret {
15238			return to_result("glCopyImageSubData", ret, self.glGetError());
15239		} else {
15240			return ret
15241		}
15242		#[cfg(not(feature = "diagnose"))]
15243		return ret;
15244	}
15245	#[inline(always)]
15246	fn glFramebufferParameteri(&self, target: GLenum, pname: GLenum, param: GLint) -> Result<()> {
15247		let ret = process_catch("glFramebufferParameteri", catch_unwind(||(self.framebufferparameteri)(target, pname, param)));
15248		#[cfg(feature = "diagnose")]
15249		if let Ok(ret) = ret {
15250			return to_result("glFramebufferParameteri", ret, self.glGetError());
15251		} else {
15252			return ret
15253		}
15254		#[cfg(not(feature = "diagnose"))]
15255		return ret;
15256	}
15257	#[inline(always)]
15258	fn glGetFramebufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
15259		let ret = process_catch("glGetFramebufferParameteriv", catch_unwind(||(self.getframebufferparameteriv)(target, pname, params)));
15260		#[cfg(feature = "diagnose")]
15261		if let Ok(ret) = ret {
15262			return to_result("glGetFramebufferParameteriv", ret, self.glGetError());
15263		} else {
15264			return ret
15265		}
15266		#[cfg(not(feature = "diagnose"))]
15267		return ret;
15268	}
15269	#[inline(always)]
15270	fn glGetInternalformati64v(&self, target: GLenum, internalformat: GLenum, pname: GLenum, count: GLsizei, params: *mut GLint64) -> Result<()> {
15271		let ret = process_catch("glGetInternalformati64v", catch_unwind(||(self.getinternalformati64v)(target, internalformat, pname, count, params)));
15272		#[cfg(feature = "diagnose")]
15273		if let Ok(ret) = ret {
15274			return to_result("glGetInternalformati64v", ret, self.glGetError());
15275		} else {
15276			return ret
15277		}
15278		#[cfg(not(feature = "diagnose"))]
15279		return ret;
15280	}
15281	#[inline(always)]
15282	fn glInvalidateTexSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()> {
15283		let ret = process_catch("glInvalidateTexSubImage", catch_unwind(||(self.invalidatetexsubimage)(texture, level, xoffset, yoffset, zoffset, width, height, depth)));
15284		#[cfg(feature = "diagnose")]
15285		if let Ok(ret) = ret {
15286			return to_result("glInvalidateTexSubImage", ret, self.glGetError());
15287		} else {
15288			return ret
15289		}
15290		#[cfg(not(feature = "diagnose"))]
15291		return ret;
15292	}
15293	#[inline(always)]
15294	fn glInvalidateTexImage(&self, texture: GLuint, level: GLint) -> Result<()> {
15295		let ret = process_catch("glInvalidateTexImage", catch_unwind(||(self.invalidateteximage)(texture, level)));
15296		#[cfg(feature = "diagnose")]
15297		if let Ok(ret) = ret {
15298			return to_result("glInvalidateTexImage", ret, self.glGetError());
15299		} else {
15300			return ret
15301		}
15302		#[cfg(not(feature = "diagnose"))]
15303		return ret;
15304	}
15305	#[inline(always)]
15306	fn glInvalidateBufferSubData(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr) -> Result<()> {
15307		let ret = process_catch("glInvalidateBufferSubData", catch_unwind(||(self.invalidatebuffersubdata)(buffer, offset, length)));
15308		#[cfg(feature = "diagnose")]
15309		if let Ok(ret) = ret {
15310			return to_result("glInvalidateBufferSubData", ret, self.glGetError());
15311		} else {
15312			return ret
15313		}
15314		#[cfg(not(feature = "diagnose"))]
15315		return ret;
15316	}
15317	#[inline(always)]
15318	fn glInvalidateBufferData(&self, buffer: GLuint) -> Result<()> {
15319		let ret = process_catch("glInvalidateBufferData", catch_unwind(||(self.invalidatebufferdata)(buffer)));
15320		#[cfg(feature = "diagnose")]
15321		if let Ok(ret) = ret {
15322			return to_result("glInvalidateBufferData", ret, self.glGetError());
15323		} else {
15324			return ret
15325		}
15326		#[cfg(not(feature = "diagnose"))]
15327		return ret;
15328	}
15329	#[inline(always)]
15330	fn glInvalidateFramebuffer(&self, target: GLenum, numAttachments: GLsizei, attachments: *const GLenum) -> Result<()> {
15331		let ret = process_catch("glInvalidateFramebuffer", catch_unwind(||(self.invalidateframebuffer)(target, numAttachments, attachments)));
15332		#[cfg(feature = "diagnose")]
15333		if let Ok(ret) = ret {
15334			return to_result("glInvalidateFramebuffer", ret, self.glGetError());
15335		} else {
15336			return ret
15337		}
15338		#[cfg(not(feature = "diagnose"))]
15339		return ret;
15340	}
15341	#[inline(always)]
15342	fn glInvalidateSubFramebuffer(&self, target: GLenum, numAttachments: GLsizei, attachments: *const GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
15343		let ret = process_catch("glInvalidateSubFramebuffer", catch_unwind(||(self.invalidatesubframebuffer)(target, numAttachments, attachments, x, y, width, height)));
15344		#[cfg(feature = "diagnose")]
15345		if let Ok(ret) = ret {
15346			return to_result("glInvalidateSubFramebuffer", ret, self.glGetError());
15347		} else {
15348			return ret
15349		}
15350		#[cfg(not(feature = "diagnose"))]
15351		return ret;
15352	}
15353	#[inline(always)]
15354	fn glMultiDrawArraysIndirect(&self, mode: GLenum, indirect: *const c_void, drawcount: GLsizei, stride: GLsizei) -> Result<()> {
15355		let ret = process_catch("glMultiDrawArraysIndirect", catch_unwind(||(self.multidrawarraysindirect)(mode, indirect, drawcount, stride)));
15356		#[cfg(feature = "diagnose")]
15357		if let Ok(ret) = ret {
15358			return to_result("glMultiDrawArraysIndirect", ret, self.glGetError());
15359		} else {
15360			return ret
15361		}
15362		#[cfg(not(feature = "diagnose"))]
15363		return ret;
15364	}
15365	#[inline(always)]
15366	fn glMultiDrawElementsIndirect(&self, mode: GLenum, type_: GLenum, indirect: *const c_void, drawcount: GLsizei, stride: GLsizei) -> Result<()> {
15367		let ret = process_catch("glMultiDrawElementsIndirect", catch_unwind(||(self.multidrawelementsindirect)(mode, type_, indirect, drawcount, stride)));
15368		#[cfg(feature = "diagnose")]
15369		if let Ok(ret) = ret {
15370			return to_result("glMultiDrawElementsIndirect", ret, self.glGetError());
15371		} else {
15372			return ret
15373		}
15374		#[cfg(not(feature = "diagnose"))]
15375		return ret;
15376	}
15377	#[inline(always)]
15378	fn glGetProgramInterfaceiv(&self, program: GLuint, programInterface: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
15379		let ret = process_catch("glGetProgramInterfaceiv", catch_unwind(||(self.getprograminterfaceiv)(program, programInterface, pname, params)));
15380		#[cfg(feature = "diagnose")]
15381		if let Ok(ret) = ret {
15382			return to_result("glGetProgramInterfaceiv", ret, self.glGetError());
15383		} else {
15384			return ret
15385		}
15386		#[cfg(not(feature = "diagnose"))]
15387		return ret;
15388	}
15389	#[inline(always)]
15390	fn glGetProgramResourceIndex(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLuint> {
15391		let ret = process_catch("glGetProgramResourceIndex", catch_unwind(||(self.getprogramresourceindex)(program, programInterface, name)));
15392		#[cfg(feature = "diagnose")]
15393		if let Ok(ret) = ret {
15394			return to_result("glGetProgramResourceIndex", ret, self.glGetError());
15395		} else {
15396			return ret
15397		}
15398		#[cfg(not(feature = "diagnose"))]
15399		return ret;
15400	}
15401	#[inline(always)]
15402	fn glGetProgramResourceName(&self, program: GLuint, programInterface: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()> {
15403		let ret = process_catch("glGetProgramResourceName", catch_unwind(||(self.getprogramresourcename)(program, programInterface, index, bufSize, length, name)));
15404		#[cfg(feature = "diagnose")]
15405		if let Ok(ret) = ret {
15406			return to_result("glGetProgramResourceName", ret, self.glGetError());
15407		} else {
15408			return ret
15409		}
15410		#[cfg(not(feature = "diagnose"))]
15411		return ret;
15412	}
15413	#[inline(always)]
15414	fn glGetProgramResourceiv(&self, program: GLuint, programInterface: GLenum, index: GLuint, propCount: GLsizei, props: *const GLenum, count: GLsizei, length: *mut GLsizei, params: *mut GLint) -> Result<()> {
15415		let ret = process_catch("glGetProgramResourceiv", catch_unwind(||(self.getprogramresourceiv)(program, programInterface, index, propCount, props, count, length, params)));
15416		#[cfg(feature = "diagnose")]
15417		if let Ok(ret) = ret {
15418			return to_result("glGetProgramResourceiv", ret, self.glGetError());
15419		} else {
15420			return ret
15421		}
15422		#[cfg(not(feature = "diagnose"))]
15423		return ret;
15424	}
15425	#[inline(always)]
15426	fn glGetProgramResourceLocation(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLint> {
15427		let ret = process_catch("glGetProgramResourceLocation", catch_unwind(||(self.getprogramresourcelocation)(program, programInterface, name)));
15428		#[cfg(feature = "diagnose")]
15429		if let Ok(ret) = ret {
15430			return to_result("glGetProgramResourceLocation", ret, self.glGetError());
15431		} else {
15432			return ret
15433		}
15434		#[cfg(not(feature = "diagnose"))]
15435		return ret;
15436	}
15437	#[inline(always)]
15438	fn glGetProgramResourceLocationIndex(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLint> {
15439		let ret = process_catch("glGetProgramResourceLocationIndex", catch_unwind(||(self.getprogramresourcelocationindex)(program, programInterface, name)));
15440		#[cfg(feature = "diagnose")]
15441		if let Ok(ret) = ret {
15442			return to_result("glGetProgramResourceLocationIndex", ret, self.glGetError());
15443		} else {
15444			return ret
15445		}
15446		#[cfg(not(feature = "diagnose"))]
15447		return ret;
15448	}
15449	#[inline(always)]
15450	fn glShaderStorageBlockBinding(&self, program: GLuint, storageBlockIndex: GLuint, storageBlockBinding: GLuint) -> Result<()> {
15451		let ret = process_catch("glShaderStorageBlockBinding", catch_unwind(||(self.shaderstorageblockbinding)(program, storageBlockIndex, storageBlockBinding)));
15452		#[cfg(feature = "diagnose")]
15453		if let Ok(ret) = ret {
15454			return to_result("glShaderStorageBlockBinding", ret, self.glGetError());
15455		} else {
15456			return ret
15457		}
15458		#[cfg(not(feature = "diagnose"))]
15459		return ret;
15460	}
15461	#[inline(always)]
15462	fn glTexBufferRange(&self, target: GLenum, internalformat: GLenum, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()> {
15463		let ret = process_catch("glTexBufferRange", catch_unwind(||(self.texbufferrange)(target, internalformat, buffer, offset, size)));
15464		#[cfg(feature = "diagnose")]
15465		if let Ok(ret) = ret {
15466			return to_result("glTexBufferRange", ret, self.glGetError());
15467		} else {
15468			return ret
15469		}
15470		#[cfg(not(feature = "diagnose"))]
15471		return ret;
15472	}
15473	#[inline(always)]
15474	fn glTexStorage2DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
15475		let ret = process_catch("glTexStorage2DMultisample", catch_unwind(||(self.texstorage2dmultisample)(target, samples, internalformat, width, height, fixedsamplelocations)));
15476		#[cfg(feature = "diagnose")]
15477		if let Ok(ret) = ret {
15478			return to_result("glTexStorage2DMultisample", ret, self.glGetError());
15479		} else {
15480			return ret
15481		}
15482		#[cfg(not(feature = "diagnose"))]
15483		return ret;
15484	}
15485	#[inline(always)]
15486	fn glTexStorage3DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
15487		let ret = process_catch("glTexStorage3DMultisample", catch_unwind(||(self.texstorage3dmultisample)(target, samples, internalformat, width, height, depth, fixedsamplelocations)));
15488		#[cfg(feature = "diagnose")]
15489		if let Ok(ret) = ret {
15490			return to_result("glTexStorage3DMultisample", ret, self.glGetError());
15491		} else {
15492			return ret
15493		}
15494		#[cfg(not(feature = "diagnose"))]
15495		return ret;
15496	}
15497	#[inline(always)]
15498	fn glTextureView(&self, texture: GLuint, target: GLenum, origtexture: GLuint, internalformat: GLenum, minlevel: GLuint, numlevels: GLuint, minlayer: GLuint, numlayers: GLuint) -> Result<()> {
15499		let ret = process_catch("glTextureView", catch_unwind(||(self.textureview)(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers)));
15500		#[cfg(feature = "diagnose")]
15501		if let Ok(ret) = ret {
15502			return to_result("glTextureView", ret, self.glGetError());
15503		} else {
15504			return ret
15505		}
15506		#[cfg(not(feature = "diagnose"))]
15507		return ret;
15508	}
15509	#[inline(always)]
15510	fn glBindVertexBuffer(&self, bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei) -> Result<()> {
15511		let ret = process_catch("glBindVertexBuffer", catch_unwind(||(self.bindvertexbuffer)(bindingindex, buffer, offset, stride)));
15512		#[cfg(feature = "diagnose")]
15513		if let Ok(ret) = ret {
15514			return to_result("glBindVertexBuffer", ret, self.glGetError());
15515		} else {
15516			return ret
15517		}
15518		#[cfg(not(feature = "diagnose"))]
15519		return ret;
15520	}
15521	#[inline(always)]
15522	fn glVertexAttribFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, relativeoffset: GLuint) -> Result<()> {
15523		let ret = process_catch("glVertexAttribFormat", catch_unwind(||(self.vertexattribformat)(attribindex, size, type_, normalized, relativeoffset)));
15524		#[cfg(feature = "diagnose")]
15525		if let Ok(ret) = ret {
15526			return to_result("glVertexAttribFormat", ret, self.glGetError());
15527		} else {
15528			return ret
15529		}
15530		#[cfg(not(feature = "diagnose"))]
15531		return ret;
15532	}
15533	#[inline(always)]
15534	fn glVertexAttribIFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()> {
15535		let ret = process_catch("glVertexAttribIFormat", catch_unwind(||(self.vertexattribiformat)(attribindex, size, type_, relativeoffset)));
15536		#[cfg(feature = "diagnose")]
15537		if let Ok(ret) = ret {
15538			return to_result("glVertexAttribIFormat", ret, self.glGetError());
15539		} else {
15540			return ret
15541		}
15542		#[cfg(not(feature = "diagnose"))]
15543		return ret;
15544	}
15545	#[inline(always)]
15546	fn glVertexAttribLFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()> {
15547		let ret = process_catch("glVertexAttribLFormat", catch_unwind(||(self.vertexattriblformat)(attribindex, size, type_, relativeoffset)));
15548		#[cfg(feature = "diagnose")]
15549		if let Ok(ret) = ret {
15550			return to_result("glVertexAttribLFormat", ret, self.glGetError());
15551		} else {
15552			return ret
15553		}
15554		#[cfg(not(feature = "diagnose"))]
15555		return ret;
15556	}
15557	#[inline(always)]
15558	fn glVertexAttribBinding(&self, attribindex: GLuint, bindingindex: GLuint) -> Result<()> {
15559		let ret = process_catch("glVertexAttribBinding", catch_unwind(||(self.vertexattribbinding)(attribindex, bindingindex)));
15560		#[cfg(feature = "diagnose")]
15561		if let Ok(ret) = ret {
15562			return to_result("glVertexAttribBinding", ret, self.glGetError());
15563		} else {
15564			return ret
15565		}
15566		#[cfg(not(feature = "diagnose"))]
15567		return ret;
15568	}
15569	#[inline(always)]
15570	fn glVertexBindingDivisor(&self, bindingindex: GLuint, divisor: GLuint) -> Result<()> {
15571		let ret = process_catch("glVertexBindingDivisor", catch_unwind(||(self.vertexbindingdivisor)(bindingindex, divisor)));
15572		#[cfg(feature = "diagnose")]
15573		if let Ok(ret) = ret {
15574			return to_result("glVertexBindingDivisor", ret, self.glGetError());
15575		} else {
15576			return ret
15577		}
15578		#[cfg(not(feature = "diagnose"))]
15579		return ret;
15580	}
15581	#[inline(always)]
15582	fn glDebugMessageControl(&self, source: GLenum, type_: GLenum, severity: GLenum, count: GLsizei, ids: *const GLuint, enabled: GLboolean) -> Result<()> {
15583		let ret = process_catch("glDebugMessageControl", catch_unwind(||(self.debugmessagecontrol)(source, type_, severity, count, ids, enabled)));
15584		#[cfg(feature = "diagnose")]
15585		if let Ok(ret) = ret {
15586			return to_result("glDebugMessageControl", ret, self.glGetError());
15587		} else {
15588			return ret
15589		}
15590		#[cfg(not(feature = "diagnose"))]
15591		return ret;
15592	}
15593	#[inline(always)]
15594	fn glDebugMessageInsert(&self, source: GLenum, type_: GLenum, id: GLuint, severity: GLenum, length: GLsizei, buf: *const GLchar) -> Result<()> {
15595		let ret = process_catch("glDebugMessageInsert", catch_unwind(||(self.debugmessageinsert)(source, type_, id, severity, length, buf)));
15596		#[cfg(feature = "diagnose")]
15597		if let Ok(ret) = ret {
15598			return to_result("glDebugMessageInsert", ret, self.glGetError());
15599		} else {
15600			return ret
15601		}
15602		#[cfg(not(feature = "diagnose"))]
15603		return ret;
15604	}
15605	#[inline(always)]
15606	fn glDebugMessageCallback(&self, callback: GLDEBUGPROC, userParam: *const c_void) -> Result<()> {
15607		let ret = process_catch("glDebugMessageCallback", catch_unwind(||(self.debugmessagecallback)(callback, userParam)));
15608		#[cfg(feature = "diagnose")]
15609		if let Ok(ret) = ret {
15610			return to_result("glDebugMessageCallback", ret, self.glGetError());
15611		} else {
15612			return ret
15613		}
15614		#[cfg(not(feature = "diagnose"))]
15615		return ret;
15616	}
15617	#[inline(always)]
15618	fn glGetDebugMessageLog(&self, count: GLuint, bufSize: GLsizei, sources: *mut GLenum, types: *mut GLenum, ids: *mut GLuint, severities: *mut GLenum, lengths: *mut GLsizei, messageLog: *mut GLchar) -> Result<GLuint> {
15619		let ret = process_catch("glGetDebugMessageLog", catch_unwind(||(self.getdebugmessagelog)(count, bufSize, sources, types, ids, severities, lengths, messageLog)));
15620		#[cfg(feature = "diagnose")]
15621		if let Ok(ret) = ret {
15622			return to_result("glGetDebugMessageLog", ret, self.glGetError());
15623		} else {
15624			return ret
15625		}
15626		#[cfg(not(feature = "diagnose"))]
15627		return ret;
15628	}
15629	#[inline(always)]
15630	fn glPushDebugGroup(&self, source: GLenum, id: GLuint, length: GLsizei, message: *const GLchar) -> Result<()> {
15631		let ret = process_catch("glPushDebugGroup", catch_unwind(||(self.pushdebuggroup)(source, id, length, message)));
15632		#[cfg(feature = "diagnose")]
15633		if let Ok(ret) = ret {
15634			return to_result("glPushDebugGroup", ret, self.glGetError());
15635		} else {
15636			return ret
15637		}
15638		#[cfg(not(feature = "diagnose"))]
15639		return ret;
15640	}
15641	#[inline(always)]
15642	fn glPopDebugGroup(&self) -> Result<()> {
15643		let ret = process_catch("glPopDebugGroup", catch_unwind(||(self.popdebuggroup)()));
15644		#[cfg(feature = "diagnose")]
15645		if let Ok(ret) = ret {
15646			return to_result("glPopDebugGroup", ret, self.glGetError());
15647		} else {
15648			return ret
15649		}
15650		#[cfg(not(feature = "diagnose"))]
15651		return ret;
15652	}
15653	#[inline(always)]
15654	fn glObjectLabel(&self, identifier: GLenum, name: GLuint, length: GLsizei, label: *const GLchar) -> Result<()> {
15655		let ret = process_catch("glObjectLabel", catch_unwind(||(self.objectlabel)(identifier, name, length, label)));
15656		#[cfg(feature = "diagnose")]
15657		if let Ok(ret) = ret {
15658			return to_result("glObjectLabel", ret, self.glGetError());
15659		} else {
15660			return ret
15661		}
15662		#[cfg(not(feature = "diagnose"))]
15663		return ret;
15664	}
15665	#[inline(always)]
15666	fn glGetObjectLabel(&self, identifier: GLenum, name: GLuint, bufSize: GLsizei, length: *mut GLsizei, label: *mut GLchar) -> Result<()> {
15667		let ret = process_catch("glGetObjectLabel", catch_unwind(||(self.getobjectlabel)(identifier, name, bufSize, length, label)));
15668		#[cfg(feature = "diagnose")]
15669		if let Ok(ret) = ret {
15670			return to_result("glGetObjectLabel", ret, self.glGetError());
15671		} else {
15672			return ret
15673		}
15674		#[cfg(not(feature = "diagnose"))]
15675		return ret;
15676	}
15677	#[inline(always)]
15678	fn glObjectPtrLabel(&self, ptr: *const c_void, length: GLsizei, label: *const GLchar) -> Result<()> {
15679		let ret = process_catch("glObjectPtrLabel", catch_unwind(||(self.objectptrlabel)(ptr, length, label)));
15680		#[cfg(feature = "diagnose")]
15681		if let Ok(ret) = ret {
15682			return to_result("glObjectPtrLabel", ret, self.glGetError());
15683		} else {
15684			return ret
15685		}
15686		#[cfg(not(feature = "diagnose"))]
15687		return ret;
15688	}
15689	#[inline(always)]
15690	fn glGetObjectPtrLabel(&self, ptr: *const c_void, bufSize: GLsizei, length: *mut GLsizei, label: *mut GLchar) -> Result<()> {
15691		let ret = process_catch("glGetObjectPtrLabel", catch_unwind(||(self.getobjectptrlabel)(ptr, bufSize, length, label)));
15692		#[cfg(feature = "diagnose")]
15693		if let Ok(ret) = ret {
15694			return to_result("glGetObjectPtrLabel", ret, self.glGetError());
15695		} else {
15696			return ret
15697		}
15698		#[cfg(not(feature = "diagnose"))]
15699		return ret;
15700	}
15701}
15702
15703impl Version43 {
15704	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
15705		let (_spec, major, minor, release) = base.get_version();
15706		if (major, minor, release) < (4, 3, 0) {
15707			return Self::default();
15708		}
15709		Self {
15710			available: true,
15711			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
15712			clearbufferdata: {let proc = get_proc_address("glClearBufferData"); if proc == null() {dummy_pfnglclearbufferdataproc} else {unsafe{transmute(proc)}}},
15713			clearbuffersubdata: {let proc = get_proc_address("glClearBufferSubData"); if proc == null() {dummy_pfnglclearbuffersubdataproc} else {unsafe{transmute(proc)}}},
15714			dispatchcompute: {let proc = get_proc_address("glDispatchCompute"); if proc == null() {dummy_pfngldispatchcomputeproc} else {unsafe{transmute(proc)}}},
15715			dispatchcomputeindirect: {let proc = get_proc_address("glDispatchComputeIndirect"); if proc == null() {dummy_pfngldispatchcomputeindirectproc} else {unsafe{transmute(proc)}}},
15716			copyimagesubdata: {let proc = get_proc_address("glCopyImageSubData"); if proc == null() {dummy_pfnglcopyimagesubdataproc} else {unsafe{transmute(proc)}}},
15717			framebufferparameteri: {let proc = get_proc_address("glFramebufferParameteri"); if proc == null() {dummy_pfnglframebufferparameteriproc} else {unsafe{transmute(proc)}}},
15718			getframebufferparameteriv: {let proc = get_proc_address("glGetFramebufferParameteriv"); if proc == null() {dummy_pfnglgetframebufferparameterivproc} else {unsafe{transmute(proc)}}},
15719			getinternalformati64v: {let proc = get_proc_address("glGetInternalformati64v"); if proc == null() {dummy_pfnglgetinternalformati64vproc} else {unsafe{transmute(proc)}}},
15720			invalidatetexsubimage: {let proc = get_proc_address("glInvalidateTexSubImage"); if proc == null() {dummy_pfnglinvalidatetexsubimageproc} else {unsafe{transmute(proc)}}},
15721			invalidateteximage: {let proc = get_proc_address("glInvalidateTexImage"); if proc == null() {dummy_pfnglinvalidateteximageproc} else {unsafe{transmute(proc)}}},
15722			invalidatebuffersubdata: {let proc = get_proc_address("glInvalidateBufferSubData"); if proc == null() {dummy_pfnglinvalidatebuffersubdataproc} else {unsafe{transmute(proc)}}},
15723			invalidatebufferdata: {let proc = get_proc_address("glInvalidateBufferData"); if proc == null() {dummy_pfnglinvalidatebufferdataproc} else {unsafe{transmute(proc)}}},
15724			invalidateframebuffer: {let proc = get_proc_address("glInvalidateFramebuffer"); if proc == null() {dummy_pfnglinvalidateframebufferproc} else {unsafe{transmute(proc)}}},
15725			invalidatesubframebuffer: {let proc = get_proc_address("glInvalidateSubFramebuffer"); if proc == null() {dummy_pfnglinvalidatesubframebufferproc} else {unsafe{transmute(proc)}}},
15726			multidrawarraysindirect: {let proc = get_proc_address("glMultiDrawArraysIndirect"); if proc == null() {dummy_pfnglmultidrawarraysindirectproc} else {unsafe{transmute(proc)}}},
15727			multidrawelementsindirect: {let proc = get_proc_address("glMultiDrawElementsIndirect"); if proc == null() {dummy_pfnglmultidrawelementsindirectproc} else {unsafe{transmute(proc)}}},
15728			getprograminterfaceiv: {let proc = get_proc_address("glGetProgramInterfaceiv"); if proc == null() {dummy_pfnglgetprograminterfaceivproc} else {unsafe{transmute(proc)}}},
15729			getprogramresourceindex: {let proc = get_proc_address("glGetProgramResourceIndex"); if proc == null() {dummy_pfnglgetprogramresourceindexproc} else {unsafe{transmute(proc)}}},
15730			getprogramresourcename: {let proc = get_proc_address("glGetProgramResourceName"); if proc == null() {dummy_pfnglgetprogramresourcenameproc} else {unsafe{transmute(proc)}}},
15731			getprogramresourceiv: {let proc = get_proc_address("glGetProgramResourceiv"); if proc == null() {dummy_pfnglgetprogramresourceivproc} else {unsafe{transmute(proc)}}},
15732			getprogramresourcelocation: {let proc = get_proc_address("glGetProgramResourceLocation"); if proc == null() {dummy_pfnglgetprogramresourcelocationproc} else {unsafe{transmute(proc)}}},
15733			getprogramresourcelocationindex: {let proc = get_proc_address("glGetProgramResourceLocationIndex"); if proc == null() {dummy_pfnglgetprogramresourcelocationindexproc} else {unsafe{transmute(proc)}}},
15734			shaderstorageblockbinding: {let proc = get_proc_address("glShaderStorageBlockBinding"); if proc == null() {dummy_pfnglshaderstorageblockbindingproc} else {unsafe{transmute(proc)}}},
15735			texbufferrange: {let proc = get_proc_address("glTexBufferRange"); if proc == null() {dummy_pfngltexbufferrangeproc} else {unsafe{transmute(proc)}}},
15736			texstorage2dmultisample: {let proc = get_proc_address("glTexStorage2DMultisample"); if proc == null() {dummy_pfngltexstorage2dmultisampleproc} else {unsafe{transmute(proc)}}},
15737			texstorage3dmultisample: {let proc = get_proc_address("glTexStorage3DMultisample"); if proc == null() {dummy_pfngltexstorage3dmultisampleproc} else {unsafe{transmute(proc)}}},
15738			textureview: {let proc = get_proc_address("glTextureView"); if proc == null() {dummy_pfngltextureviewproc} else {unsafe{transmute(proc)}}},
15739			bindvertexbuffer: {let proc = get_proc_address("glBindVertexBuffer"); if proc == null() {dummy_pfnglbindvertexbufferproc} else {unsafe{transmute(proc)}}},
15740			vertexattribformat: {let proc = get_proc_address("glVertexAttribFormat"); if proc == null() {dummy_pfnglvertexattribformatproc} else {unsafe{transmute(proc)}}},
15741			vertexattribiformat: {let proc = get_proc_address("glVertexAttribIFormat"); if proc == null() {dummy_pfnglvertexattribiformatproc} else {unsafe{transmute(proc)}}},
15742			vertexattriblformat: {let proc = get_proc_address("glVertexAttribLFormat"); if proc == null() {dummy_pfnglvertexattriblformatproc} else {unsafe{transmute(proc)}}},
15743			vertexattribbinding: {let proc = get_proc_address("glVertexAttribBinding"); if proc == null() {dummy_pfnglvertexattribbindingproc} else {unsafe{transmute(proc)}}},
15744			vertexbindingdivisor: {let proc = get_proc_address("glVertexBindingDivisor"); if proc == null() {dummy_pfnglvertexbindingdivisorproc} else {unsafe{transmute(proc)}}},
15745			debugmessagecontrol: {let proc = get_proc_address("glDebugMessageControl"); if proc == null() {dummy_pfngldebugmessagecontrolproc} else {unsafe{transmute(proc)}}},
15746			debugmessageinsert: {let proc = get_proc_address("glDebugMessageInsert"); if proc == null() {dummy_pfngldebugmessageinsertproc} else {unsafe{transmute(proc)}}},
15747			debugmessagecallback: {let proc = get_proc_address("glDebugMessageCallback"); if proc == null() {dummy_pfngldebugmessagecallbackproc} else {unsafe{transmute(proc)}}},
15748			getdebugmessagelog: {let proc = get_proc_address("glGetDebugMessageLog"); if proc == null() {dummy_pfnglgetdebugmessagelogproc} else {unsafe{transmute(proc)}}},
15749			pushdebuggroup: {let proc = get_proc_address("glPushDebugGroup"); if proc == null() {dummy_pfnglpushdebuggroupproc} else {unsafe{transmute(proc)}}},
15750			popdebuggroup: {let proc = get_proc_address("glPopDebugGroup"); if proc == null() {dummy_pfnglpopdebuggroupproc} else {unsafe{transmute(proc)}}},
15751			objectlabel: {let proc = get_proc_address("glObjectLabel"); if proc == null() {dummy_pfnglobjectlabelproc} else {unsafe{transmute(proc)}}},
15752			getobjectlabel: {let proc = get_proc_address("glGetObjectLabel"); if proc == null() {dummy_pfnglgetobjectlabelproc} else {unsafe{transmute(proc)}}},
15753			objectptrlabel: {let proc = get_proc_address("glObjectPtrLabel"); if proc == null() {dummy_pfnglobjectptrlabelproc} else {unsafe{transmute(proc)}}},
15754			getobjectptrlabel: {let proc = get_proc_address("glGetObjectPtrLabel"); if proc == null() {dummy_pfnglgetobjectptrlabelproc} else {unsafe{transmute(proc)}}},
15755		}
15756	}
15757	#[inline(always)]
15758	pub fn get_available(&self) -> bool {
15759		self.available
15760	}
15761}
15762
15763impl Default for Version43 {
15764	fn default() -> Self {
15765		Self {
15766			available: false,
15767			geterror: dummy_pfnglgeterrorproc,
15768			clearbufferdata: dummy_pfnglclearbufferdataproc,
15769			clearbuffersubdata: dummy_pfnglclearbuffersubdataproc,
15770			dispatchcompute: dummy_pfngldispatchcomputeproc,
15771			dispatchcomputeindirect: dummy_pfngldispatchcomputeindirectproc,
15772			copyimagesubdata: dummy_pfnglcopyimagesubdataproc,
15773			framebufferparameteri: dummy_pfnglframebufferparameteriproc,
15774			getframebufferparameteriv: dummy_pfnglgetframebufferparameterivproc,
15775			getinternalformati64v: dummy_pfnglgetinternalformati64vproc,
15776			invalidatetexsubimage: dummy_pfnglinvalidatetexsubimageproc,
15777			invalidateteximage: dummy_pfnglinvalidateteximageproc,
15778			invalidatebuffersubdata: dummy_pfnglinvalidatebuffersubdataproc,
15779			invalidatebufferdata: dummy_pfnglinvalidatebufferdataproc,
15780			invalidateframebuffer: dummy_pfnglinvalidateframebufferproc,
15781			invalidatesubframebuffer: dummy_pfnglinvalidatesubframebufferproc,
15782			multidrawarraysindirect: dummy_pfnglmultidrawarraysindirectproc,
15783			multidrawelementsindirect: dummy_pfnglmultidrawelementsindirectproc,
15784			getprograminterfaceiv: dummy_pfnglgetprograminterfaceivproc,
15785			getprogramresourceindex: dummy_pfnglgetprogramresourceindexproc,
15786			getprogramresourcename: dummy_pfnglgetprogramresourcenameproc,
15787			getprogramresourceiv: dummy_pfnglgetprogramresourceivproc,
15788			getprogramresourcelocation: dummy_pfnglgetprogramresourcelocationproc,
15789			getprogramresourcelocationindex: dummy_pfnglgetprogramresourcelocationindexproc,
15790			shaderstorageblockbinding: dummy_pfnglshaderstorageblockbindingproc,
15791			texbufferrange: dummy_pfngltexbufferrangeproc,
15792			texstorage2dmultisample: dummy_pfngltexstorage2dmultisampleproc,
15793			texstorage3dmultisample: dummy_pfngltexstorage3dmultisampleproc,
15794			textureview: dummy_pfngltextureviewproc,
15795			bindvertexbuffer: dummy_pfnglbindvertexbufferproc,
15796			vertexattribformat: dummy_pfnglvertexattribformatproc,
15797			vertexattribiformat: dummy_pfnglvertexattribiformatproc,
15798			vertexattriblformat: dummy_pfnglvertexattriblformatproc,
15799			vertexattribbinding: dummy_pfnglvertexattribbindingproc,
15800			vertexbindingdivisor: dummy_pfnglvertexbindingdivisorproc,
15801			debugmessagecontrol: dummy_pfngldebugmessagecontrolproc,
15802			debugmessageinsert: dummy_pfngldebugmessageinsertproc,
15803			debugmessagecallback: dummy_pfngldebugmessagecallbackproc,
15804			getdebugmessagelog: dummy_pfnglgetdebugmessagelogproc,
15805			pushdebuggroup: dummy_pfnglpushdebuggroupproc,
15806			popdebuggroup: dummy_pfnglpopdebuggroupproc,
15807			objectlabel: dummy_pfnglobjectlabelproc,
15808			getobjectlabel: dummy_pfnglgetobjectlabelproc,
15809			objectptrlabel: dummy_pfnglobjectptrlabelproc,
15810			getobjectptrlabel: dummy_pfnglgetobjectptrlabelproc,
15811		}
15812	}
15813}
15814impl Debug for Version43 {
15815	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
15816		if self.available {
15817			f.debug_struct("Version43")
15818			.field("available", &self.available)
15819			.field("clearbufferdata", unsafe{if transmute::<_, *const c_void>(self.clearbufferdata) == (dummy_pfnglclearbufferdataproc as *const c_void) {&null::<PFNGLCLEARBUFFERDATAPROC>()} else {&self.clearbufferdata}})
15820			.field("clearbuffersubdata", unsafe{if transmute::<_, *const c_void>(self.clearbuffersubdata) == (dummy_pfnglclearbuffersubdataproc as *const c_void) {&null::<PFNGLCLEARBUFFERSUBDATAPROC>()} else {&self.clearbuffersubdata}})
15821			.field("dispatchcompute", unsafe{if transmute::<_, *const c_void>(self.dispatchcompute) == (dummy_pfngldispatchcomputeproc as *const c_void) {&null::<PFNGLDISPATCHCOMPUTEPROC>()} else {&self.dispatchcompute}})
15822			.field("dispatchcomputeindirect", unsafe{if transmute::<_, *const c_void>(self.dispatchcomputeindirect) == (dummy_pfngldispatchcomputeindirectproc as *const c_void) {&null::<PFNGLDISPATCHCOMPUTEINDIRECTPROC>()} else {&self.dispatchcomputeindirect}})
15823			.field("copyimagesubdata", unsafe{if transmute::<_, *const c_void>(self.copyimagesubdata) == (dummy_pfnglcopyimagesubdataproc as *const c_void) {&null::<PFNGLCOPYIMAGESUBDATAPROC>()} else {&self.copyimagesubdata}})
15824			.field("framebufferparameteri", unsafe{if transmute::<_, *const c_void>(self.framebufferparameteri) == (dummy_pfnglframebufferparameteriproc as *const c_void) {&null::<PFNGLFRAMEBUFFERPARAMETERIPROC>()} else {&self.framebufferparameteri}})
15825			.field("getframebufferparameteriv", unsafe{if transmute::<_, *const c_void>(self.getframebufferparameteriv) == (dummy_pfnglgetframebufferparameterivproc as *const c_void) {&null::<PFNGLGETFRAMEBUFFERPARAMETERIVPROC>()} else {&self.getframebufferparameteriv}})
15826			.field("getinternalformati64v", unsafe{if transmute::<_, *const c_void>(self.getinternalformati64v) == (dummy_pfnglgetinternalformati64vproc as *const c_void) {&null::<PFNGLGETINTERNALFORMATI64VPROC>()} else {&self.getinternalformati64v}})
15827			.field("invalidatetexsubimage", unsafe{if transmute::<_, *const c_void>(self.invalidatetexsubimage) == (dummy_pfnglinvalidatetexsubimageproc as *const c_void) {&null::<PFNGLINVALIDATETEXSUBIMAGEPROC>()} else {&self.invalidatetexsubimage}})
15828			.field("invalidateteximage", unsafe{if transmute::<_, *const c_void>(self.invalidateteximage) == (dummy_pfnglinvalidateteximageproc as *const c_void) {&null::<PFNGLINVALIDATETEXIMAGEPROC>()} else {&self.invalidateteximage}})
15829			.field("invalidatebuffersubdata", unsafe{if transmute::<_, *const c_void>(self.invalidatebuffersubdata) == (dummy_pfnglinvalidatebuffersubdataproc as *const c_void) {&null::<PFNGLINVALIDATEBUFFERSUBDATAPROC>()} else {&self.invalidatebuffersubdata}})
15830			.field("invalidatebufferdata", unsafe{if transmute::<_, *const c_void>(self.invalidatebufferdata) == (dummy_pfnglinvalidatebufferdataproc as *const c_void) {&null::<PFNGLINVALIDATEBUFFERDATAPROC>()} else {&self.invalidatebufferdata}})
15831			.field("invalidateframebuffer", unsafe{if transmute::<_, *const c_void>(self.invalidateframebuffer) == (dummy_pfnglinvalidateframebufferproc as *const c_void) {&null::<PFNGLINVALIDATEFRAMEBUFFERPROC>()} else {&self.invalidateframebuffer}})
15832			.field("invalidatesubframebuffer", unsafe{if transmute::<_, *const c_void>(self.invalidatesubframebuffer) == (dummy_pfnglinvalidatesubframebufferproc as *const c_void) {&null::<PFNGLINVALIDATESUBFRAMEBUFFERPROC>()} else {&self.invalidatesubframebuffer}})
15833			.field("multidrawarraysindirect", unsafe{if transmute::<_, *const c_void>(self.multidrawarraysindirect) == (dummy_pfnglmultidrawarraysindirectproc as *const c_void) {&null::<PFNGLMULTIDRAWARRAYSINDIRECTPROC>()} else {&self.multidrawarraysindirect}})
15834			.field("multidrawelementsindirect", unsafe{if transmute::<_, *const c_void>(self.multidrawelementsindirect) == (dummy_pfnglmultidrawelementsindirectproc as *const c_void) {&null::<PFNGLMULTIDRAWELEMENTSINDIRECTPROC>()} else {&self.multidrawelementsindirect}})
15835			.field("getprograminterfaceiv", unsafe{if transmute::<_, *const c_void>(self.getprograminterfaceiv) == (dummy_pfnglgetprograminterfaceivproc as *const c_void) {&null::<PFNGLGETPROGRAMINTERFACEIVPROC>()} else {&self.getprograminterfaceiv}})
15836			.field("getprogramresourceindex", unsafe{if transmute::<_, *const c_void>(self.getprogramresourceindex) == (dummy_pfnglgetprogramresourceindexproc as *const c_void) {&null::<PFNGLGETPROGRAMRESOURCEINDEXPROC>()} else {&self.getprogramresourceindex}})
15837			.field("getprogramresourcename", unsafe{if transmute::<_, *const c_void>(self.getprogramresourcename) == (dummy_pfnglgetprogramresourcenameproc as *const c_void) {&null::<PFNGLGETPROGRAMRESOURCENAMEPROC>()} else {&self.getprogramresourcename}})
15838			.field("getprogramresourceiv", unsafe{if transmute::<_, *const c_void>(self.getprogramresourceiv) == (dummy_pfnglgetprogramresourceivproc as *const c_void) {&null::<PFNGLGETPROGRAMRESOURCEIVPROC>()} else {&self.getprogramresourceiv}})
15839			.field("getprogramresourcelocation", unsafe{if transmute::<_, *const c_void>(self.getprogramresourcelocation) == (dummy_pfnglgetprogramresourcelocationproc as *const c_void) {&null::<PFNGLGETPROGRAMRESOURCELOCATIONPROC>()} else {&self.getprogramresourcelocation}})
15840			.field("getprogramresourcelocationindex", unsafe{if transmute::<_, *const c_void>(self.getprogramresourcelocationindex) == (dummy_pfnglgetprogramresourcelocationindexproc as *const c_void) {&null::<PFNGLGETPROGRAMRESOURCELOCATIONINDEXPROC>()} else {&self.getprogramresourcelocationindex}})
15841			.field("shaderstorageblockbinding", unsafe{if transmute::<_, *const c_void>(self.shaderstorageblockbinding) == (dummy_pfnglshaderstorageblockbindingproc as *const c_void) {&null::<PFNGLSHADERSTORAGEBLOCKBINDINGPROC>()} else {&self.shaderstorageblockbinding}})
15842			.field("texbufferrange", unsafe{if transmute::<_, *const c_void>(self.texbufferrange) == (dummy_pfngltexbufferrangeproc as *const c_void) {&null::<PFNGLTEXBUFFERRANGEPROC>()} else {&self.texbufferrange}})
15843			.field("texstorage2dmultisample", unsafe{if transmute::<_, *const c_void>(self.texstorage2dmultisample) == (dummy_pfngltexstorage2dmultisampleproc as *const c_void) {&null::<PFNGLTEXSTORAGE2DMULTISAMPLEPROC>()} else {&self.texstorage2dmultisample}})
15844			.field("texstorage3dmultisample", unsafe{if transmute::<_, *const c_void>(self.texstorage3dmultisample) == (dummy_pfngltexstorage3dmultisampleproc as *const c_void) {&null::<PFNGLTEXSTORAGE3DMULTISAMPLEPROC>()} else {&self.texstorage3dmultisample}})
15845			.field("textureview", unsafe{if transmute::<_, *const c_void>(self.textureview) == (dummy_pfngltextureviewproc as *const c_void) {&null::<PFNGLTEXTUREVIEWPROC>()} else {&self.textureview}})
15846			.field("bindvertexbuffer", unsafe{if transmute::<_, *const c_void>(self.bindvertexbuffer) == (dummy_pfnglbindvertexbufferproc as *const c_void) {&null::<PFNGLBINDVERTEXBUFFERPROC>()} else {&self.bindvertexbuffer}})
15847			.field("vertexattribformat", unsafe{if transmute::<_, *const c_void>(self.vertexattribformat) == (dummy_pfnglvertexattribformatproc as *const c_void) {&null::<PFNGLVERTEXATTRIBFORMATPROC>()} else {&self.vertexattribformat}})
15848			.field("vertexattribiformat", unsafe{if transmute::<_, *const c_void>(self.vertexattribiformat) == (dummy_pfnglvertexattribiformatproc as *const c_void) {&null::<PFNGLVERTEXATTRIBIFORMATPROC>()} else {&self.vertexattribiformat}})
15849			.field("vertexattriblformat", unsafe{if transmute::<_, *const c_void>(self.vertexattriblformat) == (dummy_pfnglvertexattriblformatproc as *const c_void) {&null::<PFNGLVERTEXATTRIBLFORMATPROC>()} else {&self.vertexattriblformat}})
15850			.field("vertexattribbinding", unsafe{if transmute::<_, *const c_void>(self.vertexattribbinding) == (dummy_pfnglvertexattribbindingproc as *const c_void) {&null::<PFNGLVERTEXATTRIBBINDINGPROC>()} else {&self.vertexattribbinding}})
15851			.field("vertexbindingdivisor", unsafe{if transmute::<_, *const c_void>(self.vertexbindingdivisor) == (dummy_pfnglvertexbindingdivisorproc as *const c_void) {&null::<PFNGLVERTEXBINDINGDIVISORPROC>()} else {&self.vertexbindingdivisor}})
15852			.field("debugmessagecontrol", unsafe{if transmute::<_, *const c_void>(self.debugmessagecontrol) == (dummy_pfngldebugmessagecontrolproc as *const c_void) {&null::<PFNGLDEBUGMESSAGECONTROLPROC>()} else {&self.debugmessagecontrol}})
15853			.field("debugmessageinsert", unsafe{if transmute::<_, *const c_void>(self.debugmessageinsert) == (dummy_pfngldebugmessageinsertproc as *const c_void) {&null::<PFNGLDEBUGMESSAGEINSERTPROC>()} else {&self.debugmessageinsert}})
15854			.field("debugmessagecallback", unsafe{if transmute::<_, *const c_void>(self.debugmessagecallback) == (dummy_pfngldebugmessagecallbackproc as *const c_void) {&null::<PFNGLDEBUGMESSAGECALLBACKPROC>()} else {&self.debugmessagecallback}})
15855			.field("getdebugmessagelog", unsafe{if transmute::<_, *const c_void>(self.getdebugmessagelog) == (dummy_pfnglgetdebugmessagelogproc as *const c_void) {&null::<PFNGLGETDEBUGMESSAGELOGPROC>()} else {&self.getdebugmessagelog}})
15856			.field("pushdebuggroup", unsafe{if transmute::<_, *const c_void>(self.pushdebuggroup) == (dummy_pfnglpushdebuggroupproc as *const c_void) {&null::<PFNGLPUSHDEBUGGROUPPROC>()} else {&self.pushdebuggroup}})
15857			.field("popdebuggroup", unsafe{if transmute::<_, *const c_void>(self.popdebuggroup) == (dummy_pfnglpopdebuggroupproc as *const c_void) {&null::<PFNGLPOPDEBUGGROUPPROC>()} else {&self.popdebuggroup}})
15858			.field("objectlabel", unsafe{if transmute::<_, *const c_void>(self.objectlabel) == (dummy_pfnglobjectlabelproc as *const c_void) {&null::<PFNGLOBJECTLABELPROC>()} else {&self.objectlabel}})
15859			.field("getobjectlabel", unsafe{if transmute::<_, *const c_void>(self.getobjectlabel) == (dummy_pfnglgetobjectlabelproc as *const c_void) {&null::<PFNGLGETOBJECTLABELPROC>()} else {&self.getobjectlabel}})
15860			.field("objectptrlabel", unsafe{if transmute::<_, *const c_void>(self.objectptrlabel) == (dummy_pfnglobjectptrlabelproc as *const c_void) {&null::<PFNGLOBJECTPTRLABELPROC>()} else {&self.objectptrlabel}})
15861			.field("getobjectptrlabel", unsafe{if transmute::<_, *const c_void>(self.getobjectptrlabel) == (dummy_pfnglgetobjectptrlabelproc as *const c_void) {&null::<PFNGLGETOBJECTPTRLABELPROC>()} else {&self.getobjectptrlabel}})
15862			.finish()
15863		} else {
15864			f.debug_struct("Version43")
15865			.field("available", &self.available)
15866			.finish_non_exhaustive()
15867		}
15868	}
15869}
15870type PFNGLBUFFERSTORAGEPROC = extern "system" fn(GLenum, GLsizeiptr, *const c_void, GLbitfield);
15871type PFNGLCLEARTEXIMAGEPROC = extern "system" fn(GLuint, GLint, GLenum, GLenum, *const c_void);
15872type PFNGLCLEARTEXSUBIMAGEPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, *const c_void);
15873type PFNGLBINDBUFFERSBASEPROC = extern "system" fn(GLenum, GLuint, GLsizei, *const GLuint);
15874type PFNGLBINDBUFFERSRANGEPROC = extern "system" fn(GLenum, GLuint, GLsizei, *const GLuint, *const GLintptr, *const GLsizeiptr);
15875type PFNGLBINDTEXTURESPROC = extern "system" fn(GLuint, GLsizei, *const GLuint);
15876type PFNGLBINDSAMPLERSPROC = extern "system" fn(GLuint, GLsizei, *const GLuint);
15877type PFNGLBINDIMAGETEXTURESPROC = extern "system" fn(GLuint, GLsizei, *const GLuint);
15878type PFNGLBINDVERTEXBUFFERSPROC = extern "system" fn(GLuint, GLsizei, *const GLuint, *const GLintptr, *const GLsizei);
15879extern "system" fn dummy_pfnglbufferstorageproc (_: GLenum, _: GLsizeiptr, _: *const c_void, _: GLbitfield) {
15880	panic!("OpenGL function pointer `glBufferStorage()` is null.")
15881}
15882extern "system" fn dummy_pfnglclearteximageproc (_: GLuint, _: GLint, _: GLenum, _: GLenum, _: *const c_void) {
15883	panic!("OpenGL function pointer `glClearTexImage()` is null.")
15884}
15885extern "system" fn dummy_pfnglcleartexsubimageproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void) {
15886	panic!("OpenGL function pointer `glClearTexSubImage()` is null.")
15887}
15888extern "system" fn dummy_pfnglbindbuffersbaseproc (_: GLenum, _: GLuint, _: GLsizei, _: *const GLuint) {
15889	panic!("OpenGL function pointer `glBindBuffersBase()` is null.")
15890}
15891extern "system" fn dummy_pfnglbindbuffersrangeproc (_: GLenum, _: GLuint, _: GLsizei, _: *const GLuint, _: *const GLintptr, _: *const GLsizeiptr) {
15892	panic!("OpenGL function pointer `glBindBuffersRange()` is null.")
15893}
15894extern "system" fn dummy_pfnglbindtexturesproc (_: GLuint, _: GLsizei, _: *const GLuint) {
15895	panic!("OpenGL function pointer `glBindTextures()` is null.")
15896}
15897extern "system" fn dummy_pfnglbindsamplersproc (_: GLuint, _: GLsizei, _: *const GLuint) {
15898	panic!("OpenGL function pointer `glBindSamplers()` is null.")
15899}
15900extern "system" fn dummy_pfnglbindimagetexturesproc (_: GLuint, _: GLsizei, _: *const GLuint) {
15901	panic!("OpenGL function pointer `glBindImageTextures()` is null.")
15902}
15903extern "system" fn dummy_pfnglbindvertexbuffersproc (_: GLuint, _: GLsizei, _: *const GLuint, _: *const GLintptr, _: *const GLsizei) {
15904	panic!("OpenGL function pointer `glBindVertexBuffers()` is null.")
15905}
15906pub const GL_MAX_VERTEX_ATTRIB_STRIDE: GLenum = 0x82E5;
15907pub const GL_PRIMITIVE_RESTART_FOR_PATCHES_SUPPORTED: GLenum = 0x8221;
15908pub const GL_TEXTURE_BUFFER_BINDING: GLenum = 0x8C2A;
15909pub const GL_MAP_PERSISTENT_BIT: GLbitfield = 0x0040;
15910pub const GL_MAP_COHERENT_BIT: GLbitfield = 0x0080;
15911pub const GL_DYNAMIC_STORAGE_BIT: GLbitfield = 0x0100;
15912pub const GL_CLIENT_STORAGE_BIT: GLbitfield = 0x0200;
15913pub const GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT: GLbitfield = 0x00004000;
15914pub const GL_BUFFER_IMMUTABLE_STORAGE: GLenum = 0x821F;
15915pub const GL_BUFFER_STORAGE_FLAGS: GLenum = 0x8220;
15916pub const GL_CLEAR_TEXTURE: GLenum = 0x9365;
15917pub const GL_LOCATION_COMPONENT: GLenum = 0x934A;
15918pub const GL_TRANSFORM_FEEDBACK_BUFFER_INDEX: GLenum = 0x934B;
15919pub const GL_TRANSFORM_FEEDBACK_BUFFER_STRIDE: GLenum = 0x934C;
15920pub const GL_QUERY_BUFFER: GLenum = 0x9192;
15921pub const GL_QUERY_BUFFER_BARRIER_BIT: GLbitfield = 0x00008000;
15922pub const GL_QUERY_BUFFER_BINDING: GLenum = 0x9193;
15923pub const GL_QUERY_RESULT_NO_WAIT: GLenum = 0x9194;
15924pub const GL_MIRROR_CLAMP_TO_EDGE: GLenum = 0x8743;
15925
15926pub trait GL_4_4 {
15927	fn glGetError(&self) -> GLenum;
15928	fn glBufferStorage(&self, target: GLenum, size: GLsizeiptr, data: *const c_void, flags: GLbitfield) -> Result<()>;
15929	fn glClearTexImage(&self, texture: GLuint, level: GLint, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()>;
15930	fn glClearTexSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()>;
15931	fn glBindBuffersBase(&self, target: GLenum, first: GLuint, count: GLsizei, buffers: *const GLuint) -> Result<()>;
15932	fn glBindBuffersRange(&self, target: GLenum, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, sizes: *const GLsizeiptr) -> Result<()>;
15933	fn glBindTextures(&self, first: GLuint, count: GLsizei, textures: *const GLuint) -> Result<()>;
15934	fn glBindSamplers(&self, first: GLuint, count: GLsizei, samplers: *const GLuint) -> Result<()>;
15935	fn glBindImageTextures(&self, first: GLuint, count: GLsizei, textures: *const GLuint) -> Result<()>;
15936	fn glBindVertexBuffers(&self, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, strides: *const GLsizei) -> Result<()>;
15937}
15938
15939#[derive(Clone, Copy, PartialEq, Eq, Hash)]
15940pub struct Version44 {
15941	available: bool,
15942	geterror: PFNGLGETERRORPROC,
15943	bufferstorage: PFNGLBUFFERSTORAGEPROC,
15944	clearteximage: PFNGLCLEARTEXIMAGEPROC,
15945	cleartexsubimage: PFNGLCLEARTEXSUBIMAGEPROC,
15946	bindbuffersbase: PFNGLBINDBUFFERSBASEPROC,
15947	bindbuffersrange: PFNGLBINDBUFFERSRANGEPROC,
15948	bindtextures: PFNGLBINDTEXTURESPROC,
15949	bindsamplers: PFNGLBINDSAMPLERSPROC,
15950	bindimagetextures: PFNGLBINDIMAGETEXTURESPROC,
15951	bindvertexbuffers: PFNGLBINDVERTEXBUFFERSPROC,
15952}
15953
15954impl GL_4_4 for Version44 {
15955	#[inline(always)]
15956	fn glGetError(&self) -> GLenum {
15957		(self.geterror)()
15958	}
15959	#[inline(always)]
15960	fn glBufferStorage(&self, target: GLenum, size: GLsizeiptr, data: *const c_void, flags: GLbitfield) -> Result<()> {
15961		let ret = process_catch("glBufferStorage", catch_unwind(||(self.bufferstorage)(target, size, data, flags)));
15962		#[cfg(feature = "diagnose")]
15963		if let Ok(ret) = ret {
15964			return to_result("glBufferStorage", ret, self.glGetError());
15965		} else {
15966			return ret
15967		}
15968		#[cfg(not(feature = "diagnose"))]
15969		return ret;
15970	}
15971	#[inline(always)]
15972	fn glClearTexImage(&self, texture: GLuint, level: GLint, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
15973		let ret = process_catch("glClearTexImage", catch_unwind(||(self.clearteximage)(texture, level, format, type_, data)));
15974		#[cfg(feature = "diagnose")]
15975		if let Ok(ret) = ret {
15976			return to_result("glClearTexImage", ret, self.glGetError());
15977		} else {
15978			return ret
15979		}
15980		#[cfg(not(feature = "diagnose"))]
15981		return ret;
15982	}
15983	#[inline(always)]
15984	fn glClearTexSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
15985		let ret = process_catch("glClearTexSubImage", catch_unwind(||(self.cleartexsubimage)(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, data)));
15986		#[cfg(feature = "diagnose")]
15987		if let Ok(ret) = ret {
15988			return to_result("glClearTexSubImage", ret, self.glGetError());
15989		} else {
15990			return ret
15991		}
15992		#[cfg(not(feature = "diagnose"))]
15993		return ret;
15994	}
15995	#[inline(always)]
15996	fn glBindBuffersBase(&self, target: GLenum, first: GLuint, count: GLsizei, buffers: *const GLuint) -> Result<()> {
15997		let ret = process_catch("glBindBuffersBase", catch_unwind(||(self.bindbuffersbase)(target, first, count, buffers)));
15998		#[cfg(feature = "diagnose")]
15999		if let Ok(ret) = ret {
16000			return to_result("glBindBuffersBase", ret, self.glGetError());
16001		} else {
16002			return ret
16003		}
16004		#[cfg(not(feature = "diagnose"))]
16005		return ret;
16006	}
16007	#[inline(always)]
16008	fn glBindBuffersRange(&self, target: GLenum, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, sizes: *const GLsizeiptr) -> Result<()> {
16009		let ret = process_catch("glBindBuffersRange", catch_unwind(||(self.bindbuffersrange)(target, first, count, buffers, offsets, sizes)));
16010		#[cfg(feature = "diagnose")]
16011		if let Ok(ret) = ret {
16012			return to_result("glBindBuffersRange", ret, self.glGetError());
16013		} else {
16014			return ret
16015		}
16016		#[cfg(not(feature = "diagnose"))]
16017		return ret;
16018	}
16019	#[inline(always)]
16020	fn glBindTextures(&self, first: GLuint, count: GLsizei, textures: *const GLuint) -> Result<()> {
16021		let ret = process_catch("glBindTextures", catch_unwind(||(self.bindtextures)(first, count, textures)));
16022		#[cfg(feature = "diagnose")]
16023		if let Ok(ret) = ret {
16024			return to_result("glBindTextures", ret, self.glGetError());
16025		} else {
16026			return ret
16027		}
16028		#[cfg(not(feature = "diagnose"))]
16029		return ret;
16030	}
16031	#[inline(always)]
16032	fn glBindSamplers(&self, first: GLuint, count: GLsizei, samplers: *const GLuint) -> Result<()> {
16033		let ret = process_catch("glBindSamplers", catch_unwind(||(self.bindsamplers)(first, count, samplers)));
16034		#[cfg(feature = "diagnose")]
16035		if let Ok(ret) = ret {
16036			return to_result("glBindSamplers", ret, self.glGetError());
16037		} else {
16038			return ret
16039		}
16040		#[cfg(not(feature = "diagnose"))]
16041		return ret;
16042	}
16043	#[inline(always)]
16044	fn glBindImageTextures(&self, first: GLuint, count: GLsizei, textures: *const GLuint) -> Result<()> {
16045		let ret = process_catch("glBindImageTextures", catch_unwind(||(self.bindimagetextures)(first, count, textures)));
16046		#[cfg(feature = "diagnose")]
16047		if let Ok(ret) = ret {
16048			return to_result("glBindImageTextures", ret, self.glGetError());
16049		} else {
16050			return ret
16051		}
16052		#[cfg(not(feature = "diagnose"))]
16053		return ret;
16054	}
16055	#[inline(always)]
16056	fn glBindVertexBuffers(&self, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, strides: *const GLsizei) -> Result<()> {
16057		let ret = process_catch("glBindVertexBuffers", catch_unwind(||(self.bindvertexbuffers)(first, count, buffers, offsets, strides)));
16058		#[cfg(feature = "diagnose")]
16059		if let Ok(ret) = ret {
16060			return to_result("glBindVertexBuffers", ret, self.glGetError());
16061		} else {
16062			return ret
16063		}
16064		#[cfg(not(feature = "diagnose"))]
16065		return ret;
16066	}
16067}
16068
16069impl Version44 {
16070	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
16071		let (_spec, major, minor, release) = base.get_version();
16072		if (major, minor, release) < (4, 4, 0) {
16073			return Self::default();
16074		}
16075		Self {
16076			available: true,
16077			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
16078			bufferstorage: {let proc = get_proc_address("glBufferStorage"); if proc == null() {dummy_pfnglbufferstorageproc} else {unsafe{transmute(proc)}}},
16079			clearteximage: {let proc = get_proc_address("glClearTexImage"); if proc == null() {dummy_pfnglclearteximageproc} else {unsafe{transmute(proc)}}},
16080			cleartexsubimage: {let proc = get_proc_address("glClearTexSubImage"); if proc == null() {dummy_pfnglcleartexsubimageproc} else {unsafe{transmute(proc)}}},
16081			bindbuffersbase: {let proc = get_proc_address("glBindBuffersBase"); if proc == null() {dummy_pfnglbindbuffersbaseproc} else {unsafe{transmute(proc)}}},
16082			bindbuffersrange: {let proc = get_proc_address("glBindBuffersRange"); if proc == null() {dummy_pfnglbindbuffersrangeproc} else {unsafe{transmute(proc)}}},
16083			bindtextures: {let proc = get_proc_address("glBindTextures"); if proc == null() {dummy_pfnglbindtexturesproc} else {unsafe{transmute(proc)}}},
16084			bindsamplers: {let proc = get_proc_address("glBindSamplers"); if proc == null() {dummy_pfnglbindsamplersproc} else {unsafe{transmute(proc)}}},
16085			bindimagetextures: {let proc = get_proc_address("glBindImageTextures"); if proc == null() {dummy_pfnglbindimagetexturesproc} else {unsafe{transmute(proc)}}},
16086			bindvertexbuffers: {let proc = get_proc_address("glBindVertexBuffers"); if proc == null() {dummy_pfnglbindvertexbuffersproc} else {unsafe{transmute(proc)}}},
16087		}
16088	}
16089	#[inline(always)]
16090	pub fn get_available(&self) -> bool {
16091		self.available
16092	}
16093}
16094
16095impl Default for Version44 {
16096	fn default() -> Self {
16097		Self {
16098			available: false,
16099			geterror: dummy_pfnglgeterrorproc,
16100			bufferstorage: dummy_pfnglbufferstorageproc,
16101			clearteximage: dummy_pfnglclearteximageproc,
16102			cleartexsubimage: dummy_pfnglcleartexsubimageproc,
16103			bindbuffersbase: dummy_pfnglbindbuffersbaseproc,
16104			bindbuffersrange: dummy_pfnglbindbuffersrangeproc,
16105			bindtextures: dummy_pfnglbindtexturesproc,
16106			bindsamplers: dummy_pfnglbindsamplersproc,
16107			bindimagetextures: dummy_pfnglbindimagetexturesproc,
16108			bindvertexbuffers: dummy_pfnglbindvertexbuffersproc,
16109		}
16110	}
16111}
16112impl Debug for Version44 {
16113	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
16114		if self.available {
16115			f.debug_struct("Version44")
16116			.field("available", &self.available)
16117			.field("bufferstorage", unsafe{if transmute::<_, *const c_void>(self.bufferstorage) == (dummy_pfnglbufferstorageproc as *const c_void) {&null::<PFNGLBUFFERSTORAGEPROC>()} else {&self.bufferstorage}})
16118			.field("clearteximage", unsafe{if transmute::<_, *const c_void>(self.clearteximage) == (dummy_pfnglclearteximageproc as *const c_void) {&null::<PFNGLCLEARTEXIMAGEPROC>()} else {&self.clearteximage}})
16119			.field("cleartexsubimage", unsafe{if transmute::<_, *const c_void>(self.cleartexsubimage) == (dummy_pfnglcleartexsubimageproc as *const c_void) {&null::<PFNGLCLEARTEXSUBIMAGEPROC>()} else {&self.cleartexsubimage}})
16120			.field("bindbuffersbase", unsafe{if transmute::<_, *const c_void>(self.bindbuffersbase) == (dummy_pfnglbindbuffersbaseproc as *const c_void) {&null::<PFNGLBINDBUFFERSBASEPROC>()} else {&self.bindbuffersbase}})
16121			.field("bindbuffersrange", unsafe{if transmute::<_, *const c_void>(self.bindbuffersrange) == (dummy_pfnglbindbuffersrangeproc as *const c_void) {&null::<PFNGLBINDBUFFERSRANGEPROC>()} else {&self.bindbuffersrange}})
16122			.field("bindtextures", unsafe{if transmute::<_, *const c_void>(self.bindtextures) == (dummy_pfnglbindtexturesproc as *const c_void) {&null::<PFNGLBINDTEXTURESPROC>()} else {&self.bindtextures}})
16123			.field("bindsamplers", unsafe{if transmute::<_, *const c_void>(self.bindsamplers) == (dummy_pfnglbindsamplersproc as *const c_void) {&null::<PFNGLBINDSAMPLERSPROC>()} else {&self.bindsamplers}})
16124			.field("bindimagetextures", unsafe{if transmute::<_, *const c_void>(self.bindimagetextures) == (dummy_pfnglbindimagetexturesproc as *const c_void) {&null::<PFNGLBINDIMAGETEXTURESPROC>()} else {&self.bindimagetextures}})
16125			.field("bindvertexbuffers", unsafe{if transmute::<_, *const c_void>(self.bindvertexbuffers) == (dummy_pfnglbindvertexbuffersproc as *const c_void) {&null::<PFNGLBINDVERTEXBUFFERSPROC>()} else {&self.bindvertexbuffers}})
16126			.finish()
16127		} else {
16128			f.debug_struct("Version44")
16129			.field("available", &self.available)
16130			.finish_non_exhaustive()
16131		}
16132	}
16133}
16134type PFNGLCLIPCONTROLPROC = extern "system" fn(GLenum, GLenum);
16135type PFNGLCREATETRANSFORMFEEDBACKSPROC = extern "system" fn(GLsizei, *mut GLuint);
16136type PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC = extern "system" fn(GLuint, GLuint, GLuint);
16137type PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC = extern "system" fn(GLuint, GLuint, GLuint, GLintptr, GLsizeiptr);
16138type PFNGLGETTRANSFORMFEEDBACKIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
16139type PFNGLGETTRANSFORMFEEDBACKI_VPROC = extern "system" fn(GLuint, GLenum, GLuint, *mut GLint);
16140type PFNGLGETTRANSFORMFEEDBACKI64_VPROC = extern "system" fn(GLuint, GLenum, GLuint, *mut GLint64);
16141type PFNGLCREATEBUFFERSPROC = extern "system" fn(GLsizei, *mut GLuint);
16142type PFNGLNAMEDBUFFERSTORAGEPROC = extern "system" fn(GLuint, GLsizeiptr, *const c_void, GLbitfield);
16143type PFNGLNAMEDBUFFERDATAPROC = extern "system" fn(GLuint, GLsizeiptr, *const c_void, GLenum);
16144type PFNGLNAMEDBUFFERSUBDATAPROC = extern "system" fn(GLuint, GLintptr, GLsizeiptr, *const c_void);
16145type PFNGLCOPYNAMEDBUFFERSUBDATAPROC = extern "system" fn(GLuint, GLuint, GLintptr, GLintptr, GLsizeiptr);
16146type PFNGLCLEARNAMEDBUFFERDATAPROC = extern "system" fn(GLuint, GLenum, GLenum, GLenum, *const c_void);
16147type PFNGLCLEARNAMEDBUFFERSUBDATAPROC = extern "system" fn(GLuint, GLenum, GLintptr, GLsizeiptr, GLenum, GLenum, *const c_void);
16148type PFNGLMAPNAMEDBUFFERPROC = extern "system" fn(GLuint, GLenum) -> *mut c_void;
16149type PFNGLMAPNAMEDBUFFERRANGEPROC = extern "system" fn(GLuint, GLintptr, GLsizeiptr, GLbitfield) -> *mut c_void;
16150type PFNGLUNMAPNAMEDBUFFERPROC = extern "system" fn(GLuint) -> GLboolean;
16151type PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC = extern "system" fn(GLuint, GLintptr, GLsizeiptr);
16152type PFNGLGETNAMEDBUFFERPARAMETERIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
16153type PFNGLGETNAMEDBUFFERPARAMETERI64VPROC = extern "system" fn(GLuint, GLenum, *mut GLint64);
16154type PFNGLGETNAMEDBUFFERPOINTERVPROC = extern "system" fn(GLuint, GLenum, *mut *mut c_void);
16155type PFNGLGETNAMEDBUFFERSUBDATAPROC = extern "system" fn(GLuint, GLintptr, GLsizeiptr, *mut c_void);
16156type PFNGLCREATEFRAMEBUFFERSPROC = extern "system" fn(GLsizei, *mut GLuint);
16157type PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC = extern "system" fn(GLuint, GLenum, GLenum, GLuint);
16158type PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC = extern "system" fn(GLuint, GLenum, GLint);
16159type PFNGLNAMEDFRAMEBUFFERTEXTUREPROC = extern "system" fn(GLuint, GLenum, GLuint, GLint);
16160type PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC = extern "system" fn(GLuint, GLenum, GLuint, GLint, GLint);
16161type PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC = extern "system" fn(GLuint, GLenum);
16162type PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC = extern "system" fn(GLuint, GLsizei, *const GLenum);
16163type PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC = extern "system" fn(GLuint, GLenum);
16164type PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC = extern "system" fn(GLuint, GLsizei, *const GLenum);
16165type PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC = extern "system" fn(GLuint, GLsizei, *const GLenum, GLint, GLint, GLsizei, GLsizei);
16166type PFNGLCLEARNAMEDFRAMEBUFFERIVPROC = extern "system" fn(GLuint, GLenum, GLint, *const GLint);
16167type PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC = extern "system" fn(GLuint, GLenum, GLint, *const GLuint);
16168type PFNGLCLEARNAMEDFRAMEBUFFERFVPROC = extern "system" fn(GLuint, GLenum, GLint, *const GLfloat);
16169type PFNGLCLEARNAMEDFRAMEBUFFERFIPROC = extern "system" fn(GLuint, GLenum, GLint, GLfloat, GLint);
16170type PFNGLBLITNAMEDFRAMEBUFFERPROC = extern "system" fn(GLuint, GLuint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);
16171type PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC = extern "system" fn(GLuint, GLenum) -> GLenum;
16172type PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
16173type PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC = extern "system" fn(GLuint, GLenum, GLenum, *mut GLint);
16174type PFNGLCREATERENDERBUFFERSPROC = extern "system" fn(GLsizei, *mut GLuint);
16175type PFNGLNAMEDRENDERBUFFERSTORAGEPROC = extern "system" fn(GLuint, GLenum, GLsizei, GLsizei);
16176type PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC = extern "system" fn(GLuint, GLsizei, GLenum, GLsizei, GLsizei);
16177type PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
16178type PFNGLCREATETEXTURESPROC = extern "system" fn(GLenum, GLsizei, *mut GLuint);
16179type PFNGLTEXTUREBUFFERPROC = extern "system" fn(GLuint, GLenum, GLuint);
16180type PFNGLTEXTUREBUFFERRANGEPROC = extern "system" fn(GLuint, GLenum, GLuint, GLintptr, GLsizeiptr);
16181type PFNGLTEXTURESTORAGE1DPROC = extern "system" fn(GLuint, GLsizei, GLenum, GLsizei);
16182type PFNGLTEXTURESTORAGE2DPROC = extern "system" fn(GLuint, GLsizei, GLenum, GLsizei, GLsizei);
16183type PFNGLTEXTURESTORAGE3DPROC = extern "system" fn(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei);
16184type PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC = extern "system" fn(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLboolean);
16185type PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC = extern "system" fn(GLuint, GLsizei, GLenum, GLsizei, GLsizei, GLsizei, GLboolean);
16186type PFNGLTEXTURESUBIMAGE1DPROC = extern "system" fn(GLuint, GLint, GLint, GLsizei, GLenum, GLenum, *const c_void);
16187type PFNGLTEXTURESUBIMAGE2DPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, *const c_void);
16188type PFNGLTEXTURESUBIMAGE3DPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, *const c_void);
16189type PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC = extern "system" fn(GLuint, GLint, GLint, GLsizei, GLenum, GLsizei, *const c_void);
16190type PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, *const c_void);
16191type PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, *const c_void);
16192type PFNGLCOPYTEXTURESUBIMAGE1DPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLsizei);
16193type PFNGLCOPYTEXTURESUBIMAGE2DPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
16194type PFNGLCOPYTEXTURESUBIMAGE3DPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);
16195type PFNGLTEXTUREPARAMETERFPROC = extern "system" fn(GLuint, GLenum, GLfloat);
16196type PFNGLTEXTUREPARAMETERFVPROC = extern "system" fn(GLuint, GLenum, *const GLfloat);
16197type PFNGLTEXTUREPARAMETERIPROC = extern "system" fn(GLuint, GLenum, GLint);
16198type PFNGLTEXTUREPARAMETERIIVPROC = extern "system" fn(GLuint, GLenum, *const GLint);
16199type PFNGLTEXTUREPARAMETERIUIVPROC = extern "system" fn(GLuint, GLenum, *const GLuint);
16200type PFNGLTEXTUREPARAMETERIVPROC = extern "system" fn(GLuint, GLenum, *const GLint);
16201type PFNGLGENERATETEXTUREMIPMAPPROC = extern "system" fn(GLuint);
16202type PFNGLBINDTEXTUREUNITPROC = extern "system" fn(GLuint, GLuint);
16203type PFNGLGETTEXTUREIMAGEPROC = extern "system" fn(GLuint, GLint, GLenum, GLenum, GLsizei, *mut c_void);
16204type PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC = extern "system" fn(GLuint, GLint, GLsizei, *mut c_void);
16205type PFNGLGETTEXTURELEVELPARAMETERFVPROC = extern "system" fn(GLuint, GLint, GLenum, *mut GLfloat);
16206type PFNGLGETTEXTURELEVELPARAMETERIVPROC = extern "system" fn(GLuint, GLint, GLenum, *mut GLint);
16207type PFNGLGETTEXTUREPARAMETERFVPROC = extern "system" fn(GLuint, GLenum, *mut GLfloat);
16208type PFNGLGETTEXTUREPARAMETERIIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
16209type PFNGLGETTEXTUREPARAMETERIUIVPROC = extern "system" fn(GLuint, GLenum, *mut GLuint);
16210type PFNGLGETTEXTUREPARAMETERIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
16211type PFNGLCREATEVERTEXARRAYSPROC = extern "system" fn(GLsizei, *mut GLuint);
16212type PFNGLDISABLEVERTEXARRAYATTRIBPROC = extern "system" fn(GLuint, GLuint);
16213type PFNGLENABLEVERTEXARRAYATTRIBPROC = extern "system" fn(GLuint, GLuint);
16214type PFNGLVERTEXARRAYELEMENTBUFFERPROC = extern "system" fn(GLuint, GLuint);
16215type PFNGLVERTEXARRAYVERTEXBUFFERPROC = extern "system" fn(GLuint, GLuint, GLuint, GLintptr, GLsizei);
16216type PFNGLVERTEXARRAYVERTEXBUFFERSPROC = extern "system" fn(GLuint, GLuint, GLsizei, *const GLuint, *const GLintptr, *const GLsizei);
16217type PFNGLVERTEXARRAYATTRIBBINDINGPROC = extern "system" fn(GLuint, GLuint, GLuint);
16218type PFNGLVERTEXARRAYATTRIBFORMATPROC = extern "system" fn(GLuint, GLuint, GLint, GLenum, GLboolean, GLuint);
16219type PFNGLVERTEXARRAYATTRIBIFORMATPROC = extern "system" fn(GLuint, GLuint, GLint, GLenum, GLuint);
16220type PFNGLVERTEXARRAYATTRIBLFORMATPROC = extern "system" fn(GLuint, GLuint, GLint, GLenum, GLuint);
16221type PFNGLVERTEXARRAYBINDINGDIVISORPROC = extern "system" fn(GLuint, GLuint, GLuint);
16222type PFNGLGETVERTEXARRAYIVPROC = extern "system" fn(GLuint, GLenum, *mut GLint);
16223type PFNGLGETVERTEXARRAYINDEXEDIVPROC = extern "system" fn(GLuint, GLuint, GLenum, *mut GLint);
16224type PFNGLGETVERTEXARRAYINDEXED64IVPROC = extern "system" fn(GLuint, GLuint, GLenum, *mut GLint64);
16225type PFNGLCREATESAMPLERSPROC = extern "system" fn(GLsizei, *mut GLuint);
16226type PFNGLCREATEPROGRAMPIPELINESPROC = extern "system" fn(GLsizei, *mut GLuint);
16227type PFNGLCREATEQUERIESPROC = extern "system" fn(GLenum, GLsizei, *mut GLuint);
16228type PFNGLGETQUERYBUFFEROBJECTI64VPROC = extern "system" fn(GLuint, GLuint, GLenum, GLintptr);
16229type PFNGLGETQUERYBUFFEROBJECTIVPROC = extern "system" fn(GLuint, GLuint, GLenum, GLintptr);
16230type PFNGLGETQUERYBUFFEROBJECTUI64VPROC = extern "system" fn(GLuint, GLuint, GLenum, GLintptr);
16231type PFNGLGETQUERYBUFFEROBJECTUIVPROC = extern "system" fn(GLuint, GLuint, GLenum, GLintptr);
16232type PFNGLMEMORYBARRIERBYREGIONPROC = extern "system" fn(GLbitfield);
16233type PFNGLGETTEXTURESUBIMAGEPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, GLsizei, *mut c_void);
16234type PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC = extern "system" fn(GLuint, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLsizei, *mut c_void);
16235type PFNGLGETGRAPHICSRESETSTATUSPROC = extern "system" fn() -> GLenum;
16236type PFNGLGETNCOMPRESSEDTEXIMAGEPROC = extern "system" fn(GLenum, GLint, GLsizei, *mut c_void);
16237type PFNGLGETNTEXIMAGEPROC = extern "system" fn(GLenum, GLint, GLenum, GLenum, GLsizei, *mut c_void);
16238type PFNGLGETNUNIFORMDVPROC = extern "system" fn(GLuint, GLint, GLsizei, *mut GLdouble);
16239type PFNGLGETNUNIFORMFVPROC = extern "system" fn(GLuint, GLint, GLsizei, *mut GLfloat);
16240type PFNGLGETNUNIFORMIVPROC = extern "system" fn(GLuint, GLint, GLsizei, *mut GLint);
16241type PFNGLGETNUNIFORMUIVPROC = extern "system" fn(GLuint, GLint, GLsizei, *mut GLuint);
16242type PFNGLREADNPIXELSPROC = extern "system" fn(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, GLsizei, *mut c_void);
16243type PFNGLGETNMAPDVPROC = extern "system" fn(GLenum, GLenum, GLsizei, *mut GLdouble);
16244type PFNGLGETNMAPFVPROC = extern "system" fn(GLenum, GLenum, GLsizei, *mut GLfloat);
16245type PFNGLGETNMAPIVPROC = extern "system" fn(GLenum, GLenum, GLsizei, *mut GLint);
16246type PFNGLGETNPIXELMAPFVPROC = extern "system" fn(GLenum, GLsizei, *mut GLfloat);
16247type PFNGLGETNPIXELMAPUIVPROC = extern "system" fn(GLenum, GLsizei, *mut GLuint);
16248type PFNGLGETNPIXELMAPUSVPROC = extern "system" fn(GLenum, GLsizei, *mut GLushort);
16249type PFNGLGETNPOLYGONSTIPPLEPROC = extern "system" fn(GLsizei, *mut GLubyte);
16250type PFNGLGETNCOLORTABLEPROC = extern "system" fn(GLenum, GLenum, GLenum, GLsizei, *mut c_void);
16251type PFNGLGETNCONVOLUTIONFILTERPROC = extern "system" fn(GLenum, GLenum, GLenum, GLsizei, *mut c_void);
16252type PFNGLGETNSEPARABLEFILTERPROC = extern "system" fn(GLenum, GLenum, GLenum, GLsizei, *mut c_void, GLsizei, *mut c_void, *mut c_void);
16253type PFNGLGETNHISTOGRAMPROC = extern "system" fn(GLenum, GLboolean, GLenum, GLenum, GLsizei, *mut c_void);
16254type PFNGLGETNMINMAXPROC = extern "system" fn(GLenum, GLboolean, GLenum, GLenum, GLsizei, *mut c_void);
16255type PFNGLTEXTUREBARRIERPROC = extern "system" fn();
16256extern "system" fn dummy_pfnglclipcontrolproc (_: GLenum, _: GLenum) {
16257	panic!("OpenGL function pointer `glClipControl()` is null.")
16258}
16259extern "system" fn dummy_pfnglcreatetransformfeedbacksproc (_: GLsizei, _: *mut GLuint) {
16260	panic!("OpenGL function pointer `glCreateTransformFeedbacks()` is null.")
16261}
16262extern "system" fn dummy_pfngltransformfeedbackbufferbaseproc (_: GLuint, _: GLuint, _: GLuint) {
16263	panic!("OpenGL function pointer `glTransformFeedbackBufferBase()` is null.")
16264}
16265extern "system" fn dummy_pfngltransformfeedbackbufferrangeproc (_: GLuint, _: GLuint, _: GLuint, _: GLintptr, _: GLsizeiptr) {
16266	panic!("OpenGL function pointer `glTransformFeedbackBufferRange()` is null.")
16267}
16268extern "system" fn dummy_pfnglgettransformfeedbackivproc (_: GLuint, _: GLenum, _: *mut GLint) {
16269	panic!("OpenGL function pointer `glGetTransformFeedbackiv()` is null.")
16270}
16271extern "system" fn dummy_pfnglgettransformfeedbacki_vproc (_: GLuint, _: GLenum, _: GLuint, _: *mut GLint) {
16272	panic!("OpenGL function pointer `glGetTransformFeedbacki_v()` is null.")
16273}
16274extern "system" fn dummy_pfnglgettransformfeedbacki64_vproc (_: GLuint, _: GLenum, _: GLuint, _: *mut GLint64) {
16275	panic!("OpenGL function pointer `glGetTransformFeedbacki64_v()` is null.")
16276}
16277extern "system" fn dummy_pfnglcreatebuffersproc (_: GLsizei, _: *mut GLuint) {
16278	panic!("OpenGL function pointer `glCreateBuffers()` is null.")
16279}
16280extern "system" fn dummy_pfnglnamedbufferstorageproc (_: GLuint, _: GLsizeiptr, _: *const c_void, _: GLbitfield) {
16281	panic!("OpenGL function pointer `glNamedBufferStorage()` is null.")
16282}
16283extern "system" fn dummy_pfnglnamedbufferdataproc (_: GLuint, _: GLsizeiptr, _: *const c_void, _: GLenum) {
16284	panic!("OpenGL function pointer `glNamedBufferData()` is null.")
16285}
16286extern "system" fn dummy_pfnglnamedbuffersubdataproc (_: GLuint, _: GLintptr, _: GLsizeiptr, _: *const c_void) {
16287	panic!("OpenGL function pointer `glNamedBufferSubData()` is null.")
16288}
16289extern "system" fn dummy_pfnglcopynamedbuffersubdataproc (_: GLuint, _: GLuint, _: GLintptr, _: GLintptr, _: GLsizeiptr) {
16290	panic!("OpenGL function pointer `glCopyNamedBufferSubData()` is null.")
16291}
16292extern "system" fn dummy_pfnglclearnamedbufferdataproc (_: GLuint, _: GLenum, _: GLenum, _: GLenum, _: *const c_void) {
16293	panic!("OpenGL function pointer `glClearNamedBufferData()` is null.")
16294}
16295extern "system" fn dummy_pfnglclearnamedbuffersubdataproc (_: GLuint, _: GLenum, _: GLintptr, _: GLsizeiptr, _: GLenum, _: GLenum, _: *const c_void) {
16296	panic!("OpenGL function pointer `glClearNamedBufferSubData()` is null.")
16297}
16298extern "system" fn dummy_pfnglmapnamedbufferproc (_: GLuint, _: GLenum) -> *mut c_void {
16299	panic!("OpenGL function pointer `glMapNamedBuffer()` is null.")
16300}
16301extern "system" fn dummy_pfnglmapnamedbufferrangeproc (_: GLuint, _: GLintptr, _: GLsizeiptr, _: GLbitfield) -> *mut c_void {
16302	panic!("OpenGL function pointer `glMapNamedBufferRange()` is null.")
16303}
16304extern "system" fn dummy_pfnglunmapnamedbufferproc (_: GLuint) -> GLboolean {
16305	panic!("OpenGL function pointer `glUnmapNamedBuffer()` is null.")
16306}
16307extern "system" fn dummy_pfnglflushmappednamedbufferrangeproc (_: GLuint, _: GLintptr, _: GLsizeiptr) {
16308	panic!("OpenGL function pointer `glFlushMappedNamedBufferRange()` is null.")
16309}
16310extern "system" fn dummy_pfnglgetnamedbufferparameterivproc (_: GLuint, _: GLenum, _: *mut GLint) {
16311	panic!("OpenGL function pointer `glGetNamedBufferParameteriv()` is null.")
16312}
16313extern "system" fn dummy_pfnglgetnamedbufferparameteri64vproc (_: GLuint, _: GLenum, _: *mut GLint64) {
16314	panic!("OpenGL function pointer `glGetNamedBufferParameteri64v()` is null.")
16315}
16316extern "system" fn dummy_pfnglgetnamedbufferpointervproc (_: GLuint, _: GLenum, _: *mut *mut c_void) {
16317	panic!("OpenGL function pointer `glGetNamedBufferPointerv()` is null.")
16318}
16319extern "system" fn dummy_pfnglgetnamedbuffersubdataproc (_: GLuint, _: GLintptr, _: GLsizeiptr, _: *mut c_void) {
16320	panic!("OpenGL function pointer `glGetNamedBufferSubData()` is null.")
16321}
16322extern "system" fn dummy_pfnglcreateframebuffersproc (_: GLsizei, _: *mut GLuint) {
16323	panic!("OpenGL function pointer `glCreateFramebuffers()` is null.")
16324}
16325extern "system" fn dummy_pfnglnamedframebufferrenderbufferproc (_: GLuint, _: GLenum, _: GLenum, _: GLuint) {
16326	panic!("OpenGL function pointer `glNamedFramebufferRenderbuffer()` is null.")
16327}
16328extern "system" fn dummy_pfnglnamedframebufferparameteriproc (_: GLuint, _: GLenum, _: GLint) {
16329	panic!("OpenGL function pointer `glNamedFramebufferParameteri()` is null.")
16330}
16331extern "system" fn dummy_pfnglnamedframebuffertextureproc (_: GLuint, _: GLenum, _: GLuint, _: GLint) {
16332	panic!("OpenGL function pointer `glNamedFramebufferTexture()` is null.")
16333}
16334extern "system" fn dummy_pfnglnamedframebuffertexturelayerproc (_: GLuint, _: GLenum, _: GLuint, _: GLint, _: GLint) {
16335	panic!("OpenGL function pointer `glNamedFramebufferTextureLayer()` is null.")
16336}
16337extern "system" fn dummy_pfnglnamedframebufferdrawbufferproc (_: GLuint, _: GLenum) {
16338	panic!("OpenGL function pointer `glNamedFramebufferDrawBuffer()` is null.")
16339}
16340extern "system" fn dummy_pfnglnamedframebufferdrawbuffersproc (_: GLuint, _: GLsizei, _: *const GLenum) {
16341	panic!("OpenGL function pointer `glNamedFramebufferDrawBuffers()` is null.")
16342}
16343extern "system" fn dummy_pfnglnamedframebufferreadbufferproc (_: GLuint, _: GLenum) {
16344	panic!("OpenGL function pointer `glNamedFramebufferReadBuffer()` is null.")
16345}
16346extern "system" fn dummy_pfnglinvalidatenamedframebufferdataproc (_: GLuint, _: GLsizei, _: *const GLenum) {
16347	panic!("OpenGL function pointer `glInvalidateNamedFramebufferData()` is null.")
16348}
16349extern "system" fn dummy_pfnglinvalidatenamedframebuffersubdataproc (_: GLuint, _: GLsizei, _: *const GLenum, _: GLint, _: GLint, _: GLsizei, _: GLsizei) {
16350	panic!("OpenGL function pointer `glInvalidateNamedFramebufferSubData()` is null.")
16351}
16352extern "system" fn dummy_pfnglclearnamedframebufferivproc (_: GLuint, _: GLenum, _: GLint, _: *const GLint) {
16353	panic!("OpenGL function pointer `glClearNamedFramebufferiv()` is null.")
16354}
16355extern "system" fn dummy_pfnglclearnamedframebufferuivproc (_: GLuint, _: GLenum, _: GLint, _: *const GLuint) {
16356	panic!("OpenGL function pointer `glClearNamedFramebufferuiv()` is null.")
16357}
16358extern "system" fn dummy_pfnglclearnamedframebufferfvproc (_: GLuint, _: GLenum, _: GLint, _: *const GLfloat) {
16359	panic!("OpenGL function pointer `glClearNamedFramebufferfv()` is null.")
16360}
16361extern "system" fn dummy_pfnglclearnamedframebufferfiproc (_: GLuint, _: GLenum, _: GLint, _: GLfloat, _: GLint) {
16362	panic!("OpenGL function pointer `glClearNamedFramebufferfi()` is null.")
16363}
16364extern "system" fn dummy_pfnglblitnamedframebufferproc (_: GLuint, _: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLbitfield, _: GLenum) {
16365	panic!("OpenGL function pointer `glBlitNamedFramebuffer()` is null.")
16366}
16367extern "system" fn dummy_pfnglchecknamedframebufferstatusproc (_: GLuint, _: GLenum) -> GLenum {
16368	panic!("OpenGL function pointer `glCheckNamedFramebufferStatus()` is null.")
16369}
16370extern "system" fn dummy_pfnglgetnamedframebufferparameterivproc (_: GLuint, _: GLenum, _: *mut GLint) {
16371	panic!("OpenGL function pointer `glGetNamedFramebufferParameteriv()` is null.")
16372}
16373extern "system" fn dummy_pfnglgetnamedframebufferattachmentparameterivproc (_: GLuint, _: GLenum, _: GLenum, _: *mut GLint) {
16374	panic!("OpenGL function pointer `glGetNamedFramebufferAttachmentParameteriv()` is null.")
16375}
16376extern "system" fn dummy_pfnglcreaterenderbuffersproc (_: GLsizei, _: *mut GLuint) {
16377	panic!("OpenGL function pointer `glCreateRenderbuffers()` is null.")
16378}
16379extern "system" fn dummy_pfnglnamedrenderbufferstorageproc (_: GLuint, _: GLenum, _: GLsizei, _: GLsizei) {
16380	panic!("OpenGL function pointer `glNamedRenderbufferStorage()` is null.")
16381}
16382extern "system" fn dummy_pfnglnamedrenderbufferstoragemultisampleproc (_: GLuint, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei) {
16383	panic!("OpenGL function pointer `glNamedRenderbufferStorageMultisample()` is null.")
16384}
16385extern "system" fn dummy_pfnglgetnamedrenderbufferparameterivproc (_: GLuint, _: GLenum, _: *mut GLint) {
16386	panic!("OpenGL function pointer `glGetNamedRenderbufferParameteriv()` is null.")
16387}
16388extern "system" fn dummy_pfnglcreatetexturesproc (_: GLenum, _: GLsizei, _: *mut GLuint) {
16389	panic!("OpenGL function pointer `glCreateTextures()` is null.")
16390}
16391extern "system" fn dummy_pfngltexturebufferproc (_: GLuint, _: GLenum, _: GLuint) {
16392	panic!("OpenGL function pointer `glTextureBuffer()` is null.")
16393}
16394extern "system" fn dummy_pfngltexturebufferrangeproc (_: GLuint, _: GLenum, _: GLuint, _: GLintptr, _: GLsizeiptr) {
16395	panic!("OpenGL function pointer `glTextureBufferRange()` is null.")
16396}
16397extern "system" fn dummy_pfngltexturestorage1dproc (_: GLuint, _: GLsizei, _: GLenum, _: GLsizei) {
16398	panic!("OpenGL function pointer `glTextureStorage1D()` is null.")
16399}
16400extern "system" fn dummy_pfngltexturestorage2dproc (_: GLuint, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei) {
16401	panic!("OpenGL function pointer `glTextureStorage2D()` is null.")
16402}
16403extern "system" fn dummy_pfngltexturestorage3dproc (_: GLuint, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei, _: GLsizei) {
16404	panic!("OpenGL function pointer `glTextureStorage3D()` is null.")
16405}
16406extern "system" fn dummy_pfngltexturestorage2dmultisampleproc (_: GLuint, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei, _: GLboolean) {
16407	panic!("OpenGL function pointer `glTextureStorage2DMultisample()` is null.")
16408}
16409extern "system" fn dummy_pfngltexturestorage3dmultisampleproc (_: GLuint, _: GLsizei, _: GLenum, _: GLsizei, _: GLsizei, _: GLsizei, _: GLboolean) {
16410	panic!("OpenGL function pointer `glTextureStorage3DMultisample()` is null.")
16411}
16412extern "system" fn dummy_pfngltexturesubimage1dproc (_: GLuint, _: GLint, _: GLint, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void) {
16413	panic!("OpenGL function pointer `glTextureSubImage1D()` is null.")
16414}
16415extern "system" fn dummy_pfngltexturesubimage2dproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void) {
16416	panic!("OpenGL function pointer `glTextureSubImage2D()` is null.")
16417}
16418extern "system" fn dummy_pfngltexturesubimage3dproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void) {
16419	panic!("OpenGL function pointer `glTextureSubImage3D()` is null.")
16420}
16421extern "system" fn dummy_pfnglcompressedtexturesubimage1dproc (_: GLuint, _: GLint, _: GLint, _: GLsizei, _: GLenum, _: GLsizei, _: *const c_void) {
16422	panic!("OpenGL function pointer `glCompressedTextureSubImage1D()` is null.")
16423}
16424extern "system" fn dummy_pfnglcompressedtexturesubimage2dproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLenum, _: GLsizei, _: *const c_void) {
16425	panic!("OpenGL function pointer `glCompressedTextureSubImage2D()` is null.")
16426}
16427extern "system" fn dummy_pfnglcompressedtexturesubimage3dproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLenum, _: GLsizei, _: *const c_void) {
16428	panic!("OpenGL function pointer `glCompressedTextureSubImage3D()` is null.")
16429}
16430extern "system" fn dummy_pfnglcopytexturesubimage1dproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei) {
16431	panic!("OpenGL function pointer `glCopyTextureSubImage1D()` is null.")
16432}
16433extern "system" fn dummy_pfnglcopytexturesubimage2dproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei) {
16434	panic!("OpenGL function pointer `glCopyTextureSubImage2D()` is null.")
16435}
16436extern "system" fn dummy_pfnglcopytexturesubimage3dproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei) {
16437	panic!("OpenGL function pointer `glCopyTextureSubImage3D()` is null.")
16438}
16439extern "system" fn dummy_pfngltextureparameterfproc (_: GLuint, _: GLenum, _: GLfloat) {
16440	panic!("OpenGL function pointer `glTextureParameterf()` is null.")
16441}
16442extern "system" fn dummy_pfngltextureparameterfvproc (_: GLuint, _: GLenum, _: *const GLfloat) {
16443	panic!("OpenGL function pointer `glTextureParameterfv()` is null.")
16444}
16445extern "system" fn dummy_pfngltextureparameteriproc (_: GLuint, _: GLenum, _: GLint) {
16446	panic!("OpenGL function pointer `glTextureParameteri()` is null.")
16447}
16448extern "system" fn dummy_pfngltextureparameteriivproc (_: GLuint, _: GLenum, _: *const GLint) {
16449	panic!("OpenGL function pointer `glTextureParameterIiv()` is null.")
16450}
16451extern "system" fn dummy_pfngltextureparameteriuivproc (_: GLuint, _: GLenum, _: *const GLuint) {
16452	panic!("OpenGL function pointer `glTextureParameterIuiv()` is null.")
16453}
16454extern "system" fn dummy_pfngltextureparameterivproc (_: GLuint, _: GLenum, _: *const GLint) {
16455	panic!("OpenGL function pointer `glTextureParameteriv()` is null.")
16456}
16457extern "system" fn dummy_pfnglgeneratetexturemipmapproc (_: GLuint) {
16458	panic!("OpenGL function pointer `glGenerateTextureMipmap()` is null.")
16459}
16460extern "system" fn dummy_pfnglbindtextureunitproc (_: GLuint, _: GLuint) {
16461	panic!("OpenGL function pointer `glBindTextureUnit()` is null.")
16462}
16463extern "system" fn dummy_pfnglgettextureimageproc (_: GLuint, _: GLint, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void) {
16464	panic!("OpenGL function pointer `glGetTextureImage()` is null.")
16465}
16466extern "system" fn dummy_pfnglgetcompressedtextureimageproc (_: GLuint, _: GLint, _: GLsizei, _: *mut c_void) {
16467	panic!("OpenGL function pointer `glGetCompressedTextureImage()` is null.")
16468}
16469extern "system" fn dummy_pfnglgettexturelevelparameterfvproc (_: GLuint, _: GLint, _: GLenum, _: *mut GLfloat) {
16470	panic!("OpenGL function pointer `glGetTextureLevelParameterfv()` is null.")
16471}
16472extern "system" fn dummy_pfnglgettexturelevelparameterivproc (_: GLuint, _: GLint, _: GLenum, _: *mut GLint) {
16473	panic!("OpenGL function pointer `glGetTextureLevelParameteriv()` is null.")
16474}
16475extern "system" fn dummy_pfnglgettextureparameterfvproc (_: GLuint, _: GLenum, _: *mut GLfloat) {
16476	panic!("OpenGL function pointer `glGetTextureParameterfv()` is null.")
16477}
16478extern "system" fn dummy_pfnglgettextureparameteriivproc (_: GLuint, _: GLenum, _: *mut GLint) {
16479	panic!("OpenGL function pointer `glGetTextureParameterIiv()` is null.")
16480}
16481extern "system" fn dummy_pfnglgettextureparameteriuivproc (_: GLuint, _: GLenum, _: *mut GLuint) {
16482	panic!("OpenGL function pointer `glGetTextureParameterIuiv()` is null.")
16483}
16484extern "system" fn dummy_pfnglgettextureparameterivproc (_: GLuint, _: GLenum, _: *mut GLint) {
16485	panic!("OpenGL function pointer `glGetTextureParameteriv()` is null.")
16486}
16487extern "system" fn dummy_pfnglcreatevertexarraysproc (_: GLsizei, _: *mut GLuint) {
16488	panic!("OpenGL function pointer `glCreateVertexArrays()` is null.")
16489}
16490extern "system" fn dummy_pfngldisablevertexarrayattribproc (_: GLuint, _: GLuint) {
16491	panic!("OpenGL function pointer `glDisableVertexArrayAttrib()` is null.")
16492}
16493extern "system" fn dummy_pfnglenablevertexarrayattribproc (_: GLuint, _: GLuint) {
16494	panic!("OpenGL function pointer `glEnableVertexArrayAttrib()` is null.")
16495}
16496extern "system" fn dummy_pfnglvertexarrayelementbufferproc (_: GLuint, _: GLuint) {
16497	panic!("OpenGL function pointer `glVertexArrayElementBuffer()` is null.")
16498}
16499extern "system" fn dummy_pfnglvertexarrayvertexbufferproc (_: GLuint, _: GLuint, _: GLuint, _: GLintptr, _: GLsizei) {
16500	panic!("OpenGL function pointer `glVertexArrayVertexBuffer()` is null.")
16501}
16502extern "system" fn dummy_pfnglvertexarrayvertexbuffersproc (_: GLuint, _: GLuint, _: GLsizei, _: *const GLuint, _: *const GLintptr, _: *const GLsizei) {
16503	panic!("OpenGL function pointer `glVertexArrayVertexBuffers()` is null.")
16504}
16505extern "system" fn dummy_pfnglvertexarrayattribbindingproc (_: GLuint, _: GLuint, _: GLuint) {
16506	panic!("OpenGL function pointer `glVertexArrayAttribBinding()` is null.")
16507}
16508extern "system" fn dummy_pfnglvertexarrayattribformatproc (_: GLuint, _: GLuint, _: GLint, _: GLenum, _: GLboolean, _: GLuint) {
16509	panic!("OpenGL function pointer `glVertexArrayAttribFormat()` is null.")
16510}
16511extern "system" fn dummy_pfnglvertexarrayattribiformatproc (_: GLuint, _: GLuint, _: GLint, _: GLenum, _: GLuint) {
16512	panic!("OpenGL function pointer `glVertexArrayAttribIFormat()` is null.")
16513}
16514extern "system" fn dummy_pfnglvertexarrayattriblformatproc (_: GLuint, _: GLuint, _: GLint, _: GLenum, _: GLuint) {
16515	panic!("OpenGL function pointer `glVertexArrayAttribLFormat()` is null.")
16516}
16517extern "system" fn dummy_pfnglvertexarraybindingdivisorproc (_: GLuint, _: GLuint, _: GLuint) {
16518	panic!("OpenGL function pointer `glVertexArrayBindingDivisor()` is null.")
16519}
16520extern "system" fn dummy_pfnglgetvertexarrayivproc (_: GLuint, _: GLenum, _: *mut GLint) {
16521	panic!("OpenGL function pointer `glGetVertexArrayiv()` is null.")
16522}
16523extern "system" fn dummy_pfnglgetvertexarrayindexedivproc (_: GLuint, _: GLuint, _: GLenum, _: *mut GLint) {
16524	panic!("OpenGL function pointer `glGetVertexArrayIndexediv()` is null.")
16525}
16526extern "system" fn dummy_pfnglgetvertexarrayindexed64ivproc (_: GLuint, _: GLuint, _: GLenum, _: *mut GLint64) {
16527	panic!("OpenGL function pointer `glGetVertexArrayIndexed64iv()` is null.")
16528}
16529extern "system" fn dummy_pfnglcreatesamplersproc (_: GLsizei, _: *mut GLuint) {
16530	panic!("OpenGL function pointer `glCreateSamplers()` is null.")
16531}
16532extern "system" fn dummy_pfnglcreateprogrampipelinesproc (_: GLsizei, _: *mut GLuint) {
16533	panic!("OpenGL function pointer `glCreateProgramPipelines()` is null.")
16534}
16535extern "system" fn dummy_pfnglcreatequeriesproc (_: GLenum, _: GLsizei, _: *mut GLuint) {
16536	panic!("OpenGL function pointer `glCreateQueries()` is null.")
16537}
16538extern "system" fn dummy_pfnglgetquerybufferobjecti64vproc (_: GLuint, _: GLuint, _: GLenum, _: GLintptr) {
16539	panic!("OpenGL function pointer `glGetQueryBufferObjecti64v()` is null.")
16540}
16541extern "system" fn dummy_pfnglgetquerybufferobjectivproc (_: GLuint, _: GLuint, _: GLenum, _: GLintptr) {
16542	panic!("OpenGL function pointer `glGetQueryBufferObjectiv()` is null.")
16543}
16544extern "system" fn dummy_pfnglgetquerybufferobjectui64vproc (_: GLuint, _: GLuint, _: GLenum, _: GLintptr) {
16545	panic!("OpenGL function pointer `glGetQueryBufferObjectui64v()` is null.")
16546}
16547extern "system" fn dummy_pfnglgetquerybufferobjectuivproc (_: GLuint, _: GLuint, _: GLenum, _: GLintptr) {
16548	panic!("OpenGL function pointer `glGetQueryBufferObjectuiv()` is null.")
16549}
16550extern "system" fn dummy_pfnglmemorybarrierbyregionproc (_: GLbitfield) {
16551	panic!("OpenGL function pointer `glMemoryBarrierByRegion()` is null.")
16552}
16553extern "system" fn dummy_pfnglgettexturesubimageproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void) {
16554	panic!("OpenGL function pointer `glGetTextureSubImage()` is null.")
16555}
16556extern "system" fn dummy_pfnglgetcompressedtexturesubimageproc (_: GLuint, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLsizei, _: *mut c_void) {
16557	panic!("OpenGL function pointer `glGetCompressedTextureSubImage()` is null.")
16558}
16559extern "system" fn dummy_pfnglgetgraphicsresetstatusproc () -> GLenum {
16560	panic!("OpenGL function pointer `glGetGraphicsResetStatus()` is null.")
16561}
16562extern "system" fn dummy_pfnglgetncompressedteximageproc (_: GLenum, _: GLint, _: GLsizei, _: *mut c_void) {
16563	panic!("OpenGL function pointer `glGetnCompressedTexImage()` is null.")
16564}
16565extern "system" fn dummy_pfnglgetnteximageproc (_: GLenum, _: GLint, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void) {
16566	panic!("OpenGL function pointer `glGetnTexImage()` is null.")
16567}
16568extern "system" fn dummy_pfnglgetnuniformdvproc (_: GLuint, _: GLint, _: GLsizei, _: *mut GLdouble) {
16569	panic!("OpenGL function pointer `glGetnUniformdv()` is null.")
16570}
16571extern "system" fn dummy_pfnglgetnuniformfvproc (_: GLuint, _: GLint, _: GLsizei, _: *mut GLfloat) {
16572	panic!("OpenGL function pointer `glGetnUniformfv()` is null.")
16573}
16574extern "system" fn dummy_pfnglgetnuniformivproc (_: GLuint, _: GLint, _: GLsizei, _: *mut GLint) {
16575	panic!("OpenGL function pointer `glGetnUniformiv()` is null.")
16576}
16577extern "system" fn dummy_pfnglgetnuniformuivproc (_: GLuint, _: GLint, _: GLsizei, _: *mut GLuint) {
16578	panic!("OpenGL function pointer `glGetnUniformuiv()` is null.")
16579}
16580extern "system" fn dummy_pfnglreadnpixelsproc (_: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void) {
16581	panic!("OpenGL function pointer `glReadnPixels()` is null.")
16582}
16583extern "system" fn dummy_pfnglgetnmapdvproc (_: GLenum, _: GLenum, _: GLsizei, _: *mut GLdouble) {
16584	panic!("OpenGL function pointer `glGetnMapdv()` is null.")
16585}
16586extern "system" fn dummy_pfnglgetnmapfvproc (_: GLenum, _: GLenum, _: GLsizei, _: *mut GLfloat) {
16587	panic!("OpenGL function pointer `glGetnMapfv()` is null.")
16588}
16589extern "system" fn dummy_pfnglgetnmapivproc (_: GLenum, _: GLenum, _: GLsizei, _: *mut GLint) {
16590	panic!("OpenGL function pointer `glGetnMapiv()` is null.")
16591}
16592extern "system" fn dummy_pfnglgetnpixelmapfvproc (_: GLenum, _: GLsizei, _: *mut GLfloat) {
16593	panic!("OpenGL function pointer `glGetnPixelMapfv()` is null.")
16594}
16595extern "system" fn dummy_pfnglgetnpixelmapuivproc (_: GLenum, _: GLsizei, _: *mut GLuint) {
16596	panic!("OpenGL function pointer `glGetnPixelMapuiv()` is null.")
16597}
16598extern "system" fn dummy_pfnglgetnpixelmapusvproc (_: GLenum, _: GLsizei, _: *mut GLushort) {
16599	panic!("OpenGL function pointer `glGetnPixelMapusv()` is null.")
16600}
16601extern "system" fn dummy_pfnglgetnpolygonstippleproc (_: GLsizei, _: *mut GLubyte) {
16602	panic!("OpenGL function pointer `glGetnPolygonStipple()` is null.")
16603}
16604extern "system" fn dummy_pfnglgetncolortableproc (_: GLenum, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void) {
16605	panic!("OpenGL function pointer `glGetnColorTable()` is null.")
16606}
16607extern "system" fn dummy_pfnglgetnconvolutionfilterproc (_: GLenum, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void) {
16608	panic!("OpenGL function pointer `glGetnConvolutionFilter()` is null.")
16609}
16610extern "system" fn dummy_pfnglgetnseparablefilterproc (_: GLenum, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void, _: GLsizei, _: *mut c_void, _: *mut c_void) {
16611	panic!("OpenGL function pointer `glGetnSeparableFilter()` is null.")
16612}
16613extern "system" fn dummy_pfnglgetnhistogramproc (_: GLenum, _: GLboolean, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void) {
16614	panic!("OpenGL function pointer `glGetnHistogram()` is null.")
16615}
16616extern "system" fn dummy_pfnglgetnminmaxproc (_: GLenum, _: GLboolean, _: GLenum, _: GLenum, _: GLsizei, _: *mut c_void) {
16617	panic!("OpenGL function pointer `glGetnMinmax()` is null.")
16618}
16619extern "system" fn dummy_pfngltexturebarrierproc () {
16620	panic!("OpenGL function pointer `glTextureBarrier()` is null.")
16621}
16622pub const GL_CONTEXT_LOST: GLenum = 0x0507;
16623pub const GL_NEGATIVE_ONE_TO_ONE: GLenum = 0x935E;
16624pub const GL_ZERO_TO_ONE: GLenum = 0x935F;
16625pub const GL_CLIP_ORIGIN: GLenum = 0x935C;
16626pub const GL_CLIP_DEPTH_MODE: GLenum = 0x935D;
16627pub const GL_QUERY_WAIT_INVERTED: GLenum = 0x8E17;
16628pub const GL_QUERY_NO_WAIT_INVERTED: GLenum = 0x8E18;
16629pub const GL_QUERY_BY_REGION_WAIT_INVERTED: GLenum = 0x8E19;
16630pub const GL_QUERY_BY_REGION_NO_WAIT_INVERTED: GLenum = 0x8E1A;
16631pub const GL_MAX_CULL_DISTANCES: GLenum = 0x82F9;
16632pub const GL_MAX_COMBINED_CLIP_AND_CULL_DISTANCES: GLenum = 0x82FA;
16633pub const GL_TEXTURE_TARGET: GLenum = 0x1006;
16634pub const GL_QUERY_TARGET: GLenum = 0x82EA;
16635pub const GL_GUILTY_CONTEXT_RESET: GLenum = 0x8253;
16636pub const GL_INNOCENT_CONTEXT_RESET: GLenum = 0x8254;
16637pub const GL_UNKNOWN_CONTEXT_RESET: GLenum = 0x8255;
16638pub const GL_RESET_NOTIFICATION_STRATEGY: GLenum = 0x8256;
16639pub const GL_LOSE_CONTEXT_ON_RESET: GLenum = 0x8252;
16640pub const GL_NO_RESET_NOTIFICATION: GLenum = 0x8261;
16641pub const GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT: GLbitfield = 0x00000004;
16642pub const GL_COLOR_TABLE: GLenum = 0x80D0;
16643pub const GL_POST_CONVOLUTION_COLOR_TABLE: GLenum = 0x80D1;
16644pub const GL_POST_COLOR_MATRIX_COLOR_TABLE: GLenum = 0x80D2;
16645pub const GL_PROXY_COLOR_TABLE: GLenum = 0x80D3;
16646pub const GL_PROXY_POST_CONVOLUTION_COLOR_TABLE: GLenum = 0x80D4;
16647pub const GL_PROXY_POST_COLOR_MATRIX_COLOR_TABLE: GLenum = 0x80D5;
16648pub const GL_CONVOLUTION_1D: GLenum = 0x8010;
16649pub const GL_CONVOLUTION_2D: GLenum = 0x8011;
16650pub const GL_SEPARABLE_2D: GLenum = 0x8012;
16651pub const GL_HISTOGRAM: GLenum = 0x8024;
16652pub const GL_PROXY_HISTOGRAM: GLenum = 0x8025;
16653pub const GL_MINMAX: GLenum = 0x802E;
16654pub const GL_CONTEXT_RELEASE_BEHAVIOR: GLenum = 0x82FB;
16655pub const GL_CONTEXT_RELEASE_BEHAVIOR_FLUSH: GLenum = 0x82FC;
16656
16657pub trait GL_4_5 {
16658	fn glGetError(&self) -> GLenum;
16659	fn glClipControl(&self, origin: GLenum, depth: GLenum) -> Result<()>;
16660	fn glCreateTransformFeedbacks(&self, n: GLsizei, ids: *mut GLuint) -> Result<()>;
16661	fn glTransformFeedbackBufferBase(&self, xfb: GLuint, index: GLuint, buffer: GLuint) -> Result<()>;
16662	fn glTransformFeedbackBufferRange(&self, xfb: GLuint, index: GLuint, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()>;
16663	fn glGetTransformFeedbackiv(&self, xfb: GLuint, pname: GLenum, param: *mut GLint) -> Result<()>;
16664	fn glGetTransformFeedbacki_v(&self, xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint) -> Result<()>;
16665	fn glGetTransformFeedbacki64_v(&self, xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint64) -> Result<()>;
16666	fn glCreateBuffers(&self, n: GLsizei, buffers: *mut GLuint) -> Result<()>;
16667	fn glNamedBufferStorage(&self, buffer: GLuint, size: GLsizeiptr, data: *const c_void, flags: GLbitfield) -> Result<()>;
16668	fn glNamedBufferData(&self, buffer: GLuint, size: GLsizeiptr, data: *const c_void, usage: GLenum) -> Result<()>;
16669	fn glNamedBufferSubData(&self, buffer: GLuint, offset: GLintptr, size: GLsizeiptr, data: *const c_void) -> Result<()>;
16670	fn glCopyNamedBufferSubData(&self, readBuffer: GLuint, writeBuffer: GLuint, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) -> Result<()>;
16671	fn glClearNamedBufferData(&self, buffer: GLuint, internalformat: GLenum, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()>;
16672	fn glClearNamedBufferSubData(&self, buffer: GLuint, internalformat: GLenum, offset: GLintptr, size: GLsizeiptr, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()>;
16673	fn glMapNamedBuffer(&self, buffer: GLuint, access: GLenum) -> Result<*mut c_void>;
16674	fn glMapNamedBufferRange(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr, access: GLbitfield) -> Result<*mut c_void>;
16675	fn glUnmapNamedBuffer(&self, buffer: GLuint) -> Result<GLboolean>;
16676	fn glFlushMappedNamedBufferRange(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr) -> Result<()>;
16677	fn glGetNamedBufferParameteriv(&self, buffer: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
16678	fn glGetNamedBufferParameteri64v(&self, buffer: GLuint, pname: GLenum, params: *mut GLint64) -> Result<()>;
16679	fn glGetNamedBufferPointerv(&self, buffer: GLuint, pname: GLenum, params: *mut *mut c_void) -> Result<()>;
16680	fn glGetNamedBufferSubData(&self, buffer: GLuint, offset: GLintptr, size: GLsizeiptr, data: *mut c_void) -> Result<()>;
16681	fn glCreateFramebuffers(&self, n: GLsizei, framebuffers: *mut GLuint) -> Result<()>;
16682	fn glNamedFramebufferRenderbuffer(&self, framebuffer: GLuint, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: GLuint) -> Result<()>;
16683	fn glNamedFramebufferParameteri(&self, framebuffer: GLuint, pname: GLenum, param: GLint) -> Result<()>;
16684	fn glNamedFramebufferTexture(&self, framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint) -> Result<()>;
16685	fn glNamedFramebufferTextureLayer(&self, framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint, layer: GLint) -> Result<()>;
16686	fn glNamedFramebufferDrawBuffer(&self, framebuffer: GLuint, buf: GLenum) -> Result<()>;
16687	fn glNamedFramebufferDrawBuffers(&self, framebuffer: GLuint, n: GLsizei, bufs: *const GLenum) -> Result<()>;
16688	fn glNamedFramebufferReadBuffer(&self, framebuffer: GLuint, src: GLenum) -> Result<()>;
16689	fn glInvalidateNamedFramebufferData(&self, framebuffer: GLuint, numAttachments: GLsizei, attachments: *const GLenum) -> Result<()>;
16690	fn glInvalidateNamedFramebufferSubData(&self, framebuffer: GLuint, numAttachments: GLsizei, attachments: *const GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
16691	fn glClearNamedFramebufferiv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLint) -> Result<()>;
16692	fn glClearNamedFramebufferuiv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLuint) -> Result<()>;
16693	fn glClearNamedFramebufferfv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLfloat) -> Result<()>;
16694	fn glClearNamedFramebufferfi(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint) -> Result<()>;
16695	fn glBlitNamedFramebuffer(&self, readFramebuffer: GLuint, drawFramebuffer: GLuint, srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum) -> Result<()>;
16696	fn glCheckNamedFramebufferStatus(&self, framebuffer: GLuint, target: GLenum) -> Result<GLenum>;
16697	fn glGetNamedFramebufferParameteriv(&self, framebuffer: GLuint, pname: GLenum, param: *mut GLint) -> Result<()>;
16698	fn glGetNamedFramebufferAttachmentParameteriv(&self, framebuffer: GLuint, attachment: GLenum, pname: GLenum, params: *mut GLint) -> Result<()>;
16699	fn glCreateRenderbuffers(&self, n: GLsizei, renderbuffers: *mut GLuint) -> Result<()>;
16700	fn glNamedRenderbufferStorage(&self, renderbuffer: GLuint, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()>;
16701	fn glNamedRenderbufferStorageMultisample(&self, renderbuffer: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()>;
16702	fn glGetNamedRenderbufferParameteriv(&self, renderbuffer: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
16703	fn glCreateTextures(&self, target: GLenum, n: GLsizei, textures: *mut GLuint) -> Result<()>;
16704	fn glTextureBuffer(&self, texture: GLuint, internalformat: GLenum, buffer: GLuint) -> Result<()>;
16705	fn glTextureBufferRange(&self, texture: GLuint, internalformat: GLenum, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()>;
16706	fn glTextureStorage1D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei) -> Result<()>;
16707	fn glTextureStorage2D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()>;
16708	fn glTextureStorage3D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()>;
16709	fn glTextureStorage2DMultisample(&self, texture: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()>;
16710	fn glTextureStorage3DMultisample(&self, texture: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()>;
16711	fn glTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
16712	fn glTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
16713	fn glTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()>;
16714	fn glCompressedTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()>;
16715	fn glCompressedTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()>;
16716	fn glCompressedTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()>;
16717	fn glCopyTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, x: GLint, y: GLint, width: GLsizei) -> Result<()>;
16718	fn glCopyTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
16719	fn glCopyTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()>;
16720	fn glTextureParameterf(&self, texture: GLuint, pname: GLenum, param: GLfloat) -> Result<()>;
16721	fn glTextureParameterfv(&self, texture: GLuint, pname: GLenum, param: *const GLfloat) -> Result<()>;
16722	fn glTextureParameteri(&self, texture: GLuint, pname: GLenum, param: GLint) -> Result<()>;
16723	fn glTextureParameterIiv(&self, texture: GLuint, pname: GLenum, params: *const GLint) -> Result<()>;
16724	fn glTextureParameterIuiv(&self, texture: GLuint, pname: GLenum, params: *const GLuint) -> Result<()>;
16725	fn glTextureParameteriv(&self, texture: GLuint, pname: GLenum, param: *const GLint) -> Result<()>;
16726	fn glGenerateTextureMipmap(&self, texture: GLuint) -> Result<()>;
16727	fn glBindTextureUnit(&self, unit: GLuint, texture: GLuint) -> Result<()>;
16728	fn glGetTextureImage(&self, texture: GLuint, level: GLint, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()>;
16729	fn glGetCompressedTextureImage(&self, texture: GLuint, level: GLint, bufSize: GLsizei, pixels: *mut c_void) -> Result<()>;
16730	fn glGetTextureLevelParameterfv(&self, texture: GLuint, level: GLint, pname: GLenum, params: *mut GLfloat) -> Result<()>;
16731	fn glGetTextureLevelParameteriv(&self, texture: GLuint, level: GLint, pname: GLenum, params: *mut GLint) -> Result<()>;
16732	fn glGetTextureParameterfv(&self, texture: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()>;
16733	fn glGetTextureParameterIiv(&self, texture: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
16734	fn glGetTextureParameterIuiv(&self, texture: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()>;
16735	fn glGetTextureParameteriv(&self, texture: GLuint, pname: GLenum, params: *mut GLint) -> Result<()>;
16736	fn glCreateVertexArrays(&self, n: GLsizei, arrays: *mut GLuint) -> Result<()>;
16737	fn glDisableVertexArrayAttrib(&self, vaobj: GLuint, index: GLuint) -> Result<()>;
16738	fn glEnableVertexArrayAttrib(&self, vaobj: GLuint, index: GLuint) -> Result<()>;
16739	fn glVertexArrayElementBuffer(&self, vaobj: GLuint, buffer: GLuint) -> Result<()>;
16740	fn glVertexArrayVertexBuffer(&self, vaobj: GLuint, bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei) -> Result<()>;
16741	fn glVertexArrayVertexBuffers(&self, vaobj: GLuint, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, strides: *const GLsizei) -> Result<()>;
16742	fn glVertexArrayAttribBinding(&self, vaobj: GLuint, attribindex: GLuint, bindingindex: GLuint) -> Result<()>;
16743	fn glVertexArrayAttribFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, relativeoffset: GLuint) -> Result<()>;
16744	fn glVertexArrayAttribIFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()>;
16745	fn glVertexArrayAttribLFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()>;
16746	fn glVertexArrayBindingDivisor(&self, vaobj: GLuint, bindingindex: GLuint, divisor: GLuint) -> Result<()>;
16747	fn glGetVertexArrayiv(&self, vaobj: GLuint, pname: GLenum, param: *mut GLint) -> Result<()>;
16748	fn glGetVertexArrayIndexediv(&self, vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint) -> Result<()>;
16749	fn glGetVertexArrayIndexed64iv(&self, vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint64) -> Result<()>;
16750	fn glCreateSamplers(&self, n: GLsizei, samplers: *mut GLuint) -> Result<()>;
16751	fn glCreateProgramPipelines(&self, n: GLsizei, pipelines: *mut GLuint) -> Result<()>;
16752	fn glCreateQueries(&self, target: GLenum, n: GLsizei, ids: *mut GLuint) -> Result<()>;
16753	fn glGetQueryBufferObjecti64v(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()>;
16754	fn glGetQueryBufferObjectiv(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()>;
16755	fn glGetQueryBufferObjectui64v(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()>;
16756	fn glGetQueryBufferObjectuiv(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()>;
16757	fn glMemoryBarrierByRegion(&self, barriers: GLbitfield) -> Result<()>;
16758	fn glGetTextureSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()>;
16759	fn glGetCompressedTextureSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, bufSize: GLsizei, pixels: *mut c_void) -> Result<()>;
16760	fn glGetGraphicsResetStatus(&self) -> Result<GLenum>;
16761	fn glGetnCompressedTexImage(&self, target: GLenum, lod: GLint, bufSize: GLsizei, pixels: *mut c_void) -> Result<()>;
16762	fn glGetnTexImage(&self, target: GLenum, level: GLint, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()>;
16763	fn glGetnUniformdv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLdouble) -> Result<()>;
16764	fn glGetnUniformfv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLfloat) -> Result<()>;
16765	fn glGetnUniformiv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLint) -> Result<()>;
16766	fn glGetnUniformuiv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLuint) -> Result<()>;
16767	fn glReadnPixels(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, bufSize: GLsizei, data: *mut c_void) -> Result<()>;
16768	fn glGetnMapdv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLdouble) -> Result<()>;
16769	fn glGetnMapfv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLfloat) -> Result<()>;
16770	fn glGetnMapiv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLint) -> Result<()>;
16771	fn glGetnPixelMapfv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLfloat) -> Result<()>;
16772	fn glGetnPixelMapuiv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLuint) -> Result<()>;
16773	fn glGetnPixelMapusv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLushort) -> Result<()>;
16774	fn glGetnPolygonStipple(&self, bufSize: GLsizei, pattern: *mut GLubyte) -> Result<()>;
16775	fn glGetnColorTable(&self, target: GLenum, format: GLenum, type_: GLenum, bufSize: GLsizei, table: *mut c_void) -> Result<()>;
16776	fn glGetnConvolutionFilter(&self, target: GLenum, format: GLenum, type_: GLenum, bufSize: GLsizei, image: *mut c_void) -> Result<()>;
16777	fn glGetnSeparableFilter(&self, target: GLenum, format: GLenum, type_: GLenum, rowBufSize: GLsizei, row: *mut c_void, columnBufSize: GLsizei, column: *mut c_void, span: *mut c_void) -> Result<()>;
16778	fn glGetnHistogram(&self, target: GLenum, reset: GLboolean, format: GLenum, type_: GLenum, bufSize: GLsizei, values: *mut c_void) -> Result<()>;
16779	fn glGetnMinmax(&self, target: GLenum, reset: GLboolean, format: GLenum, type_: GLenum, bufSize: GLsizei, values: *mut c_void) -> Result<()>;
16780	fn glTextureBarrier(&self) -> Result<()>;
16781}
16782
16783#[derive(Clone, Copy, PartialEq, Eq, Hash)]
16784pub struct Version45 {
16785	available: bool,
16786	geterror: PFNGLGETERRORPROC,
16787	clipcontrol: PFNGLCLIPCONTROLPROC,
16788	createtransformfeedbacks: PFNGLCREATETRANSFORMFEEDBACKSPROC,
16789	transformfeedbackbufferbase: PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC,
16790	transformfeedbackbufferrange: PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC,
16791	gettransformfeedbackiv: PFNGLGETTRANSFORMFEEDBACKIVPROC,
16792	gettransformfeedbacki_v: PFNGLGETTRANSFORMFEEDBACKI_VPROC,
16793	gettransformfeedbacki64_v: PFNGLGETTRANSFORMFEEDBACKI64_VPROC,
16794	createbuffers: PFNGLCREATEBUFFERSPROC,
16795	namedbufferstorage: PFNGLNAMEDBUFFERSTORAGEPROC,
16796	namedbufferdata: PFNGLNAMEDBUFFERDATAPROC,
16797	namedbuffersubdata: PFNGLNAMEDBUFFERSUBDATAPROC,
16798	copynamedbuffersubdata: PFNGLCOPYNAMEDBUFFERSUBDATAPROC,
16799	clearnamedbufferdata: PFNGLCLEARNAMEDBUFFERDATAPROC,
16800	clearnamedbuffersubdata: PFNGLCLEARNAMEDBUFFERSUBDATAPROC,
16801	mapnamedbuffer: PFNGLMAPNAMEDBUFFERPROC,
16802	mapnamedbufferrange: PFNGLMAPNAMEDBUFFERRANGEPROC,
16803	unmapnamedbuffer: PFNGLUNMAPNAMEDBUFFERPROC,
16804	flushmappednamedbufferrange: PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC,
16805	getnamedbufferparameteriv: PFNGLGETNAMEDBUFFERPARAMETERIVPROC,
16806	getnamedbufferparameteri64v: PFNGLGETNAMEDBUFFERPARAMETERI64VPROC,
16807	getnamedbufferpointerv: PFNGLGETNAMEDBUFFERPOINTERVPROC,
16808	getnamedbuffersubdata: PFNGLGETNAMEDBUFFERSUBDATAPROC,
16809	createframebuffers: PFNGLCREATEFRAMEBUFFERSPROC,
16810	namedframebufferrenderbuffer: PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC,
16811	namedframebufferparameteri: PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC,
16812	namedframebuffertexture: PFNGLNAMEDFRAMEBUFFERTEXTUREPROC,
16813	namedframebuffertexturelayer: PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC,
16814	namedframebufferdrawbuffer: PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC,
16815	namedframebufferdrawbuffers: PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC,
16816	namedframebufferreadbuffer: PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC,
16817	invalidatenamedframebufferdata: PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC,
16818	invalidatenamedframebuffersubdata: PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC,
16819	clearnamedframebufferiv: PFNGLCLEARNAMEDFRAMEBUFFERIVPROC,
16820	clearnamedframebufferuiv: PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC,
16821	clearnamedframebufferfv: PFNGLCLEARNAMEDFRAMEBUFFERFVPROC,
16822	clearnamedframebufferfi: PFNGLCLEARNAMEDFRAMEBUFFERFIPROC,
16823	blitnamedframebuffer: PFNGLBLITNAMEDFRAMEBUFFERPROC,
16824	checknamedframebufferstatus: PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC,
16825	getnamedframebufferparameteriv: PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC,
16826	getnamedframebufferattachmentparameteriv: PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC,
16827	createrenderbuffers: PFNGLCREATERENDERBUFFERSPROC,
16828	namedrenderbufferstorage: PFNGLNAMEDRENDERBUFFERSTORAGEPROC,
16829	namedrenderbufferstoragemultisample: PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC,
16830	getnamedrenderbufferparameteriv: PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC,
16831	createtextures: PFNGLCREATETEXTURESPROC,
16832	texturebuffer: PFNGLTEXTUREBUFFERPROC,
16833	texturebufferrange: PFNGLTEXTUREBUFFERRANGEPROC,
16834	texturestorage1d: PFNGLTEXTURESTORAGE1DPROC,
16835	texturestorage2d: PFNGLTEXTURESTORAGE2DPROC,
16836	texturestorage3d: PFNGLTEXTURESTORAGE3DPROC,
16837	texturestorage2dmultisample: PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC,
16838	texturestorage3dmultisample: PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC,
16839	texturesubimage1d: PFNGLTEXTURESUBIMAGE1DPROC,
16840	texturesubimage2d: PFNGLTEXTURESUBIMAGE2DPROC,
16841	texturesubimage3d: PFNGLTEXTURESUBIMAGE3DPROC,
16842	compressedtexturesubimage1d: PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC,
16843	compressedtexturesubimage2d: PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC,
16844	compressedtexturesubimage3d: PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC,
16845	copytexturesubimage1d: PFNGLCOPYTEXTURESUBIMAGE1DPROC,
16846	copytexturesubimage2d: PFNGLCOPYTEXTURESUBIMAGE2DPROC,
16847	copytexturesubimage3d: PFNGLCOPYTEXTURESUBIMAGE3DPROC,
16848	textureparameterf: PFNGLTEXTUREPARAMETERFPROC,
16849	textureparameterfv: PFNGLTEXTUREPARAMETERFVPROC,
16850	textureparameteri: PFNGLTEXTUREPARAMETERIPROC,
16851	textureparameteriiv: PFNGLTEXTUREPARAMETERIIVPROC,
16852	textureparameteriuiv: PFNGLTEXTUREPARAMETERIUIVPROC,
16853	textureparameteriv: PFNGLTEXTUREPARAMETERIVPROC,
16854	generatetexturemipmap: PFNGLGENERATETEXTUREMIPMAPPROC,
16855	bindtextureunit: PFNGLBINDTEXTUREUNITPROC,
16856	gettextureimage: PFNGLGETTEXTUREIMAGEPROC,
16857	getcompressedtextureimage: PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC,
16858	gettexturelevelparameterfv: PFNGLGETTEXTURELEVELPARAMETERFVPROC,
16859	gettexturelevelparameteriv: PFNGLGETTEXTURELEVELPARAMETERIVPROC,
16860	gettextureparameterfv: PFNGLGETTEXTUREPARAMETERFVPROC,
16861	gettextureparameteriiv: PFNGLGETTEXTUREPARAMETERIIVPROC,
16862	gettextureparameteriuiv: PFNGLGETTEXTUREPARAMETERIUIVPROC,
16863	gettextureparameteriv: PFNGLGETTEXTUREPARAMETERIVPROC,
16864	createvertexarrays: PFNGLCREATEVERTEXARRAYSPROC,
16865	disablevertexarrayattrib: PFNGLDISABLEVERTEXARRAYATTRIBPROC,
16866	enablevertexarrayattrib: PFNGLENABLEVERTEXARRAYATTRIBPROC,
16867	vertexarrayelementbuffer: PFNGLVERTEXARRAYELEMENTBUFFERPROC,
16868	vertexarrayvertexbuffer: PFNGLVERTEXARRAYVERTEXBUFFERPROC,
16869	vertexarrayvertexbuffers: PFNGLVERTEXARRAYVERTEXBUFFERSPROC,
16870	vertexarrayattribbinding: PFNGLVERTEXARRAYATTRIBBINDINGPROC,
16871	vertexarrayattribformat: PFNGLVERTEXARRAYATTRIBFORMATPROC,
16872	vertexarrayattribiformat: PFNGLVERTEXARRAYATTRIBIFORMATPROC,
16873	vertexarrayattriblformat: PFNGLVERTEXARRAYATTRIBLFORMATPROC,
16874	vertexarraybindingdivisor: PFNGLVERTEXARRAYBINDINGDIVISORPROC,
16875	getvertexarrayiv: PFNGLGETVERTEXARRAYIVPROC,
16876	getvertexarrayindexediv: PFNGLGETVERTEXARRAYINDEXEDIVPROC,
16877	getvertexarrayindexed64iv: PFNGLGETVERTEXARRAYINDEXED64IVPROC,
16878	createsamplers: PFNGLCREATESAMPLERSPROC,
16879	createprogrampipelines: PFNGLCREATEPROGRAMPIPELINESPROC,
16880	createqueries: PFNGLCREATEQUERIESPROC,
16881	getquerybufferobjecti64v: PFNGLGETQUERYBUFFEROBJECTI64VPROC,
16882	getquerybufferobjectiv: PFNGLGETQUERYBUFFEROBJECTIVPROC,
16883	getquerybufferobjectui64v: PFNGLGETQUERYBUFFEROBJECTUI64VPROC,
16884	getquerybufferobjectuiv: PFNGLGETQUERYBUFFEROBJECTUIVPROC,
16885	memorybarrierbyregion: PFNGLMEMORYBARRIERBYREGIONPROC,
16886	gettexturesubimage: PFNGLGETTEXTURESUBIMAGEPROC,
16887	getcompressedtexturesubimage: PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC,
16888	getgraphicsresetstatus: PFNGLGETGRAPHICSRESETSTATUSPROC,
16889	getncompressedteximage: PFNGLGETNCOMPRESSEDTEXIMAGEPROC,
16890	getnteximage: PFNGLGETNTEXIMAGEPROC,
16891	getnuniformdv: PFNGLGETNUNIFORMDVPROC,
16892	getnuniformfv: PFNGLGETNUNIFORMFVPROC,
16893	getnuniformiv: PFNGLGETNUNIFORMIVPROC,
16894	getnuniformuiv: PFNGLGETNUNIFORMUIVPROC,
16895	readnpixels: PFNGLREADNPIXELSPROC,
16896	getnmapdv: PFNGLGETNMAPDVPROC,
16897	getnmapfv: PFNGLGETNMAPFVPROC,
16898	getnmapiv: PFNGLGETNMAPIVPROC,
16899	getnpixelmapfv: PFNGLGETNPIXELMAPFVPROC,
16900	getnpixelmapuiv: PFNGLGETNPIXELMAPUIVPROC,
16901	getnpixelmapusv: PFNGLGETNPIXELMAPUSVPROC,
16902	getnpolygonstipple: PFNGLGETNPOLYGONSTIPPLEPROC,
16903	getncolortable: PFNGLGETNCOLORTABLEPROC,
16904	getnconvolutionfilter: PFNGLGETNCONVOLUTIONFILTERPROC,
16905	getnseparablefilter: PFNGLGETNSEPARABLEFILTERPROC,
16906	getnhistogram: PFNGLGETNHISTOGRAMPROC,
16907	getnminmax: PFNGLGETNMINMAXPROC,
16908	texturebarrier: PFNGLTEXTUREBARRIERPROC,
16909}
16910
16911impl GL_4_5 for Version45 {
16912	#[inline(always)]
16913	fn glGetError(&self) -> GLenum {
16914		(self.geterror)()
16915	}
16916	#[inline(always)]
16917	fn glClipControl(&self, origin: GLenum, depth: GLenum) -> Result<()> {
16918		let ret = process_catch("glClipControl", catch_unwind(||(self.clipcontrol)(origin, depth)));
16919		#[cfg(feature = "diagnose")]
16920		if let Ok(ret) = ret {
16921			return to_result("glClipControl", ret, self.glGetError());
16922		} else {
16923			return ret
16924		}
16925		#[cfg(not(feature = "diagnose"))]
16926		return ret;
16927	}
16928	#[inline(always)]
16929	fn glCreateTransformFeedbacks(&self, n: GLsizei, ids: *mut GLuint) -> Result<()> {
16930		let ret = process_catch("glCreateTransformFeedbacks", catch_unwind(||(self.createtransformfeedbacks)(n, ids)));
16931		#[cfg(feature = "diagnose")]
16932		if let Ok(ret) = ret {
16933			return to_result("glCreateTransformFeedbacks", ret, self.glGetError());
16934		} else {
16935			return ret
16936		}
16937		#[cfg(not(feature = "diagnose"))]
16938		return ret;
16939	}
16940	#[inline(always)]
16941	fn glTransformFeedbackBufferBase(&self, xfb: GLuint, index: GLuint, buffer: GLuint) -> Result<()> {
16942		let ret = process_catch("glTransformFeedbackBufferBase", catch_unwind(||(self.transformfeedbackbufferbase)(xfb, index, buffer)));
16943		#[cfg(feature = "diagnose")]
16944		if let Ok(ret) = ret {
16945			return to_result("glTransformFeedbackBufferBase", ret, self.glGetError());
16946		} else {
16947			return ret
16948		}
16949		#[cfg(not(feature = "diagnose"))]
16950		return ret;
16951	}
16952	#[inline(always)]
16953	fn glTransformFeedbackBufferRange(&self, xfb: GLuint, index: GLuint, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()> {
16954		let ret = process_catch("glTransformFeedbackBufferRange", catch_unwind(||(self.transformfeedbackbufferrange)(xfb, index, buffer, offset, size)));
16955		#[cfg(feature = "diagnose")]
16956		if let Ok(ret) = ret {
16957			return to_result("glTransformFeedbackBufferRange", ret, self.glGetError());
16958		} else {
16959			return ret
16960		}
16961		#[cfg(not(feature = "diagnose"))]
16962		return ret;
16963	}
16964	#[inline(always)]
16965	fn glGetTransformFeedbackiv(&self, xfb: GLuint, pname: GLenum, param: *mut GLint) -> Result<()> {
16966		let ret = process_catch("glGetTransformFeedbackiv", catch_unwind(||(self.gettransformfeedbackiv)(xfb, pname, param)));
16967		#[cfg(feature = "diagnose")]
16968		if let Ok(ret) = ret {
16969			return to_result("glGetTransformFeedbackiv", ret, self.glGetError());
16970		} else {
16971			return ret
16972		}
16973		#[cfg(not(feature = "diagnose"))]
16974		return ret;
16975	}
16976	#[inline(always)]
16977	fn glGetTransformFeedbacki_v(&self, xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint) -> Result<()> {
16978		let ret = process_catch("glGetTransformFeedbacki_v", catch_unwind(||(self.gettransformfeedbacki_v)(xfb, pname, index, param)));
16979		#[cfg(feature = "diagnose")]
16980		if let Ok(ret) = ret {
16981			return to_result("glGetTransformFeedbacki_v", ret, self.glGetError());
16982		} else {
16983			return ret
16984		}
16985		#[cfg(not(feature = "diagnose"))]
16986		return ret;
16987	}
16988	#[inline(always)]
16989	fn glGetTransformFeedbacki64_v(&self, xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint64) -> Result<()> {
16990		let ret = process_catch("glGetTransformFeedbacki64_v", catch_unwind(||(self.gettransformfeedbacki64_v)(xfb, pname, index, param)));
16991		#[cfg(feature = "diagnose")]
16992		if let Ok(ret) = ret {
16993			return to_result("glGetTransformFeedbacki64_v", ret, self.glGetError());
16994		} else {
16995			return ret
16996		}
16997		#[cfg(not(feature = "diagnose"))]
16998		return ret;
16999	}
17000	#[inline(always)]
17001	fn glCreateBuffers(&self, n: GLsizei, buffers: *mut GLuint) -> Result<()> {
17002		let ret = process_catch("glCreateBuffers", catch_unwind(||(self.createbuffers)(n, buffers)));
17003		#[cfg(feature = "diagnose")]
17004		if let Ok(ret) = ret {
17005			return to_result("glCreateBuffers", ret, self.glGetError());
17006		} else {
17007			return ret
17008		}
17009		#[cfg(not(feature = "diagnose"))]
17010		return ret;
17011	}
17012	#[inline(always)]
17013	fn glNamedBufferStorage(&self, buffer: GLuint, size: GLsizeiptr, data: *const c_void, flags: GLbitfield) -> Result<()> {
17014		let ret = process_catch("glNamedBufferStorage", catch_unwind(||(self.namedbufferstorage)(buffer, size, data, flags)));
17015		#[cfg(feature = "diagnose")]
17016		if let Ok(ret) = ret {
17017			return to_result("glNamedBufferStorage", ret, self.glGetError());
17018		} else {
17019			return ret
17020		}
17021		#[cfg(not(feature = "diagnose"))]
17022		return ret;
17023	}
17024	#[inline(always)]
17025	fn glNamedBufferData(&self, buffer: GLuint, size: GLsizeiptr, data: *const c_void, usage: GLenum) -> Result<()> {
17026		let ret = process_catch("glNamedBufferData", catch_unwind(||(self.namedbufferdata)(buffer, size, data, usage)));
17027		#[cfg(feature = "diagnose")]
17028		if let Ok(ret) = ret {
17029			return to_result("glNamedBufferData", ret, self.glGetError());
17030		} else {
17031			return ret
17032		}
17033		#[cfg(not(feature = "diagnose"))]
17034		return ret;
17035	}
17036	#[inline(always)]
17037	fn glNamedBufferSubData(&self, buffer: GLuint, offset: GLintptr, size: GLsizeiptr, data: *const c_void) -> Result<()> {
17038		let ret = process_catch("glNamedBufferSubData", catch_unwind(||(self.namedbuffersubdata)(buffer, offset, size, data)));
17039		#[cfg(feature = "diagnose")]
17040		if let Ok(ret) = ret {
17041			return to_result("glNamedBufferSubData", ret, self.glGetError());
17042		} else {
17043			return ret
17044		}
17045		#[cfg(not(feature = "diagnose"))]
17046		return ret;
17047	}
17048	#[inline(always)]
17049	fn glCopyNamedBufferSubData(&self, readBuffer: GLuint, writeBuffer: GLuint, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) -> Result<()> {
17050		let ret = process_catch("glCopyNamedBufferSubData", catch_unwind(||(self.copynamedbuffersubdata)(readBuffer, writeBuffer, readOffset, writeOffset, size)));
17051		#[cfg(feature = "diagnose")]
17052		if let Ok(ret) = ret {
17053			return to_result("glCopyNamedBufferSubData", ret, self.glGetError());
17054		} else {
17055			return ret
17056		}
17057		#[cfg(not(feature = "diagnose"))]
17058		return ret;
17059	}
17060	#[inline(always)]
17061	fn glClearNamedBufferData(&self, buffer: GLuint, internalformat: GLenum, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
17062		let ret = process_catch("glClearNamedBufferData", catch_unwind(||(self.clearnamedbufferdata)(buffer, internalformat, format, type_, data)));
17063		#[cfg(feature = "diagnose")]
17064		if let Ok(ret) = ret {
17065			return to_result("glClearNamedBufferData", ret, self.glGetError());
17066		} else {
17067			return ret
17068		}
17069		#[cfg(not(feature = "diagnose"))]
17070		return ret;
17071	}
17072	#[inline(always)]
17073	fn glClearNamedBufferSubData(&self, buffer: GLuint, internalformat: GLenum, offset: GLintptr, size: GLsizeiptr, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
17074		let ret = process_catch("glClearNamedBufferSubData", catch_unwind(||(self.clearnamedbuffersubdata)(buffer, internalformat, offset, size, format, type_, data)));
17075		#[cfg(feature = "diagnose")]
17076		if let Ok(ret) = ret {
17077			return to_result("glClearNamedBufferSubData", ret, self.glGetError());
17078		} else {
17079			return ret
17080		}
17081		#[cfg(not(feature = "diagnose"))]
17082		return ret;
17083	}
17084	#[inline(always)]
17085	fn glMapNamedBuffer(&self, buffer: GLuint, access: GLenum) -> Result<*mut c_void> {
17086		let ret = process_catch("glMapNamedBuffer", catch_unwind(||(self.mapnamedbuffer)(buffer, access)));
17087		#[cfg(feature = "diagnose")]
17088		if let Ok(ret) = ret {
17089			return to_result("glMapNamedBuffer", ret, self.glGetError());
17090		} else {
17091			return ret
17092		}
17093		#[cfg(not(feature = "diagnose"))]
17094		return ret;
17095	}
17096	#[inline(always)]
17097	fn glMapNamedBufferRange(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr, access: GLbitfield) -> Result<*mut c_void> {
17098		let ret = process_catch("glMapNamedBufferRange", catch_unwind(||(self.mapnamedbufferrange)(buffer, offset, length, access)));
17099		#[cfg(feature = "diagnose")]
17100		if let Ok(ret) = ret {
17101			return to_result("glMapNamedBufferRange", ret, self.glGetError());
17102		} else {
17103			return ret
17104		}
17105		#[cfg(not(feature = "diagnose"))]
17106		return ret;
17107	}
17108	#[inline(always)]
17109	fn glUnmapNamedBuffer(&self, buffer: GLuint) -> Result<GLboolean> {
17110		let ret = process_catch("glUnmapNamedBuffer", catch_unwind(||(self.unmapnamedbuffer)(buffer)));
17111		#[cfg(feature = "diagnose")]
17112		if let Ok(ret) = ret {
17113			return to_result("glUnmapNamedBuffer", ret, self.glGetError());
17114		} else {
17115			return ret
17116		}
17117		#[cfg(not(feature = "diagnose"))]
17118		return ret;
17119	}
17120	#[inline(always)]
17121	fn glFlushMappedNamedBufferRange(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr) -> Result<()> {
17122		let ret = process_catch("glFlushMappedNamedBufferRange", catch_unwind(||(self.flushmappednamedbufferrange)(buffer, offset, length)));
17123		#[cfg(feature = "diagnose")]
17124		if let Ok(ret) = ret {
17125			return to_result("glFlushMappedNamedBufferRange", ret, self.glGetError());
17126		} else {
17127			return ret
17128		}
17129		#[cfg(not(feature = "diagnose"))]
17130		return ret;
17131	}
17132	#[inline(always)]
17133	fn glGetNamedBufferParameteriv(&self, buffer: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
17134		let ret = process_catch("glGetNamedBufferParameteriv", catch_unwind(||(self.getnamedbufferparameteriv)(buffer, pname, params)));
17135		#[cfg(feature = "diagnose")]
17136		if let Ok(ret) = ret {
17137			return to_result("glGetNamedBufferParameteriv", ret, self.glGetError());
17138		} else {
17139			return ret
17140		}
17141		#[cfg(not(feature = "diagnose"))]
17142		return ret;
17143	}
17144	#[inline(always)]
17145	fn glGetNamedBufferParameteri64v(&self, buffer: GLuint, pname: GLenum, params: *mut GLint64) -> Result<()> {
17146		let ret = process_catch("glGetNamedBufferParameteri64v", catch_unwind(||(self.getnamedbufferparameteri64v)(buffer, pname, params)));
17147		#[cfg(feature = "diagnose")]
17148		if let Ok(ret) = ret {
17149			return to_result("glGetNamedBufferParameteri64v", ret, self.glGetError());
17150		} else {
17151			return ret
17152		}
17153		#[cfg(not(feature = "diagnose"))]
17154		return ret;
17155	}
17156	#[inline(always)]
17157	fn glGetNamedBufferPointerv(&self, buffer: GLuint, pname: GLenum, params: *mut *mut c_void) -> Result<()> {
17158		let ret = process_catch("glGetNamedBufferPointerv", catch_unwind(||(self.getnamedbufferpointerv)(buffer, pname, params)));
17159		#[cfg(feature = "diagnose")]
17160		if let Ok(ret) = ret {
17161			return to_result("glGetNamedBufferPointerv", ret, self.glGetError());
17162		} else {
17163			return ret
17164		}
17165		#[cfg(not(feature = "diagnose"))]
17166		return ret;
17167	}
17168	#[inline(always)]
17169	fn glGetNamedBufferSubData(&self, buffer: GLuint, offset: GLintptr, size: GLsizeiptr, data: *mut c_void) -> Result<()> {
17170		let ret = process_catch("glGetNamedBufferSubData", catch_unwind(||(self.getnamedbuffersubdata)(buffer, offset, size, data)));
17171		#[cfg(feature = "diagnose")]
17172		if let Ok(ret) = ret {
17173			return to_result("glGetNamedBufferSubData", ret, self.glGetError());
17174		} else {
17175			return ret
17176		}
17177		#[cfg(not(feature = "diagnose"))]
17178		return ret;
17179	}
17180	#[inline(always)]
17181	fn glCreateFramebuffers(&self, n: GLsizei, framebuffers: *mut GLuint) -> Result<()> {
17182		let ret = process_catch("glCreateFramebuffers", catch_unwind(||(self.createframebuffers)(n, framebuffers)));
17183		#[cfg(feature = "diagnose")]
17184		if let Ok(ret) = ret {
17185			return to_result("glCreateFramebuffers", ret, self.glGetError());
17186		} else {
17187			return ret
17188		}
17189		#[cfg(not(feature = "diagnose"))]
17190		return ret;
17191	}
17192	#[inline(always)]
17193	fn glNamedFramebufferRenderbuffer(&self, framebuffer: GLuint, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: GLuint) -> Result<()> {
17194		let ret = process_catch("glNamedFramebufferRenderbuffer", catch_unwind(||(self.namedframebufferrenderbuffer)(framebuffer, attachment, renderbuffertarget, renderbuffer)));
17195		#[cfg(feature = "diagnose")]
17196		if let Ok(ret) = ret {
17197			return to_result("glNamedFramebufferRenderbuffer", ret, self.glGetError());
17198		} else {
17199			return ret
17200		}
17201		#[cfg(not(feature = "diagnose"))]
17202		return ret;
17203	}
17204	#[inline(always)]
17205	fn glNamedFramebufferParameteri(&self, framebuffer: GLuint, pname: GLenum, param: GLint) -> Result<()> {
17206		let ret = process_catch("glNamedFramebufferParameteri", catch_unwind(||(self.namedframebufferparameteri)(framebuffer, pname, param)));
17207		#[cfg(feature = "diagnose")]
17208		if let Ok(ret) = ret {
17209			return to_result("glNamedFramebufferParameteri", ret, self.glGetError());
17210		} else {
17211			return ret
17212		}
17213		#[cfg(not(feature = "diagnose"))]
17214		return ret;
17215	}
17216	#[inline(always)]
17217	fn glNamedFramebufferTexture(&self, framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint) -> Result<()> {
17218		let ret = process_catch("glNamedFramebufferTexture", catch_unwind(||(self.namedframebuffertexture)(framebuffer, attachment, texture, level)));
17219		#[cfg(feature = "diagnose")]
17220		if let Ok(ret) = ret {
17221			return to_result("glNamedFramebufferTexture", ret, self.glGetError());
17222		} else {
17223			return ret
17224		}
17225		#[cfg(not(feature = "diagnose"))]
17226		return ret;
17227	}
17228	#[inline(always)]
17229	fn glNamedFramebufferTextureLayer(&self, framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint, layer: GLint) -> Result<()> {
17230		let ret = process_catch("glNamedFramebufferTextureLayer", catch_unwind(||(self.namedframebuffertexturelayer)(framebuffer, attachment, texture, level, layer)));
17231		#[cfg(feature = "diagnose")]
17232		if let Ok(ret) = ret {
17233			return to_result("glNamedFramebufferTextureLayer", ret, self.glGetError());
17234		} else {
17235			return ret
17236		}
17237		#[cfg(not(feature = "diagnose"))]
17238		return ret;
17239	}
17240	#[inline(always)]
17241	fn glNamedFramebufferDrawBuffer(&self, framebuffer: GLuint, buf: GLenum) -> Result<()> {
17242		let ret = process_catch("glNamedFramebufferDrawBuffer", catch_unwind(||(self.namedframebufferdrawbuffer)(framebuffer, buf)));
17243		#[cfg(feature = "diagnose")]
17244		if let Ok(ret) = ret {
17245			return to_result("glNamedFramebufferDrawBuffer", ret, self.glGetError());
17246		} else {
17247			return ret
17248		}
17249		#[cfg(not(feature = "diagnose"))]
17250		return ret;
17251	}
17252	#[inline(always)]
17253	fn glNamedFramebufferDrawBuffers(&self, framebuffer: GLuint, n: GLsizei, bufs: *const GLenum) -> Result<()> {
17254		let ret = process_catch("glNamedFramebufferDrawBuffers", catch_unwind(||(self.namedframebufferdrawbuffers)(framebuffer, n, bufs)));
17255		#[cfg(feature = "diagnose")]
17256		if let Ok(ret) = ret {
17257			return to_result("glNamedFramebufferDrawBuffers", ret, self.glGetError());
17258		} else {
17259			return ret
17260		}
17261		#[cfg(not(feature = "diagnose"))]
17262		return ret;
17263	}
17264	#[inline(always)]
17265	fn glNamedFramebufferReadBuffer(&self, framebuffer: GLuint, src: GLenum) -> Result<()> {
17266		let ret = process_catch("glNamedFramebufferReadBuffer", catch_unwind(||(self.namedframebufferreadbuffer)(framebuffer, src)));
17267		#[cfg(feature = "diagnose")]
17268		if let Ok(ret) = ret {
17269			return to_result("glNamedFramebufferReadBuffer", ret, self.glGetError());
17270		} else {
17271			return ret
17272		}
17273		#[cfg(not(feature = "diagnose"))]
17274		return ret;
17275	}
17276	#[inline(always)]
17277	fn glInvalidateNamedFramebufferData(&self, framebuffer: GLuint, numAttachments: GLsizei, attachments: *const GLenum) -> Result<()> {
17278		let ret = process_catch("glInvalidateNamedFramebufferData", catch_unwind(||(self.invalidatenamedframebufferdata)(framebuffer, numAttachments, attachments)));
17279		#[cfg(feature = "diagnose")]
17280		if let Ok(ret) = ret {
17281			return to_result("glInvalidateNamedFramebufferData", ret, self.glGetError());
17282		} else {
17283			return ret
17284		}
17285		#[cfg(not(feature = "diagnose"))]
17286		return ret;
17287	}
17288	#[inline(always)]
17289	fn glInvalidateNamedFramebufferSubData(&self, framebuffer: GLuint, numAttachments: GLsizei, attachments: *const GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
17290		let ret = process_catch("glInvalidateNamedFramebufferSubData", catch_unwind(||(self.invalidatenamedframebuffersubdata)(framebuffer, numAttachments, attachments, x, y, width, height)));
17291		#[cfg(feature = "diagnose")]
17292		if let Ok(ret) = ret {
17293			return to_result("glInvalidateNamedFramebufferSubData", ret, self.glGetError());
17294		} else {
17295			return ret
17296		}
17297		#[cfg(not(feature = "diagnose"))]
17298		return ret;
17299	}
17300	#[inline(always)]
17301	fn glClearNamedFramebufferiv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLint) -> Result<()> {
17302		let ret = process_catch("glClearNamedFramebufferiv", catch_unwind(||(self.clearnamedframebufferiv)(framebuffer, buffer, drawbuffer, value)));
17303		#[cfg(feature = "diagnose")]
17304		if let Ok(ret) = ret {
17305			return to_result("glClearNamedFramebufferiv", ret, self.glGetError());
17306		} else {
17307			return ret
17308		}
17309		#[cfg(not(feature = "diagnose"))]
17310		return ret;
17311	}
17312	#[inline(always)]
17313	fn glClearNamedFramebufferuiv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLuint) -> Result<()> {
17314		let ret = process_catch("glClearNamedFramebufferuiv", catch_unwind(||(self.clearnamedframebufferuiv)(framebuffer, buffer, drawbuffer, value)));
17315		#[cfg(feature = "diagnose")]
17316		if let Ok(ret) = ret {
17317			return to_result("glClearNamedFramebufferuiv", ret, self.glGetError());
17318		} else {
17319			return ret
17320		}
17321		#[cfg(not(feature = "diagnose"))]
17322		return ret;
17323	}
17324	#[inline(always)]
17325	fn glClearNamedFramebufferfv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLfloat) -> Result<()> {
17326		let ret = process_catch("glClearNamedFramebufferfv", catch_unwind(||(self.clearnamedframebufferfv)(framebuffer, buffer, drawbuffer, value)));
17327		#[cfg(feature = "diagnose")]
17328		if let Ok(ret) = ret {
17329			return to_result("glClearNamedFramebufferfv", ret, self.glGetError());
17330		} else {
17331			return ret
17332		}
17333		#[cfg(not(feature = "diagnose"))]
17334		return ret;
17335	}
17336	#[inline(always)]
17337	fn glClearNamedFramebufferfi(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint) -> Result<()> {
17338		let ret = process_catch("glClearNamedFramebufferfi", catch_unwind(||(self.clearnamedframebufferfi)(framebuffer, buffer, drawbuffer, depth, stencil)));
17339		#[cfg(feature = "diagnose")]
17340		if let Ok(ret) = ret {
17341			return to_result("glClearNamedFramebufferfi", ret, self.glGetError());
17342		} else {
17343			return ret
17344		}
17345		#[cfg(not(feature = "diagnose"))]
17346		return ret;
17347	}
17348	#[inline(always)]
17349	fn glBlitNamedFramebuffer(&self, readFramebuffer: GLuint, drawFramebuffer: GLuint, srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum) -> Result<()> {
17350		let ret = process_catch("glBlitNamedFramebuffer", catch_unwind(||(self.blitnamedframebuffer)(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)));
17351		#[cfg(feature = "diagnose")]
17352		if let Ok(ret) = ret {
17353			return to_result("glBlitNamedFramebuffer", ret, self.glGetError());
17354		} else {
17355			return ret
17356		}
17357		#[cfg(not(feature = "diagnose"))]
17358		return ret;
17359	}
17360	#[inline(always)]
17361	fn glCheckNamedFramebufferStatus(&self, framebuffer: GLuint, target: GLenum) -> Result<GLenum> {
17362		let ret = process_catch("glCheckNamedFramebufferStatus", catch_unwind(||(self.checknamedframebufferstatus)(framebuffer, target)));
17363		#[cfg(feature = "diagnose")]
17364		if let Ok(ret) = ret {
17365			return to_result("glCheckNamedFramebufferStatus", ret, self.glGetError());
17366		} else {
17367			return ret
17368		}
17369		#[cfg(not(feature = "diagnose"))]
17370		return ret;
17371	}
17372	#[inline(always)]
17373	fn glGetNamedFramebufferParameteriv(&self, framebuffer: GLuint, pname: GLenum, param: *mut GLint) -> Result<()> {
17374		let ret = process_catch("glGetNamedFramebufferParameteriv", catch_unwind(||(self.getnamedframebufferparameteriv)(framebuffer, pname, param)));
17375		#[cfg(feature = "diagnose")]
17376		if let Ok(ret) = ret {
17377			return to_result("glGetNamedFramebufferParameteriv", ret, self.glGetError());
17378		} else {
17379			return ret
17380		}
17381		#[cfg(not(feature = "diagnose"))]
17382		return ret;
17383	}
17384	#[inline(always)]
17385	fn glGetNamedFramebufferAttachmentParameteriv(&self, framebuffer: GLuint, attachment: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
17386		let ret = process_catch("glGetNamedFramebufferAttachmentParameteriv", catch_unwind(||(self.getnamedframebufferattachmentparameteriv)(framebuffer, attachment, pname, params)));
17387		#[cfg(feature = "diagnose")]
17388		if let Ok(ret) = ret {
17389			return to_result("glGetNamedFramebufferAttachmentParameteriv", ret, self.glGetError());
17390		} else {
17391			return ret
17392		}
17393		#[cfg(not(feature = "diagnose"))]
17394		return ret;
17395	}
17396	#[inline(always)]
17397	fn glCreateRenderbuffers(&self, n: GLsizei, renderbuffers: *mut GLuint) -> Result<()> {
17398		let ret = process_catch("glCreateRenderbuffers", catch_unwind(||(self.createrenderbuffers)(n, renderbuffers)));
17399		#[cfg(feature = "diagnose")]
17400		if let Ok(ret) = ret {
17401			return to_result("glCreateRenderbuffers", ret, self.glGetError());
17402		} else {
17403			return ret
17404		}
17405		#[cfg(not(feature = "diagnose"))]
17406		return ret;
17407	}
17408	#[inline(always)]
17409	fn glNamedRenderbufferStorage(&self, renderbuffer: GLuint, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
17410		let ret = process_catch("glNamedRenderbufferStorage", catch_unwind(||(self.namedrenderbufferstorage)(renderbuffer, internalformat, width, height)));
17411		#[cfg(feature = "diagnose")]
17412		if let Ok(ret) = ret {
17413			return to_result("glNamedRenderbufferStorage", ret, self.glGetError());
17414		} else {
17415			return ret
17416		}
17417		#[cfg(not(feature = "diagnose"))]
17418		return ret;
17419	}
17420	#[inline(always)]
17421	fn glNamedRenderbufferStorageMultisample(&self, renderbuffer: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
17422		let ret = process_catch("glNamedRenderbufferStorageMultisample", catch_unwind(||(self.namedrenderbufferstoragemultisample)(renderbuffer, samples, internalformat, width, height)));
17423		#[cfg(feature = "diagnose")]
17424		if let Ok(ret) = ret {
17425			return to_result("glNamedRenderbufferStorageMultisample", ret, self.glGetError());
17426		} else {
17427			return ret
17428		}
17429		#[cfg(not(feature = "diagnose"))]
17430		return ret;
17431	}
17432	#[inline(always)]
17433	fn glGetNamedRenderbufferParameteriv(&self, renderbuffer: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
17434		let ret = process_catch("glGetNamedRenderbufferParameteriv", catch_unwind(||(self.getnamedrenderbufferparameteriv)(renderbuffer, pname, params)));
17435		#[cfg(feature = "diagnose")]
17436		if let Ok(ret) = ret {
17437			return to_result("glGetNamedRenderbufferParameteriv", ret, self.glGetError());
17438		} else {
17439			return ret
17440		}
17441		#[cfg(not(feature = "diagnose"))]
17442		return ret;
17443	}
17444	#[inline(always)]
17445	fn glCreateTextures(&self, target: GLenum, n: GLsizei, textures: *mut GLuint) -> Result<()> {
17446		let ret = process_catch("glCreateTextures", catch_unwind(||(self.createtextures)(target, n, textures)));
17447		#[cfg(feature = "diagnose")]
17448		if let Ok(ret) = ret {
17449			return to_result("glCreateTextures", ret, self.glGetError());
17450		} else {
17451			return ret
17452		}
17453		#[cfg(not(feature = "diagnose"))]
17454		return ret;
17455	}
17456	#[inline(always)]
17457	fn glTextureBuffer(&self, texture: GLuint, internalformat: GLenum, buffer: GLuint) -> Result<()> {
17458		let ret = process_catch("glTextureBuffer", catch_unwind(||(self.texturebuffer)(texture, internalformat, buffer)));
17459		#[cfg(feature = "diagnose")]
17460		if let Ok(ret) = ret {
17461			return to_result("glTextureBuffer", ret, self.glGetError());
17462		} else {
17463			return ret
17464		}
17465		#[cfg(not(feature = "diagnose"))]
17466		return ret;
17467	}
17468	#[inline(always)]
17469	fn glTextureBufferRange(&self, texture: GLuint, internalformat: GLenum, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()> {
17470		let ret = process_catch("glTextureBufferRange", catch_unwind(||(self.texturebufferrange)(texture, internalformat, buffer, offset, size)));
17471		#[cfg(feature = "diagnose")]
17472		if let Ok(ret) = ret {
17473			return to_result("glTextureBufferRange", ret, self.glGetError());
17474		} else {
17475			return ret
17476		}
17477		#[cfg(not(feature = "diagnose"))]
17478		return ret;
17479	}
17480	#[inline(always)]
17481	fn glTextureStorage1D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei) -> Result<()> {
17482		let ret = process_catch("glTextureStorage1D", catch_unwind(||(self.texturestorage1d)(texture, levels, internalformat, width)));
17483		#[cfg(feature = "diagnose")]
17484		if let Ok(ret) = ret {
17485			return to_result("glTextureStorage1D", ret, self.glGetError());
17486		} else {
17487			return ret
17488		}
17489		#[cfg(not(feature = "diagnose"))]
17490		return ret;
17491	}
17492	#[inline(always)]
17493	fn glTextureStorage2D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
17494		let ret = process_catch("glTextureStorage2D", catch_unwind(||(self.texturestorage2d)(texture, levels, internalformat, width, height)));
17495		#[cfg(feature = "diagnose")]
17496		if let Ok(ret) = ret {
17497			return to_result("glTextureStorage2D", ret, self.glGetError());
17498		} else {
17499			return ret
17500		}
17501		#[cfg(not(feature = "diagnose"))]
17502		return ret;
17503	}
17504	#[inline(always)]
17505	fn glTextureStorage3D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()> {
17506		let ret = process_catch("glTextureStorage3D", catch_unwind(||(self.texturestorage3d)(texture, levels, internalformat, width, height, depth)));
17507		#[cfg(feature = "diagnose")]
17508		if let Ok(ret) = ret {
17509			return to_result("glTextureStorage3D", ret, self.glGetError());
17510		} else {
17511			return ret
17512		}
17513		#[cfg(not(feature = "diagnose"))]
17514		return ret;
17515	}
17516	#[inline(always)]
17517	fn glTextureStorage2DMultisample(&self, texture: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
17518		let ret = process_catch("glTextureStorage2DMultisample", catch_unwind(||(self.texturestorage2dmultisample)(texture, samples, internalformat, width, height, fixedsamplelocations)));
17519		#[cfg(feature = "diagnose")]
17520		if let Ok(ret) = ret {
17521			return to_result("glTextureStorage2DMultisample", ret, self.glGetError());
17522		} else {
17523			return ret
17524		}
17525		#[cfg(not(feature = "diagnose"))]
17526		return ret;
17527	}
17528	#[inline(always)]
17529	fn glTextureStorage3DMultisample(&self, texture: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
17530		let ret = process_catch("glTextureStorage3DMultisample", catch_unwind(||(self.texturestorage3dmultisample)(texture, samples, internalformat, width, height, depth, fixedsamplelocations)));
17531		#[cfg(feature = "diagnose")]
17532		if let Ok(ret) = ret {
17533			return to_result("glTextureStorage3DMultisample", ret, self.glGetError());
17534		} else {
17535			return ret
17536		}
17537		#[cfg(not(feature = "diagnose"))]
17538		return ret;
17539	}
17540	#[inline(always)]
17541	fn glTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
17542		let ret = process_catch("glTextureSubImage1D", catch_unwind(||(self.texturesubimage1d)(texture, level, xoffset, width, format, type_, pixels)));
17543		#[cfg(feature = "diagnose")]
17544		if let Ok(ret) = ret {
17545			return to_result("glTextureSubImage1D", ret, self.glGetError());
17546		} else {
17547			return ret
17548		}
17549		#[cfg(not(feature = "diagnose"))]
17550		return ret;
17551	}
17552	#[inline(always)]
17553	fn glTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
17554		let ret = process_catch("glTextureSubImage2D", catch_unwind(||(self.texturesubimage2d)(texture, level, xoffset, yoffset, width, height, format, type_, pixels)));
17555		#[cfg(feature = "diagnose")]
17556		if let Ok(ret) = ret {
17557			return to_result("glTextureSubImage2D", ret, self.glGetError());
17558		} else {
17559			return ret
17560		}
17561		#[cfg(not(feature = "diagnose"))]
17562		return ret;
17563	}
17564	#[inline(always)]
17565	fn glTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
17566		let ret = process_catch("glTextureSubImage3D", catch_unwind(||(self.texturesubimage3d)(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, pixels)));
17567		#[cfg(feature = "diagnose")]
17568		if let Ok(ret) = ret {
17569			return to_result("glTextureSubImage3D", ret, self.glGetError());
17570		} else {
17571			return ret
17572		}
17573		#[cfg(not(feature = "diagnose"))]
17574		return ret;
17575	}
17576	#[inline(always)]
17577	fn glCompressedTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
17578		let ret = process_catch("glCompressedTextureSubImage1D", catch_unwind(||(self.compressedtexturesubimage1d)(texture, level, xoffset, width, format, imageSize, data)));
17579		#[cfg(feature = "diagnose")]
17580		if let Ok(ret) = ret {
17581			return to_result("glCompressedTextureSubImage1D", ret, self.glGetError());
17582		} else {
17583			return ret
17584		}
17585		#[cfg(not(feature = "diagnose"))]
17586		return ret;
17587	}
17588	#[inline(always)]
17589	fn glCompressedTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
17590		let ret = process_catch("glCompressedTextureSubImage2D", catch_unwind(||(self.compressedtexturesubimage2d)(texture, level, xoffset, yoffset, width, height, format, imageSize, data)));
17591		#[cfg(feature = "diagnose")]
17592		if let Ok(ret) = ret {
17593			return to_result("glCompressedTextureSubImage2D", ret, self.glGetError());
17594		} else {
17595			return ret
17596		}
17597		#[cfg(not(feature = "diagnose"))]
17598		return ret;
17599	}
17600	#[inline(always)]
17601	fn glCompressedTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
17602		let ret = process_catch("glCompressedTextureSubImage3D", catch_unwind(||(self.compressedtexturesubimage3d)(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)));
17603		#[cfg(feature = "diagnose")]
17604		if let Ok(ret) = ret {
17605			return to_result("glCompressedTextureSubImage3D", ret, self.glGetError());
17606		} else {
17607			return ret
17608		}
17609		#[cfg(not(feature = "diagnose"))]
17610		return ret;
17611	}
17612	#[inline(always)]
17613	fn glCopyTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, x: GLint, y: GLint, width: GLsizei) -> Result<()> {
17614		let ret = process_catch("glCopyTextureSubImage1D", catch_unwind(||(self.copytexturesubimage1d)(texture, level, xoffset, x, y, width)));
17615		#[cfg(feature = "diagnose")]
17616		if let Ok(ret) = ret {
17617			return to_result("glCopyTextureSubImage1D", ret, self.glGetError());
17618		} else {
17619			return ret
17620		}
17621		#[cfg(not(feature = "diagnose"))]
17622		return ret;
17623	}
17624	#[inline(always)]
17625	fn glCopyTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
17626		let ret = process_catch("glCopyTextureSubImage2D", catch_unwind(||(self.copytexturesubimage2d)(texture, level, xoffset, yoffset, x, y, width, height)));
17627		#[cfg(feature = "diagnose")]
17628		if let Ok(ret) = ret {
17629			return to_result("glCopyTextureSubImage2D", ret, self.glGetError());
17630		} else {
17631			return ret
17632		}
17633		#[cfg(not(feature = "diagnose"))]
17634		return ret;
17635	}
17636	#[inline(always)]
17637	fn glCopyTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
17638		let ret = process_catch("glCopyTextureSubImage3D", catch_unwind(||(self.copytexturesubimage3d)(texture, level, xoffset, yoffset, zoffset, x, y, width, height)));
17639		#[cfg(feature = "diagnose")]
17640		if let Ok(ret) = ret {
17641			return to_result("glCopyTextureSubImage3D", ret, self.glGetError());
17642		} else {
17643			return ret
17644		}
17645		#[cfg(not(feature = "diagnose"))]
17646		return ret;
17647	}
17648	#[inline(always)]
17649	fn glTextureParameterf(&self, texture: GLuint, pname: GLenum, param: GLfloat) -> Result<()> {
17650		let ret = process_catch("glTextureParameterf", catch_unwind(||(self.textureparameterf)(texture, pname, param)));
17651		#[cfg(feature = "diagnose")]
17652		if let Ok(ret) = ret {
17653			return to_result("glTextureParameterf", ret, self.glGetError());
17654		} else {
17655			return ret
17656		}
17657		#[cfg(not(feature = "diagnose"))]
17658		return ret;
17659	}
17660	#[inline(always)]
17661	fn glTextureParameterfv(&self, texture: GLuint, pname: GLenum, param: *const GLfloat) -> Result<()> {
17662		let ret = process_catch("glTextureParameterfv", catch_unwind(||(self.textureparameterfv)(texture, pname, param)));
17663		#[cfg(feature = "diagnose")]
17664		if let Ok(ret) = ret {
17665			return to_result("glTextureParameterfv", ret, self.glGetError());
17666		} else {
17667			return ret
17668		}
17669		#[cfg(not(feature = "diagnose"))]
17670		return ret;
17671	}
17672	#[inline(always)]
17673	fn glTextureParameteri(&self, texture: GLuint, pname: GLenum, param: GLint) -> Result<()> {
17674		let ret = process_catch("glTextureParameteri", catch_unwind(||(self.textureparameteri)(texture, pname, param)));
17675		#[cfg(feature = "diagnose")]
17676		if let Ok(ret) = ret {
17677			return to_result("glTextureParameteri", ret, self.glGetError());
17678		} else {
17679			return ret
17680		}
17681		#[cfg(not(feature = "diagnose"))]
17682		return ret;
17683	}
17684	#[inline(always)]
17685	fn glTextureParameterIiv(&self, texture: GLuint, pname: GLenum, params: *const GLint) -> Result<()> {
17686		let ret = process_catch("glTextureParameterIiv", catch_unwind(||(self.textureparameteriiv)(texture, pname, params)));
17687		#[cfg(feature = "diagnose")]
17688		if let Ok(ret) = ret {
17689			return to_result("glTextureParameterIiv", ret, self.glGetError());
17690		} else {
17691			return ret
17692		}
17693		#[cfg(not(feature = "diagnose"))]
17694		return ret;
17695	}
17696	#[inline(always)]
17697	fn glTextureParameterIuiv(&self, texture: GLuint, pname: GLenum, params: *const GLuint) -> Result<()> {
17698		let ret = process_catch("glTextureParameterIuiv", catch_unwind(||(self.textureparameteriuiv)(texture, pname, params)));
17699		#[cfg(feature = "diagnose")]
17700		if let Ok(ret) = ret {
17701			return to_result("glTextureParameterIuiv", ret, self.glGetError());
17702		} else {
17703			return ret
17704		}
17705		#[cfg(not(feature = "diagnose"))]
17706		return ret;
17707	}
17708	#[inline(always)]
17709	fn glTextureParameteriv(&self, texture: GLuint, pname: GLenum, param: *const GLint) -> Result<()> {
17710		let ret = process_catch("glTextureParameteriv", catch_unwind(||(self.textureparameteriv)(texture, pname, param)));
17711		#[cfg(feature = "diagnose")]
17712		if let Ok(ret) = ret {
17713			return to_result("glTextureParameteriv", ret, self.glGetError());
17714		} else {
17715			return ret
17716		}
17717		#[cfg(not(feature = "diagnose"))]
17718		return ret;
17719	}
17720	#[inline(always)]
17721	fn glGenerateTextureMipmap(&self, texture: GLuint) -> Result<()> {
17722		let ret = process_catch("glGenerateTextureMipmap", catch_unwind(||(self.generatetexturemipmap)(texture)));
17723		#[cfg(feature = "diagnose")]
17724		if let Ok(ret) = ret {
17725			return to_result("glGenerateTextureMipmap", ret, self.glGetError());
17726		} else {
17727			return ret
17728		}
17729		#[cfg(not(feature = "diagnose"))]
17730		return ret;
17731	}
17732	#[inline(always)]
17733	fn glBindTextureUnit(&self, unit: GLuint, texture: GLuint) -> Result<()> {
17734		let ret = process_catch("glBindTextureUnit", catch_unwind(||(self.bindtextureunit)(unit, texture)));
17735		#[cfg(feature = "diagnose")]
17736		if let Ok(ret) = ret {
17737			return to_result("glBindTextureUnit", ret, self.glGetError());
17738		} else {
17739			return ret
17740		}
17741		#[cfg(not(feature = "diagnose"))]
17742		return ret;
17743	}
17744	#[inline(always)]
17745	fn glGetTextureImage(&self, texture: GLuint, level: GLint, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
17746		let ret = process_catch("glGetTextureImage", catch_unwind(||(self.gettextureimage)(texture, level, format, type_, bufSize, pixels)));
17747		#[cfg(feature = "diagnose")]
17748		if let Ok(ret) = ret {
17749			return to_result("glGetTextureImage", ret, self.glGetError());
17750		} else {
17751			return ret
17752		}
17753		#[cfg(not(feature = "diagnose"))]
17754		return ret;
17755	}
17756	#[inline(always)]
17757	fn glGetCompressedTextureImage(&self, texture: GLuint, level: GLint, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
17758		let ret = process_catch("glGetCompressedTextureImage", catch_unwind(||(self.getcompressedtextureimage)(texture, level, bufSize, pixels)));
17759		#[cfg(feature = "diagnose")]
17760		if let Ok(ret) = ret {
17761			return to_result("glGetCompressedTextureImage", ret, self.glGetError());
17762		} else {
17763			return ret
17764		}
17765		#[cfg(not(feature = "diagnose"))]
17766		return ret;
17767	}
17768	#[inline(always)]
17769	fn glGetTextureLevelParameterfv(&self, texture: GLuint, level: GLint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
17770		let ret = process_catch("glGetTextureLevelParameterfv", catch_unwind(||(self.gettexturelevelparameterfv)(texture, level, pname, params)));
17771		#[cfg(feature = "diagnose")]
17772		if let Ok(ret) = ret {
17773			return to_result("glGetTextureLevelParameterfv", ret, self.glGetError());
17774		} else {
17775			return ret
17776		}
17777		#[cfg(not(feature = "diagnose"))]
17778		return ret;
17779	}
17780	#[inline(always)]
17781	fn glGetTextureLevelParameteriv(&self, texture: GLuint, level: GLint, pname: GLenum, params: *mut GLint) -> Result<()> {
17782		let ret = process_catch("glGetTextureLevelParameteriv", catch_unwind(||(self.gettexturelevelparameteriv)(texture, level, pname, params)));
17783		#[cfg(feature = "diagnose")]
17784		if let Ok(ret) = ret {
17785			return to_result("glGetTextureLevelParameteriv", ret, self.glGetError());
17786		} else {
17787			return ret
17788		}
17789		#[cfg(not(feature = "diagnose"))]
17790		return ret;
17791	}
17792	#[inline(always)]
17793	fn glGetTextureParameterfv(&self, texture: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
17794		let ret = process_catch("glGetTextureParameterfv", catch_unwind(||(self.gettextureparameterfv)(texture, pname, params)));
17795		#[cfg(feature = "diagnose")]
17796		if let Ok(ret) = ret {
17797			return to_result("glGetTextureParameterfv", ret, self.glGetError());
17798		} else {
17799			return ret
17800		}
17801		#[cfg(not(feature = "diagnose"))]
17802		return ret;
17803	}
17804	#[inline(always)]
17805	fn glGetTextureParameterIiv(&self, texture: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
17806		let ret = process_catch("glGetTextureParameterIiv", catch_unwind(||(self.gettextureparameteriiv)(texture, pname, params)));
17807		#[cfg(feature = "diagnose")]
17808		if let Ok(ret) = ret {
17809			return to_result("glGetTextureParameterIiv", ret, self.glGetError());
17810		} else {
17811			return ret
17812		}
17813		#[cfg(not(feature = "diagnose"))]
17814		return ret;
17815	}
17816	#[inline(always)]
17817	fn glGetTextureParameterIuiv(&self, texture: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()> {
17818		let ret = process_catch("glGetTextureParameterIuiv", catch_unwind(||(self.gettextureparameteriuiv)(texture, pname, params)));
17819		#[cfg(feature = "diagnose")]
17820		if let Ok(ret) = ret {
17821			return to_result("glGetTextureParameterIuiv", ret, self.glGetError());
17822		} else {
17823			return ret
17824		}
17825		#[cfg(not(feature = "diagnose"))]
17826		return ret;
17827	}
17828	#[inline(always)]
17829	fn glGetTextureParameteriv(&self, texture: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
17830		let ret = process_catch("glGetTextureParameteriv", catch_unwind(||(self.gettextureparameteriv)(texture, pname, params)));
17831		#[cfg(feature = "diagnose")]
17832		if let Ok(ret) = ret {
17833			return to_result("glGetTextureParameteriv", ret, self.glGetError());
17834		} else {
17835			return ret
17836		}
17837		#[cfg(not(feature = "diagnose"))]
17838		return ret;
17839	}
17840	#[inline(always)]
17841	fn glCreateVertexArrays(&self, n: GLsizei, arrays: *mut GLuint) -> Result<()> {
17842		let ret = process_catch("glCreateVertexArrays", catch_unwind(||(self.createvertexarrays)(n, arrays)));
17843		#[cfg(feature = "diagnose")]
17844		if let Ok(ret) = ret {
17845			return to_result("glCreateVertexArrays", ret, self.glGetError());
17846		} else {
17847			return ret
17848		}
17849		#[cfg(not(feature = "diagnose"))]
17850		return ret;
17851	}
17852	#[inline(always)]
17853	fn glDisableVertexArrayAttrib(&self, vaobj: GLuint, index: GLuint) -> Result<()> {
17854		let ret = process_catch("glDisableVertexArrayAttrib", catch_unwind(||(self.disablevertexarrayattrib)(vaobj, index)));
17855		#[cfg(feature = "diagnose")]
17856		if let Ok(ret) = ret {
17857			return to_result("glDisableVertexArrayAttrib", ret, self.glGetError());
17858		} else {
17859			return ret
17860		}
17861		#[cfg(not(feature = "diagnose"))]
17862		return ret;
17863	}
17864	#[inline(always)]
17865	fn glEnableVertexArrayAttrib(&self, vaobj: GLuint, index: GLuint) -> Result<()> {
17866		let ret = process_catch("glEnableVertexArrayAttrib", catch_unwind(||(self.enablevertexarrayattrib)(vaobj, index)));
17867		#[cfg(feature = "diagnose")]
17868		if let Ok(ret) = ret {
17869			return to_result("glEnableVertexArrayAttrib", ret, self.glGetError());
17870		} else {
17871			return ret
17872		}
17873		#[cfg(not(feature = "diagnose"))]
17874		return ret;
17875	}
17876	#[inline(always)]
17877	fn glVertexArrayElementBuffer(&self, vaobj: GLuint, buffer: GLuint) -> Result<()> {
17878		let ret = process_catch("glVertexArrayElementBuffer", catch_unwind(||(self.vertexarrayelementbuffer)(vaobj, buffer)));
17879		#[cfg(feature = "diagnose")]
17880		if let Ok(ret) = ret {
17881			return to_result("glVertexArrayElementBuffer", ret, self.glGetError());
17882		} else {
17883			return ret
17884		}
17885		#[cfg(not(feature = "diagnose"))]
17886		return ret;
17887	}
17888	#[inline(always)]
17889	fn glVertexArrayVertexBuffer(&self, vaobj: GLuint, bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei) -> Result<()> {
17890		let ret = process_catch("glVertexArrayVertexBuffer", catch_unwind(||(self.vertexarrayvertexbuffer)(vaobj, bindingindex, buffer, offset, stride)));
17891		#[cfg(feature = "diagnose")]
17892		if let Ok(ret) = ret {
17893			return to_result("glVertexArrayVertexBuffer", ret, self.glGetError());
17894		} else {
17895			return ret
17896		}
17897		#[cfg(not(feature = "diagnose"))]
17898		return ret;
17899	}
17900	#[inline(always)]
17901	fn glVertexArrayVertexBuffers(&self, vaobj: GLuint, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, strides: *const GLsizei) -> Result<()> {
17902		let ret = process_catch("glVertexArrayVertexBuffers", catch_unwind(||(self.vertexarrayvertexbuffers)(vaobj, first, count, buffers, offsets, strides)));
17903		#[cfg(feature = "diagnose")]
17904		if let Ok(ret) = ret {
17905			return to_result("glVertexArrayVertexBuffers", ret, self.glGetError());
17906		} else {
17907			return ret
17908		}
17909		#[cfg(not(feature = "diagnose"))]
17910		return ret;
17911	}
17912	#[inline(always)]
17913	fn glVertexArrayAttribBinding(&self, vaobj: GLuint, attribindex: GLuint, bindingindex: GLuint) -> Result<()> {
17914		let ret = process_catch("glVertexArrayAttribBinding", catch_unwind(||(self.vertexarrayattribbinding)(vaobj, attribindex, bindingindex)));
17915		#[cfg(feature = "diagnose")]
17916		if let Ok(ret) = ret {
17917			return to_result("glVertexArrayAttribBinding", ret, self.glGetError());
17918		} else {
17919			return ret
17920		}
17921		#[cfg(not(feature = "diagnose"))]
17922		return ret;
17923	}
17924	#[inline(always)]
17925	fn glVertexArrayAttribFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, relativeoffset: GLuint) -> Result<()> {
17926		let ret = process_catch("glVertexArrayAttribFormat", catch_unwind(||(self.vertexarrayattribformat)(vaobj, attribindex, size, type_, normalized, relativeoffset)));
17927		#[cfg(feature = "diagnose")]
17928		if let Ok(ret) = ret {
17929			return to_result("glVertexArrayAttribFormat", ret, self.glGetError());
17930		} else {
17931			return ret
17932		}
17933		#[cfg(not(feature = "diagnose"))]
17934		return ret;
17935	}
17936	#[inline(always)]
17937	fn glVertexArrayAttribIFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()> {
17938		let ret = process_catch("glVertexArrayAttribIFormat", catch_unwind(||(self.vertexarrayattribiformat)(vaobj, attribindex, size, type_, relativeoffset)));
17939		#[cfg(feature = "diagnose")]
17940		if let Ok(ret) = ret {
17941			return to_result("glVertexArrayAttribIFormat", ret, self.glGetError());
17942		} else {
17943			return ret
17944		}
17945		#[cfg(not(feature = "diagnose"))]
17946		return ret;
17947	}
17948	#[inline(always)]
17949	fn glVertexArrayAttribLFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()> {
17950		let ret = process_catch("glVertexArrayAttribLFormat", catch_unwind(||(self.vertexarrayattriblformat)(vaobj, attribindex, size, type_, relativeoffset)));
17951		#[cfg(feature = "diagnose")]
17952		if let Ok(ret) = ret {
17953			return to_result("glVertexArrayAttribLFormat", ret, self.glGetError());
17954		} else {
17955			return ret
17956		}
17957		#[cfg(not(feature = "diagnose"))]
17958		return ret;
17959	}
17960	#[inline(always)]
17961	fn glVertexArrayBindingDivisor(&self, vaobj: GLuint, bindingindex: GLuint, divisor: GLuint) -> Result<()> {
17962		let ret = process_catch("glVertexArrayBindingDivisor", catch_unwind(||(self.vertexarraybindingdivisor)(vaobj, bindingindex, divisor)));
17963		#[cfg(feature = "diagnose")]
17964		if let Ok(ret) = ret {
17965			return to_result("glVertexArrayBindingDivisor", ret, self.glGetError());
17966		} else {
17967			return ret
17968		}
17969		#[cfg(not(feature = "diagnose"))]
17970		return ret;
17971	}
17972	#[inline(always)]
17973	fn glGetVertexArrayiv(&self, vaobj: GLuint, pname: GLenum, param: *mut GLint) -> Result<()> {
17974		let ret = process_catch("glGetVertexArrayiv", catch_unwind(||(self.getvertexarrayiv)(vaobj, pname, param)));
17975		#[cfg(feature = "diagnose")]
17976		if let Ok(ret) = ret {
17977			return to_result("glGetVertexArrayiv", ret, self.glGetError());
17978		} else {
17979			return ret
17980		}
17981		#[cfg(not(feature = "diagnose"))]
17982		return ret;
17983	}
17984	#[inline(always)]
17985	fn glGetVertexArrayIndexediv(&self, vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint) -> Result<()> {
17986		let ret = process_catch("glGetVertexArrayIndexediv", catch_unwind(||(self.getvertexarrayindexediv)(vaobj, index, pname, param)));
17987		#[cfg(feature = "diagnose")]
17988		if let Ok(ret) = ret {
17989			return to_result("glGetVertexArrayIndexediv", ret, self.glGetError());
17990		} else {
17991			return ret
17992		}
17993		#[cfg(not(feature = "diagnose"))]
17994		return ret;
17995	}
17996	#[inline(always)]
17997	fn glGetVertexArrayIndexed64iv(&self, vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint64) -> Result<()> {
17998		let ret = process_catch("glGetVertexArrayIndexed64iv", catch_unwind(||(self.getvertexarrayindexed64iv)(vaobj, index, pname, param)));
17999		#[cfg(feature = "diagnose")]
18000		if let Ok(ret) = ret {
18001			return to_result("glGetVertexArrayIndexed64iv", ret, self.glGetError());
18002		} else {
18003			return ret
18004		}
18005		#[cfg(not(feature = "diagnose"))]
18006		return ret;
18007	}
18008	#[inline(always)]
18009	fn glCreateSamplers(&self, n: GLsizei, samplers: *mut GLuint) -> Result<()> {
18010		let ret = process_catch("glCreateSamplers", catch_unwind(||(self.createsamplers)(n, samplers)));
18011		#[cfg(feature = "diagnose")]
18012		if let Ok(ret) = ret {
18013			return to_result("glCreateSamplers", ret, self.glGetError());
18014		} else {
18015			return ret
18016		}
18017		#[cfg(not(feature = "diagnose"))]
18018		return ret;
18019	}
18020	#[inline(always)]
18021	fn glCreateProgramPipelines(&self, n: GLsizei, pipelines: *mut GLuint) -> Result<()> {
18022		let ret = process_catch("glCreateProgramPipelines", catch_unwind(||(self.createprogrampipelines)(n, pipelines)));
18023		#[cfg(feature = "diagnose")]
18024		if let Ok(ret) = ret {
18025			return to_result("glCreateProgramPipelines", ret, self.glGetError());
18026		} else {
18027			return ret
18028		}
18029		#[cfg(not(feature = "diagnose"))]
18030		return ret;
18031	}
18032	#[inline(always)]
18033	fn glCreateQueries(&self, target: GLenum, n: GLsizei, ids: *mut GLuint) -> Result<()> {
18034		let ret = process_catch("glCreateQueries", catch_unwind(||(self.createqueries)(target, n, ids)));
18035		#[cfg(feature = "diagnose")]
18036		if let Ok(ret) = ret {
18037			return to_result("glCreateQueries", ret, self.glGetError());
18038		} else {
18039			return ret
18040		}
18041		#[cfg(not(feature = "diagnose"))]
18042		return ret;
18043	}
18044	#[inline(always)]
18045	fn glGetQueryBufferObjecti64v(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()> {
18046		let ret = process_catch("glGetQueryBufferObjecti64v", catch_unwind(||(self.getquerybufferobjecti64v)(id, buffer, pname, offset)));
18047		#[cfg(feature = "diagnose")]
18048		if let Ok(ret) = ret {
18049			return to_result("glGetQueryBufferObjecti64v", ret, self.glGetError());
18050		} else {
18051			return ret
18052		}
18053		#[cfg(not(feature = "diagnose"))]
18054		return ret;
18055	}
18056	#[inline(always)]
18057	fn glGetQueryBufferObjectiv(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()> {
18058		let ret = process_catch("glGetQueryBufferObjectiv", catch_unwind(||(self.getquerybufferobjectiv)(id, buffer, pname, offset)));
18059		#[cfg(feature = "diagnose")]
18060		if let Ok(ret) = ret {
18061			return to_result("glGetQueryBufferObjectiv", ret, self.glGetError());
18062		} else {
18063			return ret
18064		}
18065		#[cfg(not(feature = "diagnose"))]
18066		return ret;
18067	}
18068	#[inline(always)]
18069	fn glGetQueryBufferObjectui64v(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()> {
18070		let ret = process_catch("glGetQueryBufferObjectui64v", catch_unwind(||(self.getquerybufferobjectui64v)(id, buffer, pname, offset)));
18071		#[cfg(feature = "diagnose")]
18072		if let Ok(ret) = ret {
18073			return to_result("glGetQueryBufferObjectui64v", ret, self.glGetError());
18074		} else {
18075			return ret
18076		}
18077		#[cfg(not(feature = "diagnose"))]
18078		return ret;
18079	}
18080	#[inline(always)]
18081	fn glGetQueryBufferObjectuiv(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()> {
18082		let ret = process_catch("glGetQueryBufferObjectuiv", catch_unwind(||(self.getquerybufferobjectuiv)(id, buffer, pname, offset)));
18083		#[cfg(feature = "diagnose")]
18084		if let Ok(ret) = ret {
18085			return to_result("glGetQueryBufferObjectuiv", ret, self.glGetError());
18086		} else {
18087			return ret
18088		}
18089		#[cfg(not(feature = "diagnose"))]
18090		return ret;
18091	}
18092	#[inline(always)]
18093	fn glMemoryBarrierByRegion(&self, barriers: GLbitfield) -> Result<()> {
18094		let ret = process_catch("glMemoryBarrierByRegion", catch_unwind(||(self.memorybarrierbyregion)(barriers)));
18095		#[cfg(feature = "diagnose")]
18096		if let Ok(ret) = ret {
18097			return to_result("glMemoryBarrierByRegion", ret, self.glGetError());
18098		} else {
18099			return ret
18100		}
18101		#[cfg(not(feature = "diagnose"))]
18102		return ret;
18103	}
18104	#[inline(always)]
18105	fn glGetTextureSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
18106		let ret = process_catch("glGetTextureSubImage", catch_unwind(||(self.gettexturesubimage)(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, bufSize, pixels)));
18107		#[cfg(feature = "diagnose")]
18108		if let Ok(ret) = ret {
18109			return to_result("glGetTextureSubImage", ret, self.glGetError());
18110		} else {
18111			return ret
18112		}
18113		#[cfg(not(feature = "diagnose"))]
18114		return ret;
18115	}
18116	#[inline(always)]
18117	fn glGetCompressedTextureSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
18118		let ret = process_catch("glGetCompressedTextureSubImage", catch_unwind(||(self.getcompressedtexturesubimage)(texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels)));
18119		#[cfg(feature = "diagnose")]
18120		if let Ok(ret) = ret {
18121			return to_result("glGetCompressedTextureSubImage", ret, self.glGetError());
18122		} else {
18123			return ret
18124		}
18125		#[cfg(not(feature = "diagnose"))]
18126		return ret;
18127	}
18128	#[inline(always)]
18129	fn glGetGraphicsResetStatus(&self) -> Result<GLenum> {
18130		let ret = process_catch("glGetGraphicsResetStatus", catch_unwind(||(self.getgraphicsresetstatus)()));
18131		#[cfg(feature = "diagnose")]
18132		if let Ok(ret) = ret {
18133			return to_result("glGetGraphicsResetStatus", ret, self.glGetError());
18134		} else {
18135			return ret
18136		}
18137		#[cfg(not(feature = "diagnose"))]
18138		return ret;
18139	}
18140	#[inline(always)]
18141	fn glGetnCompressedTexImage(&self, target: GLenum, lod: GLint, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
18142		let ret = process_catch("glGetnCompressedTexImage", catch_unwind(||(self.getncompressedteximage)(target, lod, bufSize, pixels)));
18143		#[cfg(feature = "diagnose")]
18144		if let Ok(ret) = ret {
18145			return to_result("glGetnCompressedTexImage", ret, self.glGetError());
18146		} else {
18147			return ret
18148		}
18149		#[cfg(not(feature = "diagnose"))]
18150		return ret;
18151	}
18152	#[inline(always)]
18153	fn glGetnTexImage(&self, target: GLenum, level: GLint, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
18154		let ret = process_catch("glGetnTexImage", catch_unwind(||(self.getnteximage)(target, level, format, type_, bufSize, pixels)));
18155		#[cfg(feature = "diagnose")]
18156		if let Ok(ret) = ret {
18157			return to_result("glGetnTexImage", ret, self.glGetError());
18158		} else {
18159			return ret
18160		}
18161		#[cfg(not(feature = "diagnose"))]
18162		return ret;
18163	}
18164	#[inline(always)]
18165	fn glGetnUniformdv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLdouble) -> Result<()> {
18166		let ret = process_catch("glGetnUniformdv", catch_unwind(||(self.getnuniformdv)(program, location, bufSize, params)));
18167		#[cfg(feature = "diagnose")]
18168		if let Ok(ret) = ret {
18169			return to_result("glGetnUniformdv", ret, self.glGetError());
18170		} else {
18171			return ret
18172		}
18173		#[cfg(not(feature = "diagnose"))]
18174		return ret;
18175	}
18176	#[inline(always)]
18177	fn glGetnUniformfv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLfloat) -> Result<()> {
18178		let ret = process_catch("glGetnUniformfv", catch_unwind(||(self.getnuniformfv)(program, location, bufSize, params)));
18179		#[cfg(feature = "diagnose")]
18180		if let Ok(ret) = ret {
18181			return to_result("glGetnUniformfv", ret, self.glGetError());
18182		} else {
18183			return ret
18184		}
18185		#[cfg(not(feature = "diagnose"))]
18186		return ret;
18187	}
18188	#[inline(always)]
18189	fn glGetnUniformiv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLint) -> Result<()> {
18190		let ret = process_catch("glGetnUniformiv", catch_unwind(||(self.getnuniformiv)(program, location, bufSize, params)));
18191		#[cfg(feature = "diagnose")]
18192		if let Ok(ret) = ret {
18193			return to_result("glGetnUniformiv", ret, self.glGetError());
18194		} else {
18195			return ret
18196		}
18197		#[cfg(not(feature = "diagnose"))]
18198		return ret;
18199	}
18200	#[inline(always)]
18201	fn glGetnUniformuiv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLuint) -> Result<()> {
18202		let ret = process_catch("glGetnUniformuiv", catch_unwind(||(self.getnuniformuiv)(program, location, bufSize, params)));
18203		#[cfg(feature = "diagnose")]
18204		if let Ok(ret) = ret {
18205			return to_result("glGetnUniformuiv", ret, self.glGetError());
18206		} else {
18207			return ret
18208		}
18209		#[cfg(not(feature = "diagnose"))]
18210		return ret;
18211	}
18212	#[inline(always)]
18213	fn glReadnPixels(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, bufSize: GLsizei, data: *mut c_void) -> Result<()> {
18214		let ret = process_catch("glReadnPixels", catch_unwind(||(self.readnpixels)(x, y, width, height, format, type_, bufSize, data)));
18215		#[cfg(feature = "diagnose")]
18216		if let Ok(ret) = ret {
18217			return to_result("glReadnPixels", ret, self.glGetError());
18218		} else {
18219			return ret
18220		}
18221		#[cfg(not(feature = "diagnose"))]
18222		return ret;
18223	}
18224	#[inline(always)]
18225	fn glGetnMapdv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLdouble) -> Result<()> {
18226		let ret = process_catch("glGetnMapdv", catch_unwind(||(self.getnmapdv)(target, query, bufSize, v)));
18227		#[cfg(feature = "diagnose")]
18228		if let Ok(ret) = ret {
18229			return to_result("glGetnMapdv", ret, self.glGetError());
18230		} else {
18231			return ret
18232		}
18233		#[cfg(not(feature = "diagnose"))]
18234		return ret;
18235	}
18236	#[inline(always)]
18237	fn glGetnMapfv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLfloat) -> Result<()> {
18238		let ret = process_catch("glGetnMapfv", catch_unwind(||(self.getnmapfv)(target, query, bufSize, v)));
18239		#[cfg(feature = "diagnose")]
18240		if let Ok(ret) = ret {
18241			return to_result("glGetnMapfv", ret, self.glGetError());
18242		} else {
18243			return ret
18244		}
18245		#[cfg(not(feature = "diagnose"))]
18246		return ret;
18247	}
18248	#[inline(always)]
18249	fn glGetnMapiv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLint) -> Result<()> {
18250		let ret = process_catch("glGetnMapiv", catch_unwind(||(self.getnmapiv)(target, query, bufSize, v)));
18251		#[cfg(feature = "diagnose")]
18252		if let Ok(ret) = ret {
18253			return to_result("glGetnMapiv", ret, self.glGetError());
18254		} else {
18255			return ret
18256		}
18257		#[cfg(not(feature = "diagnose"))]
18258		return ret;
18259	}
18260	#[inline(always)]
18261	fn glGetnPixelMapfv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLfloat) -> Result<()> {
18262		let ret = process_catch("glGetnPixelMapfv", catch_unwind(||(self.getnpixelmapfv)(map, bufSize, values)));
18263		#[cfg(feature = "diagnose")]
18264		if let Ok(ret) = ret {
18265			return to_result("glGetnPixelMapfv", ret, self.glGetError());
18266		} else {
18267			return ret
18268		}
18269		#[cfg(not(feature = "diagnose"))]
18270		return ret;
18271	}
18272	#[inline(always)]
18273	fn glGetnPixelMapuiv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLuint) -> Result<()> {
18274		let ret = process_catch("glGetnPixelMapuiv", catch_unwind(||(self.getnpixelmapuiv)(map, bufSize, values)));
18275		#[cfg(feature = "diagnose")]
18276		if let Ok(ret) = ret {
18277			return to_result("glGetnPixelMapuiv", ret, self.glGetError());
18278		} else {
18279			return ret
18280		}
18281		#[cfg(not(feature = "diagnose"))]
18282		return ret;
18283	}
18284	#[inline(always)]
18285	fn glGetnPixelMapusv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLushort) -> Result<()> {
18286		let ret = process_catch("glGetnPixelMapusv", catch_unwind(||(self.getnpixelmapusv)(map, bufSize, values)));
18287		#[cfg(feature = "diagnose")]
18288		if let Ok(ret) = ret {
18289			return to_result("glGetnPixelMapusv", ret, self.glGetError());
18290		} else {
18291			return ret
18292		}
18293		#[cfg(not(feature = "diagnose"))]
18294		return ret;
18295	}
18296	#[inline(always)]
18297	fn glGetnPolygonStipple(&self, bufSize: GLsizei, pattern: *mut GLubyte) -> Result<()> {
18298		let ret = process_catch("glGetnPolygonStipple", catch_unwind(||(self.getnpolygonstipple)(bufSize, pattern)));
18299		#[cfg(feature = "diagnose")]
18300		if let Ok(ret) = ret {
18301			return to_result("glGetnPolygonStipple", ret, self.glGetError());
18302		} else {
18303			return ret
18304		}
18305		#[cfg(not(feature = "diagnose"))]
18306		return ret;
18307	}
18308	#[inline(always)]
18309	fn glGetnColorTable(&self, target: GLenum, format: GLenum, type_: GLenum, bufSize: GLsizei, table: *mut c_void) -> Result<()> {
18310		let ret = process_catch("glGetnColorTable", catch_unwind(||(self.getncolortable)(target, format, type_, bufSize, table)));
18311		#[cfg(feature = "diagnose")]
18312		if let Ok(ret) = ret {
18313			return to_result("glGetnColorTable", ret, self.glGetError());
18314		} else {
18315			return ret
18316		}
18317		#[cfg(not(feature = "diagnose"))]
18318		return ret;
18319	}
18320	#[inline(always)]
18321	fn glGetnConvolutionFilter(&self, target: GLenum, format: GLenum, type_: GLenum, bufSize: GLsizei, image: *mut c_void) -> Result<()> {
18322		let ret = process_catch("glGetnConvolutionFilter", catch_unwind(||(self.getnconvolutionfilter)(target, format, type_, bufSize, image)));
18323		#[cfg(feature = "diagnose")]
18324		if let Ok(ret) = ret {
18325			return to_result("glGetnConvolutionFilter", ret, self.glGetError());
18326		} else {
18327			return ret
18328		}
18329		#[cfg(not(feature = "diagnose"))]
18330		return ret;
18331	}
18332	#[inline(always)]
18333	fn glGetnSeparableFilter(&self, target: GLenum, format: GLenum, type_: GLenum, rowBufSize: GLsizei, row: *mut c_void, columnBufSize: GLsizei, column: *mut c_void, span: *mut c_void) -> Result<()> {
18334		let ret = process_catch("glGetnSeparableFilter", catch_unwind(||(self.getnseparablefilter)(target, format, type_, rowBufSize, row, columnBufSize, column, span)));
18335		#[cfg(feature = "diagnose")]
18336		if let Ok(ret) = ret {
18337			return to_result("glGetnSeparableFilter", ret, self.glGetError());
18338		} else {
18339			return ret
18340		}
18341		#[cfg(not(feature = "diagnose"))]
18342		return ret;
18343	}
18344	#[inline(always)]
18345	fn glGetnHistogram(&self, target: GLenum, reset: GLboolean, format: GLenum, type_: GLenum, bufSize: GLsizei, values: *mut c_void) -> Result<()> {
18346		let ret = process_catch("glGetnHistogram", catch_unwind(||(self.getnhistogram)(target, reset, format, type_, bufSize, values)));
18347		#[cfg(feature = "diagnose")]
18348		if let Ok(ret) = ret {
18349			return to_result("glGetnHistogram", ret, self.glGetError());
18350		} else {
18351			return ret
18352		}
18353		#[cfg(not(feature = "diagnose"))]
18354		return ret;
18355	}
18356	#[inline(always)]
18357	fn glGetnMinmax(&self, target: GLenum, reset: GLboolean, format: GLenum, type_: GLenum, bufSize: GLsizei, values: *mut c_void) -> Result<()> {
18358		let ret = process_catch("glGetnMinmax", catch_unwind(||(self.getnminmax)(target, reset, format, type_, bufSize, values)));
18359		#[cfg(feature = "diagnose")]
18360		if let Ok(ret) = ret {
18361			return to_result("glGetnMinmax", ret, self.glGetError());
18362		} else {
18363			return ret
18364		}
18365		#[cfg(not(feature = "diagnose"))]
18366		return ret;
18367	}
18368	#[inline(always)]
18369	fn glTextureBarrier(&self) -> Result<()> {
18370		let ret = process_catch("glTextureBarrier", catch_unwind(||(self.texturebarrier)()));
18371		#[cfg(feature = "diagnose")]
18372		if let Ok(ret) = ret {
18373			return to_result("glTextureBarrier", ret, self.glGetError());
18374		} else {
18375			return ret
18376		}
18377		#[cfg(not(feature = "diagnose"))]
18378		return ret;
18379	}
18380}
18381
18382impl Version45 {
18383	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
18384		let (_spec, major, minor, release) = base.get_version();
18385		if (major, minor, release) < (4, 5, 0) {
18386			return Self::default();
18387		}
18388		Self {
18389			available: true,
18390			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
18391			clipcontrol: {let proc = get_proc_address("glClipControl"); if proc == null() {dummy_pfnglclipcontrolproc} else {unsafe{transmute(proc)}}},
18392			createtransformfeedbacks: {let proc = get_proc_address("glCreateTransformFeedbacks"); if proc == null() {dummy_pfnglcreatetransformfeedbacksproc} else {unsafe{transmute(proc)}}},
18393			transformfeedbackbufferbase: {let proc = get_proc_address("glTransformFeedbackBufferBase"); if proc == null() {dummy_pfngltransformfeedbackbufferbaseproc} else {unsafe{transmute(proc)}}},
18394			transformfeedbackbufferrange: {let proc = get_proc_address("glTransformFeedbackBufferRange"); if proc == null() {dummy_pfngltransformfeedbackbufferrangeproc} else {unsafe{transmute(proc)}}},
18395			gettransformfeedbackiv: {let proc = get_proc_address("glGetTransformFeedbackiv"); if proc == null() {dummy_pfnglgettransformfeedbackivproc} else {unsafe{transmute(proc)}}},
18396			gettransformfeedbacki_v: {let proc = get_proc_address("glGetTransformFeedbacki_v"); if proc == null() {dummy_pfnglgettransformfeedbacki_vproc} else {unsafe{transmute(proc)}}},
18397			gettransformfeedbacki64_v: {let proc = get_proc_address("glGetTransformFeedbacki64_v"); if proc == null() {dummy_pfnglgettransformfeedbacki64_vproc} else {unsafe{transmute(proc)}}},
18398			createbuffers: {let proc = get_proc_address("glCreateBuffers"); if proc == null() {dummy_pfnglcreatebuffersproc} else {unsafe{transmute(proc)}}},
18399			namedbufferstorage: {let proc = get_proc_address("glNamedBufferStorage"); if proc == null() {dummy_pfnglnamedbufferstorageproc} else {unsafe{transmute(proc)}}},
18400			namedbufferdata: {let proc = get_proc_address("glNamedBufferData"); if proc == null() {dummy_pfnglnamedbufferdataproc} else {unsafe{transmute(proc)}}},
18401			namedbuffersubdata: {let proc = get_proc_address("glNamedBufferSubData"); if proc == null() {dummy_pfnglnamedbuffersubdataproc} else {unsafe{transmute(proc)}}},
18402			copynamedbuffersubdata: {let proc = get_proc_address("glCopyNamedBufferSubData"); if proc == null() {dummy_pfnglcopynamedbuffersubdataproc} else {unsafe{transmute(proc)}}},
18403			clearnamedbufferdata: {let proc = get_proc_address("glClearNamedBufferData"); if proc == null() {dummy_pfnglclearnamedbufferdataproc} else {unsafe{transmute(proc)}}},
18404			clearnamedbuffersubdata: {let proc = get_proc_address("glClearNamedBufferSubData"); if proc == null() {dummy_pfnglclearnamedbuffersubdataproc} else {unsafe{transmute(proc)}}},
18405			mapnamedbuffer: {let proc = get_proc_address("glMapNamedBuffer"); if proc == null() {dummy_pfnglmapnamedbufferproc} else {unsafe{transmute(proc)}}},
18406			mapnamedbufferrange: {let proc = get_proc_address("glMapNamedBufferRange"); if proc == null() {dummy_pfnglmapnamedbufferrangeproc} else {unsafe{transmute(proc)}}},
18407			unmapnamedbuffer: {let proc = get_proc_address("glUnmapNamedBuffer"); if proc == null() {dummy_pfnglunmapnamedbufferproc} else {unsafe{transmute(proc)}}},
18408			flushmappednamedbufferrange: {let proc = get_proc_address("glFlushMappedNamedBufferRange"); if proc == null() {dummy_pfnglflushmappednamedbufferrangeproc} else {unsafe{transmute(proc)}}},
18409			getnamedbufferparameteriv: {let proc = get_proc_address("glGetNamedBufferParameteriv"); if proc == null() {dummy_pfnglgetnamedbufferparameterivproc} else {unsafe{transmute(proc)}}},
18410			getnamedbufferparameteri64v: {let proc = get_proc_address("glGetNamedBufferParameteri64v"); if proc == null() {dummy_pfnglgetnamedbufferparameteri64vproc} else {unsafe{transmute(proc)}}},
18411			getnamedbufferpointerv: {let proc = get_proc_address("glGetNamedBufferPointerv"); if proc == null() {dummy_pfnglgetnamedbufferpointervproc} else {unsafe{transmute(proc)}}},
18412			getnamedbuffersubdata: {let proc = get_proc_address("glGetNamedBufferSubData"); if proc == null() {dummy_pfnglgetnamedbuffersubdataproc} else {unsafe{transmute(proc)}}},
18413			createframebuffers: {let proc = get_proc_address("glCreateFramebuffers"); if proc == null() {dummy_pfnglcreateframebuffersproc} else {unsafe{transmute(proc)}}},
18414			namedframebufferrenderbuffer: {let proc = get_proc_address("glNamedFramebufferRenderbuffer"); if proc == null() {dummy_pfnglnamedframebufferrenderbufferproc} else {unsafe{transmute(proc)}}},
18415			namedframebufferparameteri: {let proc = get_proc_address("glNamedFramebufferParameteri"); if proc == null() {dummy_pfnglnamedframebufferparameteriproc} else {unsafe{transmute(proc)}}},
18416			namedframebuffertexture: {let proc = get_proc_address("glNamedFramebufferTexture"); if proc == null() {dummy_pfnglnamedframebuffertextureproc} else {unsafe{transmute(proc)}}},
18417			namedframebuffertexturelayer: {let proc = get_proc_address("glNamedFramebufferTextureLayer"); if proc == null() {dummy_pfnglnamedframebuffertexturelayerproc} else {unsafe{transmute(proc)}}},
18418			namedframebufferdrawbuffer: {let proc = get_proc_address("glNamedFramebufferDrawBuffer"); if proc == null() {dummy_pfnglnamedframebufferdrawbufferproc} else {unsafe{transmute(proc)}}},
18419			namedframebufferdrawbuffers: {let proc = get_proc_address("glNamedFramebufferDrawBuffers"); if proc == null() {dummy_pfnglnamedframebufferdrawbuffersproc} else {unsafe{transmute(proc)}}},
18420			namedframebufferreadbuffer: {let proc = get_proc_address("glNamedFramebufferReadBuffer"); if proc == null() {dummy_pfnglnamedframebufferreadbufferproc} else {unsafe{transmute(proc)}}},
18421			invalidatenamedframebufferdata: {let proc = get_proc_address("glInvalidateNamedFramebufferData"); if proc == null() {dummy_pfnglinvalidatenamedframebufferdataproc} else {unsafe{transmute(proc)}}},
18422			invalidatenamedframebuffersubdata: {let proc = get_proc_address("glInvalidateNamedFramebufferSubData"); if proc == null() {dummy_pfnglinvalidatenamedframebuffersubdataproc} else {unsafe{transmute(proc)}}},
18423			clearnamedframebufferiv: {let proc = get_proc_address("glClearNamedFramebufferiv"); if proc == null() {dummy_pfnglclearnamedframebufferivproc} else {unsafe{transmute(proc)}}},
18424			clearnamedframebufferuiv: {let proc = get_proc_address("glClearNamedFramebufferuiv"); if proc == null() {dummy_pfnglclearnamedframebufferuivproc} else {unsafe{transmute(proc)}}},
18425			clearnamedframebufferfv: {let proc = get_proc_address("glClearNamedFramebufferfv"); if proc == null() {dummy_pfnglclearnamedframebufferfvproc} else {unsafe{transmute(proc)}}},
18426			clearnamedframebufferfi: {let proc = get_proc_address("glClearNamedFramebufferfi"); if proc == null() {dummy_pfnglclearnamedframebufferfiproc} else {unsafe{transmute(proc)}}},
18427			blitnamedframebuffer: {let proc = get_proc_address("glBlitNamedFramebuffer"); if proc == null() {dummy_pfnglblitnamedframebufferproc} else {unsafe{transmute(proc)}}},
18428			checknamedframebufferstatus: {let proc = get_proc_address("glCheckNamedFramebufferStatus"); if proc == null() {dummy_pfnglchecknamedframebufferstatusproc} else {unsafe{transmute(proc)}}},
18429			getnamedframebufferparameteriv: {let proc = get_proc_address("glGetNamedFramebufferParameteriv"); if proc == null() {dummy_pfnglgetnamedframebufferparameterivproc} else {unsafe{transmute(proc)}}},
18430			getnamedframebufferattachmentparameteriv: {let proc = get_proc_address("glGetNamedFramebufferAttachmentParameteriv"); if proc == null() {dummy_pfnglgetnamedframebufferattachmentparameterivproc} else {unsafe{transmute(proc)}}},
18431			createrenderbuffers: {let proc = get_proc_address("glCreateRenderbuffers"); if proc == null() {dummy_pfnglcreaterenderbuffersproc} else {unsafe{transmute(proc)}}},
18432			namedrenderbufferstorage: {let proc = get_proc_address("glNamedRenderbufferStorage"); if proc == null() {dummy_pfnglnamedrenderbufferstorageproc} else {unsafe{transmute(proc)}}},
18433			namedrenderbufferstoragemultisample: {let proc = get_proc_address("glNamedRenderbufferStorageMultisample"); if proc == null() {dummy_pfnglnamedrenderbufferstoragemultisampleproc} else {unsafe{transmute(proc)}}},
18434			getnamedrenderbufferparameteriv: {let proc = get_proc_address("glGetNamedRenderbufferParameteriv"); if proc == null() {dummy_pfnglgetnamedrenderbufferparameterivproc} else {unsafe{transmute(proc)}}},
18435			createtextures: {let proc = get_proc_address("glCreateTextures"); if proc == null() {dummy_pfnglcreatetexturesproc} else {unsafe{transmute(proc)}}},
18436			texturebuffer: {let proc = get_proc_address("glTextureBuffer"); if proc == null() {dummy_pfngltexturebufferproc} else {unsafe{transmute(proc)}}},
18437			texturebufferrange: {let proc = get_proc_address("glTextureBufferRange"); if proc == null() {dummy_pfngltexturebufferrangeproc} else {unsafe{transmute(proc)}}},
18438			texturestorage1d: {let proc = get_proc_address("glTextureStorage1D"); if proc == null() {dummy_pfngltexturestorage1dproc} else {unsafe{transmute(proc)}}},
18439			texturestorage2d: {let proc = get_proc_address("glTextureStorage2D"); if proc == null() {dummy_pfngltexturestorage2dproc} else {unsafe{transmute(proc)}}},
18440			texturestorage3d: {let proc = get_proc_address("glTextureStorage3D"); if proc == null() {dummy_pfngltexturestorage3dproc} else {unsafe{transmute(proc)}}},
18441			texturestorage2dmultisample: {let proc = get_proc_address("glTextureStorage2DMultisample"); if proc == null() {dummy_pfngltexturestorage2dmultisampleproc} else {unsafe{transmute(proc)}}},
18442			texturestorage3dmultisample: {let proc = get_proc_address("glTextureStorage3DMultisample"); if proc == null() {dummy_pfngltexturestorage3dmultisampleproc} else {unsafe{transmute(proc)}}},
18443			texturesubimage1d: {let proc = get_proc_address("glTextureSubImage1D"); if proc == null() {dummy_pfngltexturesubimage1dproc} else {unsafe{transmute(proc)}}},
18444			texturesubimage2d: {let proc = get_proc_address("glTextureSubImage2D"); if proc == null() {dummy_pfngltexturesubimage2dproc} else {unsafe{transmute(proc)}}},
18445			texturesubimage3d: {let proc = get_proc_address("glTextureSubImage3D"); if proc == null() {dummy_pfngltexturesubimage3dproc} else {unsafe{transmute(proc)}}},
18446			compressedtexturesubimage1d: {let proc = get_proc_address("glCompressedTextureSubImage1D"); if proc == null() {dummy_pfnglcompressedtexturesubimage1dproc} else {unsafe{transmute(proc)}}},
18447			compressedtexturesubimage2d: {let proc = get_proc_address("glCompressedTextureSubImage2D"); if proc == null() {dummy_pfnglcompressedtexturesubimage2dproc} else {unsafe{transmute(proc)}}},
18448			compressedtexturesubimage3d: {let proc = get_proc_address("glCompressedTextureSubImage3D"); if proc == null() {dummy_pfnglcompressedtexturesubimage3dproc} else {unsafe{transmute(proc)}}},
18449			copytexturesubimage1d: {let proc = get_proc_address("glCopyTextureSubImage1D"); if proc == null() {dummy_pfnglcopytexturesubimage1dproc} else {unsafe{transmute(proc)}}},
18450			copytexturesubimage2d: {let proc = get_proc_address("glCopyTextureSubImage2D"); if proc == null() {dummy_pfnglcopytexturesubimage2dproc} else {unsafe{transmute(proc)}}},
18451			copytexturesubimage3d: {let proc = get_proc_address("glCopyTextureSubImage3D"); if proc == null() {dummy_pfnglcopytexturesubimage3dproc} else {unsafe{transmute(proc)}}},
18452			textureparameterf: {let proc = get_proc_address("glTextureParameterf"); if proc == null() {dummy_pfngltextureparameterfproc} else {unsafe{transmute(proc)}}},
18453			textureparameterfv: {let proc = get_proc_address("glTextureParameterfv"); if proc == null() {dummy_pfngltextureparameterfvproc} else {unsafe{transmute(proc)}}},
18454			textureparameteri: {let proc = get_proc_address("glTextureParameteri"); if proc == null() {dummy_pfngltextureparameteriproc} else {unsafe{transmute(proc)}}},
18455			textureparameteriiv: {let proc = get_proc_address("glTextureParameterIiv"); if proc == null() {dummy_pfngltextureparameteriivproc} else {unsafe{transmute(proc)}}},
18456			textureparameteriuiv: {let proc = get_proc_address("glTextureParameterIuiv"); if proc == null() {dummy_pfngltextureparameteriuivproc} else {unsafe{transmute(proc)}}},
18457			textureparameteriv: {let proc = get_proc_address("glTextureParameteriv"); if proc == null() {dummy_pfngltextureparameterivproc} else {unsafe{transmute(proc)}}},
18458			generatetexturemipmap: {let proc = get_proc_address("glGenerateTextureMipmap"); if proc == null() {dummy_pfnglgeneratetexturemipmapproc} else {unsafe{transmute(proc)}}},
18459			bindtextureunit: {let proc = get_proc_address("glBindTextureUnit"); if proc == null() {dummy_pfnglbindtextureunitproc} else {unsafe{transmute(proc)}}},
18460			gettextureimage: {let proc = get_proc_address("glGetTextureImage"); if proc == null() {dummy_pfnglgettextureimageproc} else {unsafe{transmute(proc)}}},
18461			getcompressedtextureimage: {let proc = get_proc_address("glGetCompressedTextureImage"); if proc == null() {dummy_pfnglgetcompressedtextureimageproc} else {unsafe{transmute(proc)}}},
18462			gettexturelevelparameterfv: {let proc = get_proc_address("glGetTextureLevelParameterfv"); if proc == null() {dummy_pfnglgettexturelevelparameterfvproc} else {unsafe{transmute(proc)}}},
18463			gettexturelevelparameteriv: {let proc = get_proc_address("glGetTextureLevelParameteriv"); if proc == null() {dummy_pfnglgettexturelevelparameterivproc} else {unsafe{transmute(proc)}}},
18464			gettextureparameterfv: {let proc = get_proc_address("glGetTextureParameterfv"); if proc == null() {dummy_pfnglgettextureparameterfvproc} else {unsafe{transmute(proc)}}},
18465			gettextureparameteriiv: {let proc = get_proc_address("glGetTextureParameterIiv"); if proc == null() {dummy_pfnglgettextureparameteriivproc} else {unsafe{transmute(proc)}}},
18466			gettextureparameteriuiv: {let proc = get_proc_address("glGetTextureParameterIuiv"); if proc == null() {dummy_pfnglgettextureparameteriuivproc} else {unsafe{transmute(proc)}}},
18467			gettextureparameteriv: {let proc = get_proc_address("glGetTextureParameteriv"); if proc == null() {dummy_pfnglgettextureparameterivproc} else {unsafe{transmute(proc)}}},
18468			createvertexarrays: {let proc = get_proc_address("glCreateVertexArrays"); if proc == null() {dummy_pfnglcreatevertexarraysproc} else {unsafe{transmute(proc)}}},
18469			disablevertexarrayattrib: {let proc = get_proc_address("glDisableVertexArrayAttrib"); if proc == null() {dummy_pfngldisablevertexarrayattribproc} else {unsafe{transmute(proc)}}},
18470			enablevertexarrayattrib: {let proc = get_proc_address("glEnableVertexArrayAttrib"); if proc == null() {dummy_pfnglenablevertexarrayattribproc} else {unsafe{transmute(proc)}}},
18471			vertexarrayelementbuffer: {let proc = get_proc_address("glVertexArrayElementBuffer"); if proc == null() {dummy_pfnglvertexarrayelementbufferproc} else {unsafe{transmute(proc)}}},
18472			vertexarrayvertexbuffer: {let proc = get_proc_address("glVertexArrayVertexBuffer"); if proc == null() {dummy_pfnglvertexarrayvertexbufferproc} else {unsafe{transmute(proc)}}},
18473			vertexarrayvertexbuffers: {let proc = get_proc_address("glVertexArrayVertexBuffers"); if proc == null() {dummy_pfnglvertexarrayvertexbuffersproc} else {unsafe{transmute(proc)}}},
18474			vertexarrayattribbinding: {let proc = get_proc_address("glVertexArrayAttribBinding"); if proc == null() {dummy_pfnglvertexarrayattribbindingproc} else {unsafe{transmute(proc)}}},
18475			vertexarrayattribformat: {let proc = get_proc_address("glVertexArrayAttribFormat"); if proc == null() {dummy_pfnglvertexarrayattribformatproc} else {unsafe{transmute(proc)}}},
18476			vertexarrayattribiformat: {let proc = get_proc_address("glVertexArrayAttribIFormat"); if proc == null() {dummy_pfnglvertexarrayattribiformatproc} else {unsafe{transmute(proc)}}},
18477			vertexarrayattriblformat: {let proc = get_proc_address("glVertexArrayAttribLFormat"); if proc == null() {dummy_pfnglvertexarrayattriblformatproc} else {unsafe{transmute(proc)}}},
18478			vertexarraybindingdivisor: {let proc = get_proc_address("glVertexArrayBindingDivisor"); if proc == null() {dummy_pfnglvertexarraybindingdivisorproc} else {unsafe{transmute(proc)}}},
18479			getvertexarrayiv: {let proc = get_proc_address("glGetVertexArrayiv"); if proc == null() {dummy_pfnglgetvertexarrayivproc} else {unsafe{transmute(proc)}}},
18480			getvertexarrayindexediv: {let proc = get_proc_address("glGetVertexArrayIndexediv"); if proc == null() {dummy_pfnglgetvertexarrayindexedivproc} else {unsafe{transmute(proc)}}},
18481			getvertexarrayindexed64iv: {let proc = get_proc_address("glGetVertexArrayIndexed64iv"); if proc == null() {dummy_pfnglgetvertexarrayindexed64ivproc} else {unsafe{transmute(proc)}}},
18482			createsamplers: {let proc = get_proc_address("glCreateSamplers"); if proc == null() {dummy_pfnglcreatesamplersproc} else {unsafe{transmute(proc)}}},
18483			createprogrampipelines: {let proc = get_proc_address("glCreateProgramPipelines"); if proc == null() {dummy_pfnglcreateprogrampipelinesproc} else {unsafe{transmute(proc)}}},
18484			createqueries: {let proc = get_proc_address("glCreateQueries"); if proc == null() {dummy_pfnglcreatequeriesproc} else {unsafe{transmute(proc)}}},
18485			getquerybufferobjecti64v: {let proc = get_proc_address("glGetQueryBufferObjecti64v"); if proc == null() {dummy_pfnglgetquerybufferobjecti64vproc} else {unsafe{transmute(proc)}}},
18486			getquerybufferobjectiv: {let proc = get_proc_address("glGetQueryBufferObjectiv"); if proc == null() {dummy_pfnglgetquerybufferobjectivproc} else {unsafe{transmute(proc)}}},
18487			getquerybufferobjectui64v: {let proc = get_proc_address("glGetQueryBufferObjectui64v"); if proc == null() {dummy_pfnglgetquerybufferobjectui64vproc} else {unsafe{transmute(proc)}}},
18488			getquerybufferobjectuiv: {let proc = get_proc_address("glGetQueryBufferObjectuiv"); if proc == null() {dummy_pfnglgetquerybufferobjectuivproc} else {unsafe{transmute(proc)}}},
18489			memorybarrierbyregion: {let proc = get_proc_address("glMemoryBarrierByRegion"); if proc == null() {dummy_pfnglmemorybarrierbyregionproc} else {unsafe{transmute(proc)}}},
18490			gettexturesubimage: {let proc = get_proc_address("glGetTextureSubImage"); if proc == null() {dummy_pfnglgettexturesubimageproc} else {unsafe{transmute(proc)}}},
18491			getcompressedtexturesubimage: {let proc = get_proc_address("glGetCompressedTextureSubImage"); if proc == null() {dummy_pfnglgetcompressedtexturesubimageproc} else {unsafe{transmute(proc)}}},
18492			getgraphicsresetstatus: {let proc = get_proc_address("glGetGraphicsResetStatus"); if proc == null() {dummy_pfnglgetgraphicsresetstatusproc} else {unsafe{transmute(proc)}}},
18493			getncompressedteximage: {let proc = get_proc_address("glGetnCompressedTexImage"); if proc == null() {dummy_pfnglgetncompressedteximageproc} else {unsafe{transmute(proc)}}},
18494			getnteximage: {let proc = get_proc_address("glGetnTexImage"); if proc == null() {dummy_pfnglgetnteximageproc} else {unsafe{transmute(proc)}}},
18495			getnuniformdv: {let proc = get_proc_address("glGetnUniformdv"); if proc == null() {dummy_pfnglgetnuniformdvproc} else {unsafe{transmute(proc)}}},
18496			getnuniformfv: {let proc = get_proc_address("glGetnUniformfv"); if proc == null() {dummy_pfnglgetnuniformfvproc} else {unsafe{transmute(proc)}}},
18497			getnuniformiv: {let proc = get_proc_address("glGetnUniformiv"); if proc == null() {dummy_pfnglgetnuniformivproc} else {unsafe{transmute(proc)}}},
18498			getnuniformuiv: {let proc = get_proc_address("glGetnUniformuiv"); if proc == null() {dummy_pfnglgetnuniformuivproc} else {unsafe{transmute(proc)}}},
18499			readnpixels: {let proc = get_proc_address("glReadnPixels"); if proc == null() {dummy_pfnglreadnpixelsproc} else {unsafe{transmute(proc)}}},
18500			getnmapdv: {let proc = get_proc_address("glGetnMapdv"); if proc == null() {dummy_pfnglgetnmapdvproc} else {unsafe{transmute(proc)}}},
18501			getnmapfv: {let proc = get_proc_address("glGetnMapfv"); if proc == null() {dummy_pfnglgetnmapfvproc} else {unsafe{transmute(proc)}}},
18502			getnmapiv: {let proc = get_proc_address("glGetnMapiv"); if proc == null() {dummy_pfnglgetnmapivproc} else {unsafe{transmute(proc)}}},
18503			getnpixelmapfv: {let proc = get_proc_address("glGetnPixelMapfv"); if proc == null() {dummy_pfnglgetnpixelmapfvproc} else {unsafe{transmute(proc)}}},
18504			getnpixelmapuiv: {let proc = get_proc_address("glGetnPixelMapuiv"); if proc == null() {dummy_pfnglgetnpixelmapuivproc} else {unsafe{transmute(proc)}}},
18505			getnpixelmapusv: {let proc = get_proc_address("glGetnPixelMapusv"); if proc == null() {dummy_pfnglgetnpixelmapusvproc} else {unsafe{transmute(proc)}}},
18506			getnpolygonstipple: {let proc = get_proc_address("glGetnPolygonStipple"); if proc == null() {dummy_pfnglgetnpolygonstippleproc} else {unsafe{transmute(proc)}}},
18507			getncolortable: {let proc = get_proc_address("glGetnColorTable"); if proc == null() {dummy_pfnglgetncolortableproc} else {unsafe{transmute(proc)}}},
18508			getnconvolutionfilter: {let proc = get_proc_address("glGetnConvolutionFilter"); if proc == null() {dummy_pfnglgetnconvolutionfilterproc} else {unsafe{transmute(proc)}}},
18509			getnseparablefilter: {let proc = get_proc_address("glGetnSeparableFilter"); if proc == null() {dummy_pfnglgetnseparablefilterproc} else {unsafe{transmute(proc)}}},
18510			getnhistogram: {let proc = get_proc_address("glGetnHistogram"); if proc == null() {dummy_pfnglgetnhistogramproc} else {unsafe{transmute(proc)}}},
18511			getnminmax: {let proc = get_proc_address("glGetnMinmax"); if proc == null() {dummy_pfnglgetnminmaxproc} else {unsafe{transmute(proc)}}},
18512			texturebarrier: {let proc = get_proc_address("glTextureBarrier"); if proc == null() {dummy_pfngltexturebarrierproc} else {unsafe{transmute(proc)}}},
18513		}
18514	}
18515	#[inline(always)]
18516	pub fn get_available(&self) -> bool {
18517		self.available
18518	}
18519}
18520
18521impl Default for Version45 {
18522	fn default() -> Self {
18523		Self {
18524			available: false,
18525			geterror: dummy_pfnglgeterrorproc,
18526			clipcontrol: dummy_pfnglclipcontrolproc,
18527			createtransformfeedbacks: dummy_pfnglcreatetransformfeedbacksproc,
18528			transformfeedbackbufferbase: dummy_pfngltransformfeedbackbufferbaseproc,
18529			transformfeedbackbufferrange: dummy_pfngltransformfeedbackbufferrangeproc,
18530			gettransformfeedbackiv: dummy_pfnglgettransformfeedbackivproc,
18531			gettransformfeedbacki_v: dummy_pfnglgettransformfeedbacki_vproc,
18532			gettransformfeedbacki64_v: dummy_pfnglgettransformfeedbacki64_vproc,
18533			createbuffers: dummy_pfnglcreatebuffersproc,
18534			namedbufferstorage: dummy_pfnglnamedbufferstorageproc,
18535			namedbufferdata: dummy_pfnglnamedbufferdataproc,
18536			namedbuffersubdata: dummy_pfnglnamedbuffersubdataproc,
18537			copynamedbuffersubdata: dummy_pfnglcopynamedbuffersubdataproc,
18538			clearnamedbufferdata: dummy_pfnglclearnamedbufferdataproc,
18539			clearnamedbuffersubdata: dummy_pfnglclearnamedbuffersubdataproc,
18540			mapnamedbuffer: dummy_pfnglmapnamedbufferproc,
18541			mapnamedbufferrange: dummy_pfnglmapnamedbufferrangeproc,
18542			unmapnamedbuffer: dummy_pfnglunmapnamedbufferproc,
18543			flushmappednamedbufferrange: dummy_pfnglflushmappednamedbufferrangeproc,
18544			getnamedbufferparameteriv: dummy_pfnglgetnamedbufferparameterivproc,
18545			getnamedbufferparameteri64v: dummy_pfnglgetnamedbufferparameteri64vproc,
18546			getnamedbufferpointerv: dummy_pfnglgetnamedbufferpointervproc,
18547			getnamedbuffersubdata: dummy_pfnglgetnamedbuffersubdataproc,
18548			createframebuffers: dummy_pfnglcreateframebuffersproc,
18549			namedframebufferrenderbuffer: dummy_pfnglnamedframebufferrenderbufferproc,
18550			namedframebufferparameteri: dummy_pfnglnamedframebufferparameteriproc,
18551			namedframebuffertexture: dummy_pfnglnamedframebuffertextureproc,
18552			namedframebuffertexturelayer: dummy_pfnglnamedframebuffertexturelayerproc,
18553			namedframebufferdrawbuffer: dummy_pfnglnamedframebufferdrawbufferproc,
18554			namedframebufferdrawbuffers: dummy_pfnglnamedframebufferdrawbuffersproc,
18555			namedframebufferreadbuffer: dummy_pfnglnamedframebufferreadbufferproc,
18556			invalidatenamedframebufferdata: dummy_pfnglinvalidatenamedframebufferdataproc,
18557			invalidatenamedframebuffersubdata: dummy_pfnglinvalidatenamedframebuffersubdataproc,
18558			clearnamedframebufferiv: dummy_pfnglclearnamedframebufferivproc,
18559			clearnamedframebufferuiv: dummy_pfnglclearnamedframebufferuivproc,
18560			clearnamedframebufferfv: dummy_pfnglclearnamedframebufferfvproc,
18561			clearnamedframebufferfi: dummy_pfnglclearnamedframebufferfiproc,
18562			blitnamedframebuffer: dummy_pfnglblitnamedframebufferproc,
18563			checknamedframebufferstatus: dummy_pfnglchecknamedframebufferstatusproc,
18564			getnamedframebufferparameteriv: dummy_pfnglgetnamedframebufferparameterivproc,
18565			getnamedframebufferattachmentparameteriv: dummy_pfnglgetnamedframebufferattachmentparameterivproc,
18566			createrenderbuffers: dummy_pfnglcreaterenderbuffersproc,
18567			namedrenderbufferstorage: dummy_pfnglnamedrenderbufferstorageproc,
18568			namedrenderbufferstoragemultisample: dummy_pfnglnamedrenderbufferstoragemultisampleproc,
18569			getnamedrenderbufferparameteriv: dummy_pfnglgetnamedrenderbufferparameterivproc,
18570			createtextures: dummy_pfnglcreatetexturesproc,
18571			texturebuffer: dummy_pfngltexturebufferproc,
18572			texturebufferrange: dummy_pfngltexturebufferrangeproc,
18573			texturestorage1d: dummy_pfngltexturestorage1dproc,
18574			texturestorage2d: dummy_pfngltexturestorage2dproc,
18575			texturestorage3d: dummy_pfngltexturestorage3dproc,
18576			texturestorage2dmultisample: dummy_pfngltexturestorage2dmultisampleproc,
18577			texturestorage3dmultisample: dummy_pfngltexturestorage3dmultisampleproc,
18578			texturesubimage1d: dummy_pfngltexturesubimage1dproc,
18579			texturesubimage2d: dummy_pfngltexturesubimage2dproc,
18580			texturesubimage3d: dummy_pfngltexturesubimage3dproc,
18581			compressedtexturesubimage1d: dummy_pfnglcompressedtexturesubimage1dproc,
18582			compressedtexturesubimage2d: dummy_pfnglcompressedtexturesubimage2dproc,
18583			compressedtexturesubimage3d: dummy_pfnglcompressedtexturesubimage3dproc,
18584			copytexturesubimage1d: dummy_pfnglcopytexturesubimage1dproc,
18585			copytexturesubimage2d: dummy_pfnglcopytexturesubimage2dproc,
18586			copytexturesubimage3d: dummy_pfnglcopytexturesubimage3dproc,
18587			textureparameterf: dummy_pfngltextureparameterfproc,
18588			textureparameterfv: dummy_pfngltextureparameterfvproc,
18589			textureparameteri: dummy_pfngltextureparameteriproc,
18590			textureparameteriiv: dummy_pfngltextureparameteriivproc,
18591			textureparameteriuiv: dummy_pfngltextureparameteriuivproc,
18592			textureparameteriv: dummy_pfngltextureparameterivproc,
18593			generatetexturemipmap: dummy_pfnglgeneratetexturemipmapproc,
18594			bindtextureunit: dummy_pfnglbindtextureunitproc,
18595			gettextureimage: dummy_pfnglgettextureimageproc,
18596			getcompressedtextureimage: dummy_pfnglgetcompressedtextureimageproc,
18597			gettexturelevelparameterfv: dummy_pfnglgettexturelevelparameterfvproc,
18598			gettexturelevelparameteriv: dummy_pfnglgettexturelevelparameterivproc,
18599			gettextureparameterfv: dummy_pfnglgettextureparameterfvproc,
18600			gettextureparameteriiv: dummy_pfnglgettextureparameteriivproc,
18601			gettextureparameteriuiv: dummy_pfnglgettextureparameteriuivproc,
18602			gettextureparameteriv: dummy_pfnglgettextureparameterivproc,
18603			createvertexarrays: dummy_pfnglcreatevertexarraysproc,
18604			disablevertexarrayattrib: dummy_pfngldisablevertexarrayattribproc,
18605			enablevertexarrayattrib: dummy_pfnglenablevertexarrayattribproc,
18606			vertexarrayelementbuffer: dummy_pfnglvertexarrayelementbufferproc,
18607			vertexarrayvertexbuffer: dummy_pfnglvertexarrayvertexbufferproc,
18608			vertexarrayvertexbuffers: dummy_pfnglvertexarrayvertexbuffersproc,
18609			vertexarrayattribbinding: dummy_pfnglvertexarrayattribbindingproc,
18610			vertexarrayattribformat: dummy_pfnglvertexarrayattribformatproc,
18611			vertexarrayattribiformat: dummy_pfnglvertexarrayattribiformatproc,
18612			vertexarrayattriblformat: dummy_pfnglvertexarrayattriblformatproc,
18613			vertexarraybindingdivisor: dummy_pfnglvertexarraybindingdivisorproc,
18614			getvertexarrayiv: dummy_pfnglgetvertexarrayivproc,
18615			getvertexarrayindexediv: dummy_pfnglgetvertexarrayindexedivproc,
18616			getvertexarrayindexed64iv: dummy_pfnglgetvertexarrayindexed64ivproc,
18617			createsamplers: dummy_pfnglcreatesamplersproc,
18618			createprogrampipelines: dummy_pfnglcreateprogrampipelinesproc,
18619			createqueries: dummy_pfnglcreatequeriesproc,
18620			getquerybufferobjecti64v: dummy_pfnglgetquerybufferobjecti64vproc,
18621			getquerybufferobjectiv: dummy_pfnglgetquerybufferobjectivproc,
18622			getquerybufferobjectui64v: dummy_pfnglgetquerybufferobjectui64vproc,
18623			getquerybufferobjectuiv: dummy_pfnglgetquerybufferobjectuivproc,
18624			memorybarrierbyregion: dummy_pfnglmemorybarrierbyregionproc,
18625			gettexturesubimage: dummy_pfnglgettexturesubimageproc,
18626			getcompressedtexturesubimage: dummy_pfnglgetcompressedtexturesubimageproc,
18627			getgraphicsresetstatus: dummy_pfnglgetgraphicsresetstatusproc,
18628			getncompressedteximage: dummy_pfnglgetncompressedteximageproc,
18629			getnteximage: dummy_pfnglgetnteximageproc,
18630			getnuniformdv: dummy_pfnglgetnuniformdvproc,
18631			getnuniformfv: dummy_pfnglgetnuniformfvproc,
18632			getnuniformiv: dummy_pfnglgetnuniformivproc,
18633			getnuniformuiv: dummy_pfnglgetnuniformuivproc,
18634			readnpixels: dummy_pfnglreadnpixelsproc,
18635			getnmapdv: dummy_pfnglgetnmapdvproc,
18636			getnmapfv: dummy_pfnglgetnmapfvproc,
18637			getnmapiv: dummy_pfnglgetnmapivproc,
18638			getnpixelmapfv: dummy_pfnglgetnpixelmapfvproc,
18639			getnpixelmapuiv: dummy_pfnglgetnpixelmapuivproc,
18640			getnpixelmapusv: dummy_pfnglgetnpixelmapusvproc,
18641			getnpolygonstipple: dummy_pfnglgetnpolygonstippleproc,
18642			getncolortable: dummy_pfnglgetncolortableproc,
18643			getnconvolutionfilter: dummy_pfnglgetnconvolutionfilterproc,
18644			getnseparablefilter: dummy_pfnglgetnseparablefilterproc,
18645			getnhistogram: dummy_pfnglgetnhistogramproc,
18646			getnminmax: dummy_pfnglgetnminmaxproc,
18647			texturebarrier: dummy_pfngltexturebarrierproc,
18648		}
18649	}
18650}
18651impl Debug for Version45 {
18652	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
18653		if self.available {
18654			f.debug_struct("Version45")
18655			.field("available", &self.available)
18656			.field("clipcontrol", unsafe{if transmute::<_, *const c_void>(self.clipcontrol) == (dummy_pfnglclipcontrolproc as *const c_void) {&null::<PFNGLCLIPCONTROLPROC>()} else {&self.clipcontrol}})
18657			.field("createtransformfeedbacks", unsafe{if transmute::<_, *const c_void>(self.createtransformfeedbacks) == (dummy_pfnglcreatetransformfeedbacksproc as *const c_void) {&null::<PFNGLCREATETRANSFORMFEEDBACKSPROC>()} else {&self.createtransformfeedbacks}})
18658			.field("transformfeedbackbufferbase", unsafe{if transmute::<_, *const c_void>(self.transformfeedbackbufferbase) == (dummy_pfngltransformfeedbackbufferbaseproc as *const c_void) {&null::<PFNGLTRANSFORMFEEDBACKBUFFERBASEPROC>()} else {&self.transformfeedbackbufferbase}})
18659			.field("transformfeedbackbufferrange", unsafe{if transmute::<_, *const c_void>(self.transformfeedbackbufferrange) == (dummy_pfngltransformfeedbackbufferrangeproc as *const c_void) {&null::<PFNGLTRANSFORMFEEDBACKBUFFERRANGEPROC>()} else {&self.transformfeedbackbufferrange}})
18660			.field("gettransformfeedbackiv", unsafe{if transmute::<_, *const c_void>(self.gettransformfeedbackiv) == (dummy_pfnglgettransformfeedbackivproc as *const c_void) {&null::<PFNGLGETTRANSFORMFEEDBACKIVPROC>()} else {&self.gettransformfeedbackiv}})
18661			.field("gettransformfeedbacki_v", unsafe{if transmute::<_, *const c_void>(self.gettransformfeedbacki_v) == (dummy_pfnglgettransformfeedbacki_vproc as *const c_void) {&null::<PFNGLGETTRANSFORMFEEDBACKI_VPROC>()} else {&self.gettransformfeedbacki_v}})
18662			.field("gettransformfeedbacki64_v", unsafe{if transmute::<_, *const c_void>(self.gettransformfeedbacki64_v) == (dummy_pfnglgettransformfeedbacki64_vproc as *const c_void) {&null::<PFNGLGETTRANSFORMFEEDBACKI64_VPROC>()} else {&self.gettransformfeedbacki64_v}})
18663			.field("createbuffers", unsafe{if transmute::<_, *const c_void>(self.createbuffers) == (dummy_pfnglcreatebuffersproc as *const c_void) {&null::<PFNGLCREATEBUFFERSPROC>()} else {&self.createbuffers}})
18664			.field("namedbufferstorage", unsafe{if transmute::<_, *const c_void>(self.namedbufferstorage) == (dummy_pfnglnamedbufferstorageproc as *const c_void) {&null::<PFNGLNAMEDBUFFERSTORAGEPROC>()} else {&self.namedbufferstorage}})
18665			.field("namedbufferdata", unsafe{if transmute::<_, *const c_void>(self.namedbufferdata) == (dummy_pfnglnamedbufferdataproc as *const c_void) {&null::<PFNGLNAMEDBUFFERDATAPROC>()} else {&self.namedbufferdata}})
18666			.field("namedbuffersubdata", unsafe{if transmute::<_, *const c_void>(self.namedbuffersubdata) == (dummy_pfnglnamedbuffersubdataproc as *const c_void) {&null::<PFNGLNAMEDBUFFERSUBDATAPROC>()} else {&self.namedbuffersubdata}})
18667			.field("copynamedbuffersubdata", unsafe{if transmute::<_, *const c_void>(self.copynamedbuffersubdata) == (dummy_pfnglcopynamedbuffersubdataproc as *const c_void) {&null::<PFNGLCOPYNAMEDBUFFERSUBDATAPROC>()} else {&self.copynamedbuffersubdata}})
18668			.field("clearnamedbufferdata", unsafe{if transmute::<_, *const c_void>(self.clearnamedbufferdata) == (dummy_pfnglclearnamedbufferdataproc as *const c_void) {&null::<PFNGLCLEARNAMEDBUFFERDATAPROC>()} else {&self.clearnamedbufferdata}})
18669			.field("clearnamedbuffersubdata", unsafe{if transmute::<_, *const c_void>(self.clearnamedbuffersubdata) == (dummy_pfnglclearnamedbuffersubdataproc as *const c_void) {&null::<PFNGLCLEARNAMEDBUFFERSUBDATAPROC>()} else {&self.clearnamedbuffersubdata}})
18670			.field("mapnamedbuffer", unsafe{if transmute::<_, *const c_void>(self.mapnamedbuffer) == (dummy_pfnglmapnamedbufferproc as *const c_void) {&null::<PFNGLMAPNAMEDBUFFERPROC>()} else {&self.mapnamedbuffer}})
18671			.field("mapnamedbufferrange", unsafe{if transmute::<_, *const c_void>(self.mapnamedbufferrange) == (dummy_pfnglmapnamedbufferrangeproc as *const c_void) {&null::<PFNGLMAPNAMEDBUFFERRANGEPROC>()} else {&self.mapnamedbufferrange}})
18672			.field("unmapnamedbuffer", unsafe{if transmute::<_, *const c_void>(self.unmapnamedbuffer) == (dummy_pfnglunmapnamedbufferproc as *const c_void) {&null::<PFNGLUNMAPNAMEDBUFFERPROC>()} else {&self.unmapnamedbuffer}})
18673			.field("flushmappednamedbufferrange", unsafe{if transmute::<_, *const c_void>(self.flushmappednamedbufferrange) == (dummy_pfnglflushmappednamedbufferrangeproc as *const c_void) {&null::<PFNGLFLUSHMAPPEDNAMEDBUFFERRANGEPROC>()} else {&self.flushmappednamedbufferrange}})
18674			.field("getnamedbufferparameteriv", unsafe{if transmute::<_, *const c_void>(self.getnamedbufferparameteriv) == (dummy_pfnglgetnamedbufferparameterivproc as *const c_void) {&null::<PFNGLGETNAMEDBUFFERPARAMETERIVPROC>()} else {&self.getnamedbufferparameteriv}})
18675			.field("getnamedbufferparameteri64v", unsafe{if transmute::<_, *const c_void>(self.getnamedbufferparameteri64v) == (dummy_pfnglgetnamedbufferparameteri64vproc as *const c_void) {&null::<PFNGLGETNAMEDBUFFERPARAMETERI64VPROC>()} else {&self.getnamedbufferparameteri64v}})
18676			.field("getnamedbufferpointerv", unsafe{if transmute::<_, *const c_void>(self.getnamedbufferpointerv) == (dummy_pfnglgetnamedbufferpointervproc as *const c_void) {&null::<PFNGLGETNAMEDBUFFERPOINTERVPROC>()} else {&self.getnamedbufferpointerv}})
18677			.field("getnamedbuffersubdata", unsafe{if transmute::<_, *const c_void>(self.getnamedbuffersubdata) == (dummy_pfnglgetnamedbuffersubdataproc as *const c_void) {&null::<PFNGLGETNAMEDBUFFERSUBDATAPROC>()} else {&self.getnamedbuffersubdata}})
18678			.field("createframebuffers", unsafe{if transmute::<_, *const c_void>(self.createframebuffers) == (dummy_pfnglcreateframebuffersproc as *const c_void) {&null::<PFNGLCREATEFRAMEBUFFERSPROC>()} else {&self.createframebuffers}})
18679			.field("namedframebufferrenderbuffer", unsafe{if transmute::<_, *const c_void>(self.namedframebufferrenderbuffer) == (dummy_pfnglnamedframebufferrenderbufferproc as *const c_void) {&null::<PFNGLNAMEDFRAMEBUFFERRENDERBUFFERPROC>()} else {&self.namedframebufferrenderbuffer}})
18680			.field("namedframebufferparameteri", unsafe{if transmute::<_, *const c_void>(self.namedframebufferparameteri) == (dummy_pfnglnamedframebufferparameteriproc as *const c_void) {&null::<PFNGLNAMEDFRAMEBUFFERPARAMETERIPROC>()} else {&self.namedframebufferparameteri}})
18681			.field("namedframebuffertexture", unsafe{if transmute::<_, *const c_void>(self.namedframebuffertexture) == (dummy_pfnglnamedframebuffertextureproc as *const c_void) {&null::<PFNGLNAMEDFRAMEBUFFERTEXTUREPROC>()} else {&self.namedframebuffertexture}})
18682			.field("namedframebuffertexturelayer", unsafe{if transmute::<_, *const c_void>(self.namedframebuffertexturelayer) == (dummy_pfnglnamedframebuffertexturelayerproc as *const c_void) {&null::<PFNGLNAMEDFRAMEBUFFERTEXTURELAYERPROC>()} else {&self.namedframebuffertexturelayer}})
18683			.field("namedframebufferdrawbuffer", unsafe{if transmute::<_, *const c_void>(self.namedframebufferdrawbuffer) == (dummy_pfnglnamedframebufferdrawbufferproc as *const c_void) {&null::<PFNGLNAMEDFRAMEBUFFERDRAWBUFFERPROC>()} else {&self.namedframebufferdrawbuffer}})
18684			.field("namedframebufferdrawbuffers", unsafe{if transmute::<_, *const c_void>(self.namedframebufferdrawbuffers) == (dummy_pfnglnamedframebufferdrawbuffersproc as *const c_void) {&null::<PFNGLNAMEDFRAMEBUFFERDRAWBUFFERSPROC>()} else {&self.namedframebufferdrawbuffers}})
18685			.field("namedframebufferreadbuffer", unsafe{if transmute::<_, *const c_void>(self.namedframebufferreadbuffer) == (dummy_pfnglnamedframebufferreadbufferproc as *const c_void) {&null::<PFNGLNAMEDFRAMEBUFFERREADBUFFERPROC>()} else {&self.namedframebufferreadbuffer}})
18686			.field("invalidatenamedframebufferdata", unsafe{if transmute::<_, *const c_void>(self.invalidatenamedframebufferdata) == (dummy_pfnglinvalidatenamedframebufferdataproc as *const c_void) {&null::<PFNGLINVALIDATENAMEDFRAMEBUFFERDATAPROC>()} else {&self.invalidatenamedframebufferdata}})
18687			.field("invalidatenamedframebuffersubdata", unsafe{if transmute::<_, *const c_void>(self.invalidatenamedframebuffersubdata) == (dummy_pfnglinvalidatenamedframebuffersubdataproc as *const c_void) {&null::<PFNGLINVALIDATENAMEDFRAMEBUFFERSUBDATAPROC>()} else {&self.invalidatenamedframebuffersubdata}})
18688			.field("clearnamedframebufferiv", unsafe{if transmute::<_, *const c_void>(self.clearnamedframebufferiv) == (dummy_pfnglclearnamedframebufferivproc as *const c_void) {&null::<PFNGLCLEARNAMEDFRAMEBUFFERIVPROC>()} else {&self.clearnamedframebufferiv}})
18689			.field("clearnamedframebufferuiv", unsafe{if transmute::<_, *const c_void>(self.clearnamedframebufferuiv) == (dummy_pfnglclearnamedframebufferuivproc as *const c_void) {&null::<PFNGLCLEARNAMEDFRAMEBUFFERUIVPROC>()} else {&self.clearnamedframebufferuiv}})
18690			.field("clearnamedframebufferfv", unsafe{if transmute::<_, *const c_void>(self.clearnamedframebufferfv) == (dummy_pfnglclearnamedframebufferfvproc as *const c_void) {&null::<PFNGLCLEARNAMEDFRAMEBUFFERFVPROC>()} else {&self.clearnamedframebufferfv}})
18691			.field("clearnamedframebufferfi", unsafe{if transmute::<_, *const c_void>(self.clearnamedframebufferfi) == (dummy_pfnglclearnamedframebufferfiproc as *const c_void) {&null::<PFNGLCLEARNAMEDFRAMEBUFFERFIPROC>()} else {&self.clearnamedframebufferfi}})
18692			.field("blitnamedframebuffer", unsafe{if transmute::<_, *const c_void>(self.blitnamedframebuffer) == (dummy_pfnglblitnamedframebufferproc as *const c_void) {&null::<PFNGLBLITNAMEDFRAMEBUFFERPROC>()} else {&self.blitnamedframebuffer}})
18693			.field("checknamedframebufferstatus", unsafe{if transmute::<_, *const c_void>(self.checknamedframebufferstatus) == (dummy_pfnglchecknamedframebufferstatusproc as *const c_void) {&null::<PFNGLCHECKNAMEDFRAMEBUFFERSTATUSPROC>()} else {&self.checknamedframebufferstatus}})
18694			.field("getnamedframebufferparameteriv", unsafe{if transmute::<_, *const c_void>(self.getnamedframebufferparameteriv) == (dummy_pfnglgetnamedframebufferparameterivproc as *const c_void) {&null::<PFNGLGETNAMEDFRAMEBUFFERPARAMETERIVPROC>()} else {&self.getnamedframebufferparameteriv}})
18695			.field("getnamedframebufferattachmentparameteriv", unsafe{if transmute::<_, *const c_void>(self.getnamedframebufferattachmentparameteriv) == (dummy_pfnglgetnamedframebufferattachmentparameterivproc as *const c_void) {&null::<PFNGLGETNAMEDFRAMEBUFFERATTACHMENTPARAMETERIVPROC>()} else {&self.getnamedframebufferattachmentparameteriv}})
18696			.field("createrenderbuffers", unsafe{if transmute::<_, *const c_void>(self.createrenderbuffers) == (dummy_pfnglcreaterenderbuffersproc as *const c_void) {&null::<PFNGLCREATERENDERBUFFERSPROC>()} else {&self.createrenderbuffers}})
18697			.field("namedrenderbufferstorage", unsafe{if transmute::<_, *const c_void>(self.namedrenderbufferstorage) == (dummy_pfnglnamedrenderbufferstorageproc as *const c_void) {&null::<PFNGLNAMEDRENDERBUFFERSTORAGEPROC>()} else {&self.namedrenderbufferstorage}})
18698			.field("namedrenderbufferstoragemultisample", unsafe{if transmute::<_, *const c_void>(self.namedrenderbufferstoragemultisample) == (dummy_pfnglnamedrenderbufferstoragemultisampleproc as *const c_void) {&null::<PFNGLNAMEDRENDERBUFFERSTORAGEMULTISAMPLEPROC>()} else {&self.namedrenderbufferstoragemultisample}})
18699			.field("getnamedrenderbufferparameteriv", unsafe{if transmute::<_, *const c_void>(self.getnamedrenderbufferparameteriv) == (dummy_pfnglgetnamedrenderbufferparameterivproc as *const c_void) {&null::<PFNGLGETNAMEDRENDERBUFFERPARAMETERIVPROC>()} else {&self.getnamedrenderbufferparameteriv}})
18700			.field("createtextures", unsafe{if transmute::<_, *const c_void>(self.createtextures) == (dummy_pfnglcreatetexturesproc as *const c_void) {&null::<PFNGLCREATETEXTURESPROC>()} else {&self.createtextures}})
18701			.field("texturebuffer", unsafe{if transmute::<_, *const c_void>(self.texturebuffer) == (dummy_pfngltexturebufferproc as *const c_void) {&null::<PFNGLTEXTUREBUFFERPROC>()} else {&self.texturebuffer}})
18702			.field("texturebufferrange", unsafe{if transmute::<_, *const c_void>(self.texturebufferrange) == (dummy_pfngltexturebufferrangeproc as *const c_void) {&null::<PFNGLTEXTUREBUFFERRANGEPROC>()} else {&self.texturebufferrange}})
18703			.field("texturestorage1d", unsafe{if transmute::<_, *const c_void>(self.texturestorage1d) == (dummy_pfngltexturestorage1dproc as *const c_void) {&null::<PFNGLTEXTURESTORAGE1DPROC>()} else {&self.texturestorage1d}})
18704			.field("texturestorage2d", unsafe{if transmute::<_, *const c_void>(self.texturestorage2d) == (dummy_pfngltexturestorage2dproc as *const c_void) {&null::<PFNGLTEXTURESTORAGE2DPROC>()} else {&self.texturestorage2d}})
18705			.field("texturestorage3d", unsafe{if transmute::<_, *const c_void>(self.texturestorage3d) == (dummy_pfngltexturestorage3dproc as *const c_void) {&null::<PFNGLTEXTURESTORAGE3DPROC>()} else {&self.texturestorage3d}})
18706			.field("texturestorage2dmultisample", unsafe{if transmute::<_, *const c_void>(self.texturestorage2dmultisample) == (dummy_pfngltexturestorage2dmultisampleproc as *const c_void) {&null::<PFNGLTEXTURESTORAGE2DMULTISAMPLEPROC>()} else {&self.texturestorage2dmultisample}})
18707			.field("texturestorage3dmultisample", unsafe{if transmute::<_, *const c_void>(self.texturestorage3dmultisample) == (dummy_pfngltexturestorage3dmultisampleproc as *const c_void) {&null::<PFNGLTEXTURESTORAGE3DMULTISAMPLEPROC>()} else {&self.texturestorage3dmultisample}})
18708			.field("texturesubimage1d", unsafe{if transmute::<_, *const c_void>(self.texturesubimage1d) == (dummy_pfngltexturesubimage1dproc as *const c_void) {&null::<PFNGLTEXTURESUBIMAGE1DPROC>()} else {&self.texturesubimage1d}})
18709			.field("texturesubimage2d", unsafe{if transmute::<_, *const c_void>(self.texturesubimage2d) == (dummy_pfngltexturesubimage2dproc as *const c_void) {&null::<PFNGLTEXTURESUBIMAGE2DPROC>()} else {&self.texturesubimage2d}})
18710			.field("texturesubimage3d", unsafe{if transmute::<_, *const c_void>(self.texturesubimage3d) == (dummy_pfngltexturesubimage3dproc as *const c_void) {&null::<PFNGLTEXTURESUBIMAGE3DPROC>()} else {&self.texturesubimage3d}})
18711			.field("compressedtexturesubimage1d", unsafe{if transmute::<_, *const c_void>(self.compressedtexturesubimage1d) == (dummy_pfnglcompressedtexturesubimage1dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXTURESUBIMAGE1DPROC>()} else {&self.compressedtexturesubimage1d}})
18712			.field("compressedtexturesubimage2d", unsafe{if transmute::<_, *const c_void>(self.compressedtexturesubimage2d) == (dummy_pfnglcompressedtexturesubimage2dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXTURESUBIMAGE2DPROC>()} else {&self.compressedtexturesubimage2d}})
18713			.field("compressedtexturesubimage3d", unsafe{if transmute::<_, *const c_void>(self.compressedtexturesubimage3d) == (dummy_pfnglcompressedtexturesubimage3dproc as *const c_void) {&null::<PFNGLCOMPRESSEDTEXTURESUBIMAGE3DPROC>()} else {&self.compressedtexturesubimage3d}})
18714			.field("copytexturesubimage1d", unsafe{if transmute::<_, *const c_void>(self.copytexturesubimage1d) == (dummy_pfnglcopytexturesubimage1dproc as *const c_void) {&null::<PFNGLCOPYTEXTURESUBIMAGE1DPROC>()} else {&self.copytexturesubimage1d}})
18715			.field("copytexturesubimage2d", unsafe{if transmute::<_, *const c_void>(self.copytexturesubimage2d) == (dummy_pfnglcopytexturesubimage2dproc as *const c_void) {&null::<PFNGLCOPYTEXTURESUBIMAGE2DPROC>()} else {&self.copytexturesubimage2d}})
18716			.field("copytexturesubimage3d", unsafe{if transmute::<_, *const c_void>(self.copytexturesubimage3d) == (dummy_pfnglcopytexturesubimage3dproc as *const c_void) {&null::<PFNGLCOPYTEXTURESUBIMAGE3DPROC>()} else {&self.copytexturesubimage3d}})
18717			.field("textureparameterf", unsafe{if transmute::<_, *const c_void>(self.textureparameterf) == (dummy_pfngltextureparameterfproc as *const c_void) {&null::<PFNGLTEXTUREPARAMETERFPROC>()} else {&self.textureparameterf}})
18718			.field("textureparameterfv", unsafe{if transmute::<_, *const c_void>(self.textureparameterfv) == (dummy_pfngltextureparameterfvproc as *const c_void) {&null::<PFNGLTEXTUREPARAMETERFVPROC>()} else {&self.textureparameterfv}})
18719			.field("textureparameteri", unsafe{if transmute::<_, *const c_void>(self.textureparameteri) == (dummy_pfngltextureparameteriproc as *const c_void) {&null::<PFNGLTEXTUREPARAMETERIPROC>()} else {&self.textureparameteri}})
18720			.field("textureparameteriiv", unsafe{if transmute::<_, *const c_void>(self.textureparameteriiv) == (dummy_pfngltextureparameteriivproc as *const c_void) {&null::<PFNGLTEXTUREPARAMETERIIVPROC>()} else {&self.textureparameteriiv}})
18721			.field("textureparameteriuiv", unsafe{if transmute::<_, *const c_void>(self.textureparameteriuiv) == (dummy_pfngltextureparameteriuivproc as *const c_void) {&null::<PFNGLTEXTUREPARAMETERIUIVPROC>()} else {&self.textureparameteriuiv}})
18722			.field("textureparameteriv", unsafe{if transmute::<_, *const c_void>(self.textureparameteriv) == (dummy_pfngltextureparameterivproc as *const c_void) {&null::<PFNGLTEXTUREPARAMETERIVPROC>()} else {&self.textureparameteriv}})
18723			.field("generatetexturemipmap", unsafe{if transmute::<_, *const c_void>(self.generatetexturemipmap) == (dummy_pfnglgeneratetexturemipmapproc as *const c_void) {&null::<PFNGLGENERATETEXTUREMIPMAPPROC>()} else {&self.generatetexturemipmap}})
18724			.field("bindtextureunit", unsafe{if transmute::<_, *const c_void>(self.bindtextureunit) == (dummy_pfnglbindtextureunitproc as *const c_void) {&null::<PFNGLBINDTEXTUREUNITPROC>()} else {&self.bindtextureunit}})
18725			.field("gettextureimage", unsafe{if transmute::<_, *const c_void>(self.gettextureimage) == (dummy_pfnglgettextureimageproc as *const c_void) {&null::<PFNGLGETTEXTUREIMAGEPROC>()} else {&self.gettextureimage}})
18726			.field("getcompressedtextureimage", unsafe{if transmute::<_, *const c_void>(self.getcompressedtextureimage) == (dummy_pfnglgetcompressedtextureimageproc as *const c_void) {&null::<PFNGLGETCOMPRESSEDTEXTUREIMAGEPROC>()} else {&self.getcompressedtextureimage}})
18727			.field("gettexturelevelparameterfv", unsafe{if transmute::<_, *const c_void>(self.gettexturelevelparameterfv) == (dummy_pfnglgettexturelevelparameterfvproc as *const c_void) {&null::<PFNGLGETTEXTURELEVELPARAMETERFVPROC>()} else {&self.gettexturelevelparameterfv}})
18728			.field("gettexturelevelparameteriv", unsafe{if transmute::<_, *const c_void>(self.gettexturelevelparameteriv) == (dummy_pfnglgettexturelevelparameterivproc as *const c_void) {&null::<PFNGLGETTEXTURELEVELPARAMETERIVPROC>()} else {&self.gettexturelevelparameteriv}})
18729			.field("gettextureparameterfv", unsafe{if transmute::<_, *const c_void>(self.gettextureparameterfv) == (dummy_pfnglgettextureparameterfvproc as *const c_void) {&null::<PFNGLGETTEXTUREPARAMETERFVPROC>()} else {&self.gettextureparameterfv}})
18730			.field("gettextureparameteriiv", unsafe{if transmute::<_, *const c_void>(self.gettextureparameteriiv) == (dummy_pfnglgettextureparameteriivproc as *const c_void) {&null::<PFNGLGETTEXTUREPARAMETERIIVPROC>()} else {&self.gettextureparameteriiv}})
18731			.field("gettextureparameteriuiv", unsafe{if transmute::<_, *const c_void>(self.gettextureparameteriuiv) == (dummy_pfnglgettextureparameteriuivproc as *const c_void) {&null::<PFNGLGETTEXTUREPARAMETERIUIVPROC>()} else {&self.gettextureparameteriuiv}})
18732			.field("gettextureparameteriv", unsafe{if transmute::<_, *const c_void>(self.gettextureparameteriv) == (dummy_pfnglgettextureparameterivproc as *const c_void) {&null::<PFNGLGETTEXTUREPARAMETERIVPROC>()} else {&self.gettextureparameteriv}})
18733			.field("createvertexarrays", unsafe{if transmute::<_, *const c_void>(self.createvertexarrays) == (dummy_pfnglcreatevertexarraysproc as *const c_void) {&null::<PFNGLCREATEVERTEXARRAYSPROC>()} else {&self.createvertexarrays}})
18734			.field("disablevertexarrayattrib", unsafe{if transmute::<_, *const c_void>(self.disablevertexarrayattrib) == (dummy_pfngldisablevertexarrayattribproc as *const c_void) {&null::<PFNGLDISABLEVERTEXARRAYATTRIBPROC>()} else {&self.disablevertexarrayattrib}})
18735			.field("enablevertexarrayattrib", unsafe{if transmute::<_, *const c_void>(self.enablevertexarrayattrib) == (dummy_pfnglenablevertexarrayattribproc as *const c_void) {&null::<PFNGLENABLEVERTEXARRAYATTRIBPROC>()} else {&self.enablevertexarrayattrib}})
18736			.field("vertexarrayelementbuffer", unsafe{if transmute::<_, *const c_void>(self.vertexarrayelementbuffer) == (dummy_pfnglvertexarrayelementbufferproc as *const c_void) {&null::<PFNGLVERTEXARRAYELEMENTBUFFERPROC>()} else {&self.vertexarrayelementbuffer}})
18737			.field("vertexarrayvertexbuffer", unsafe{if transmute::<_, *const c_void>(self.vertexarrayvertexbuffer) == (dummy_pfnglvertexarrayvertexbufferproc as *const c_void) {&null::<PFNGLVERTEXARRAYVERTEXBUFFERPROC>()} else {&self.vertexarrayvertexbuffer}})
18738			.field("vertexarrayvertexbuffers", unsafe{if transmute::<_, *const c_void>(self.vertexarrayvertexbuffers) == (dummy_pfnglvertexarrayvertexbuffersproc as *const c_void) {&null::<PFNGLVERTEXARRAYVERTEXBUFFERSPROC>()} else {&self.vertexarrayvertexbuffers}})
18739			.field("vertexarrayattribbinding", unsafe{if transmute::<_, *const c_void>(self.vertexarrayattribbinding) == (dummy_pfnglvertexarrayattribbindingproc as *const c_void) {&null::<PFNGLVERTEXARRAYATTRIBBINDINGPROC>()} else {&self.vertexarrayattribbinding}})
18740			.field("vertexarrayattribformat", unsafe{if transmute::<_, *const c_void>(self.vertexarrayattribformat) == (dummy_pfnglvertexarrayattribformatproc as *const c_void) {&null::<PFNGLVERTEXARRAYATTRIBFORMATPROC>()} else {&self.vertexarrayattribformat}})
18741			.field("vertexarrayattribiformat", unsafe{if transmute::<_, *const c_void>(self.vertexarrayattribiformat) == (dummy_pfnglvertexarrayattribiformatproc as *const c_void) {&null::<PFNGLVERTEXARRAYATTRIBIFORMATPROC>()} else {&self.vertexarrayattribiformat}})
18742			.field("vertexarrayattriblformat", unsafe{if transmute::<_, *const c_void>(self.vertexarrayattriblformat) == (dummy_pfnglvertexarrayattriblformatproc as *const c_void) {&null::<PFNGLVERTEXARRAYATTRIBLFORMATPROC>()} else {&self.vertexarrayattriblformat}})
18743			.field("vertexarraybindingdivisor", unsafe{if transmute::<_, *const c_void>(self.vertexarraybindingdivisor) == (dummy_pfnglvertexarraybindingdivisorproc as *const c_void) {&null::<PFNGLVERTEXARRAYBINDINGDIVISORPROC>()} else {&self.vertexarraybindingdivisor}})
18744			.field("getvertexarrayiv", unsafe{if transmute::<_, *const c_void>(self.getvertexarrayiv) == (dummy_pfnglgetvertexarrayivproc as *const c_void) {&null::<PFNGLGETVERTEXARRAYIVPROC>()} else {&self.getvertexarrayiv}})
18745			.field("getvertexarrayindexediv", unsafe{if transmute::<_, *const c_void>(self.getvertexarrayindexediv) == (dummy_pfnglgetvertexarrayindexedivproc as *const c_void) {&null::<PFNGLGETVERTEXARRAYINDEXEDIVPROC>()} else {&self.getvertexarrayindexediv}})
18746			.field("getvertexarrayindexed64iv", unsafe{if transmute::<_, *const c_void>(self.getvertexarrayindexed64iv) == (dummy_pfnglgetvertexarrayindexed64ivproc as *const c_void) {&null::<PFNGLGETVERTEXARRAYINDEXED64IVPROC>()} else {&self.getvertexarrayindexed64iv}})
18747			.field("createsamplers", unsafe{if transmute::<_, *const c_void>(self.createsamplers) == (dummy_pfnglcreatesamplersproc as *const c_void) {&null::<PFNGLCREATESAMPLERSPROC>()} else {&self.createsamplers}})
18748			.field("createprogrampipelines", unsafe{if transmute::<_, *const c_void>(self.createprogrampipelines) == (dummy_pfnglcreateprogrampipelinesproc as *const c_void) {&null::<PFNGLCREATEPROGRAMPIPELINESPROC>()} else {&self.createprogrampipelines}})
18749			.field("createqueries", unsafe{if transmute::<_, *const c_void>(self.createqueries) == (dummy_pfnglcreatequeriesproc as *const c_void) {&null::<PFNGLCREATEQUERIESPROC>()} else {&self.createqueries}})
18750			.field("getquerybufferobjecti64v", unsafe{if transmute::<_, *const c_void>(self.getquerybufferobjecti64v) == (dummy_pfnglgetquerybufferobjecti64vproc as *const c_void) {&null::<PFNGLGETQUERYBUFFEROBJECTI64VPROC>()} else {&self.getquerybufferobjecti64v}})
18751			.field("getquerybufferobjectiv", unsafe{if transmute::<_, *const c_void>(self.getquerybufferobjectiv) == (dummy_pfnglgetquerybufferobjectivproc as *const c_void) {&null::<PFNGLGETQUERYBUFFEROBJECTIVPROC>()} else {&self.getquerybufferobjectiv}})
18752			.field("getquerybufferobjectui64v", unsafe{if transmute::<_, *const c_void>(self.getquerybufferobjectui64v) == (dummy_pfnglgetquerybufferobjectui64vproc as *const c_void) {&null::<PFNGLGETQUERYBUFFEROBJECTUI64VPROC>()} else {&self.getquerybufferobjectui64v}})
18753			.field("getquerybufferobjectuiv", unsafe{if transmute::<_, *const c_void>(self.getquerybufferobjectuiv) == (dummy_pfnglgetquerybufferobjectuivproc as *const c_void) {&null::<PFNGLGETQUERYBUFFEROBJECTUIVPROC>()} else {&self.getquerybufferobjectuiv}})
18754			.field("memorybarrierbyregion", unsafe{if transmute::<_, *const c_void>(self.memorybarrierbyregion) == (dummy_pfnglmemorybarrierbyregionproc as *const c_void) {&null::<PFNGLMEMORYBARRIERBYREGIONPROC>()} else {&self.memorybarrierbyregion}})
18755			.field("gettexturesubimage", unsafe{if transmute::<_, *const c_void>(self.gettexturesubimage) == (dummy_pfnglgettexturesubimageproc as *const c_void) {&null::<PFNGLGETTEXTURESUBIMAGEPROC>()} else {&self.gettexturesubimage}})
18756			.field("getcompressedtexturesubimage", unsafe{if transmute::<_, *const c_void>(self.getcompressedtexturesubimage) == (dummy_pfnglgetcompressedtexturesubimageproc as *const c_void) {&null::<PFNGLGETCOMPRESSEDTEXTURESUBIMAGEPROC>()} else {&self.getcompressedtexturesubimage}})
18757			.field("getgraphicsresetstatus", unsafe{if transmute::<_, *const c_void>(self.getgraphicsresetstatus) == (dummy_pfnglgetgraphicsresetstatusproc as *const c_void) {&null::<PFNGLGETGRAPHICSRESETSTATUSPROC>()} else {&self.getgraphicsresetstatus}})
18758			.field("getncompressedteximage", unsafe{if transmute::<_, *const c_void>(self.getncompressedteximage) == (dummy_pfnglgetncompressedteximageproc as *const c_void) {&null::<PFNGLGETNCOMPRESSEDTEXIMAGEPROC>()} else {&self.getncompressedteximage}})
18759			.field("getnteximage", unsafe{if transmute::<_, *const c_void>(self.getnteximage) == (dummy_pfnglgetnteximageproc as *const c_void) {&null::<PFNGLGETNTEXIMAGEPROC>()} else {&self.getnteximage}})
18760			.field("getnuniformdv", unsafe{if transmute::<_, *const c_void>(self.getnuniformdv) == (dummy_pfnglgetnuniformdvproc as *const c_void) {&null::<PFNGLGETNUNIFORMDVPROC>()} else {&self.getnuniformdv}})
18761			.field("getnuniformfv", unsafe{if transmute::<_, *const c_void>(self.getnuniformfv) == (dummy_pfnglgetnuniformfvproc as *const c_void) {&null::<PFNGLGETNUNIFORMFVPROC>()} else {&self.getnuniformfv}})
18762			.field("getnuniformiv", unsafe{if transmute::<_, *const c_void>(self.getnuniformiv) == (dummy_pfnglgetnuniformivproc as *const c_void) {&null::<PFNGLGETNUNIFORMIVPROC>()} else {&self.getnuniformiv}})
18763			.field("getnuniformuiv", unsafe{if transmute::<_, *const c_void>(self.getnuniformuiv) == (dummy_pfnglgetnuniformuivproc as *const c_void) {&null::<PFNGLGETNUNIFORMUIVPROC>()} else {&self.getnuniformuiv}})
18764			.field("readnpixels", unsafe{if transmute::<_, *const c_void>(self.readnpixels) == (dummy_pfnglreadnpixelsproc as *const c_void) {&null::<PFNGLREADNPIXELSPROC>()} else {&self.readnpixels}})
18765			.field("getnmapdv", unsafe{if transmute::<_, *const c_void>(self.getnmapdv) == (dummy_pfnglgetnmapdvproc as *const c_void) {&null::<PFNGLGETNMAPDVPROC>()} else {&self.getnmapdv}})
18766			.field("getnmapfv", unsafe{if transmute::<_, *const c_void>(self.getnmapfv) == (dummy_pfnglgetnmapfvproc as *const c_void) {&null::<PFNGLGETNMAPFVPROC>()} else {&self.getnmapfv}})
18767			.field("getnmapiv", unsafe{if transmute::<_, *const c_void>(self.getnmapiv) == (dummy_pfnglgetnmapivproc as *const c_void) {&null::<PFNGLGETNMAPIVPROC>()} else {&self.getnmapiv}})
18768			.field("getnpixelmapfv", unsafe{if transmute::<_, *const c_void>(self.getnpixelmapfv) == (dummy_pfnglgetnpixelmapfvproc as *const c_void) {&null::<PFNGLGETNPIXELMAPFVPROC>()} else {&self.getnpixelmapfv}})
18769			.field("getnpixelmapuiv", unsafe{if transmute::<_, *const c_void>(self.getnpixelmapuiv) == (dummy_pfnglgetnpixelmapuivproc as *const c_void) {&null::<PFNGLGETNPIXELMAPUIVPROC>()} else {&self.getnpixelmapuiv}})
18770			.field("getnpixelmapusv", unsafe{if transmute::<_, *const c_void>(self.getnpixelmapusv) == (dummy_pfnglgetnpixelmapusvproc as *const c_void) {&null::<PFNGLGETNPIXELMAPUSVPROC>()} else {&self.getnpixelmapusv}})
18771			.field("getnpolygonstipple", unsafe{if transmute::<_, *const c_void>(self.getnpolygonstipple) == (dummy_pfnglgetnpolygonstippleproc as *const c_void) {&null::<PFNGLGETNPOLYGONSTIPPLEPROC>()} else {&self.getnpolygonstipple}})
18772			.field("getncolortable", unsafe{if transmute::<_, *const c_void>(self.getncolortable) == (dummy_pfnglgetncolortableproc as *const c_void) {&null::<PFNGLGETNCOLORTABLEPROC>()} else {&self.getncolortable}})
18773			.field("getnconvolutionfilter", unsafe{if transmute::<_, *const c_void>(self.getnconvolutionfilter) == (dummy_pfnglgetnconvolutionfilterproc as *const c_void) {&null::<PFNGLGETNCONVOLUTIONFILTERPROC>()} else {&self.getnconvolutionfilter}})
18774			.field("getnseparablefilter", unsafe{if transmute::<_, *const c_void>(self.getnseparablefilter) == (dummy_pfnglgetnseparablefilterproc as *const c_void) {&null::<PFNGLGETNSEPARABLEFILTERPROC>()} else {&self.getnseparablefilter}})
18775			.field("getnhistogram", unsafe{if transmute::<_, *const c_void>(self.getnhistogram) == (dummy_pfnglgetnhistogramproc as *const c_void) {&null::<PFNGLGETNHISTOGRAMPROC>()} else {&self.getnhistogram}})
18776			.field("getnminmax", unsafe{if transmute::<_, *const c_void>(self.getnminmax) == (dummy_pfnglgetnminmaxproc as *const c_void) {&null::<PFNGLGETNMINMAXPROC>()} else {&self.getnminmax}})
18777			.field("texturebarrier", unsafe{if transmute::<_, *const c_void>(self.texturebarrier) == (dummy_pfngltexturebarrierproc as *const c_void) {&null::<PFNGLTEXTUREBARRIERPROC>()} else {&self.texturebarrier}})
18778			.finish()
18779		} else {
18780			f.debug_struct("Version45")
18781			.field("available", &self.available)
18782			.finish_non_exhaustive()
18783		}
18784	}
18785}
18786type PFNGLSPECIALIZESHADERPROC = extern "system" fn(GLuint, *const GLchar, GLuint, *const GLuint, *const GLuint);
18787type PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC = extern "system" fn(GLenum, *const c_void, GLintptr, GLsizei, GLsizei);
18788type PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC = extern "system" fn(GLenum, GLenum, *const c_void, GLintptr, GLsizei, GLsizei);
18789type PFNGLPOLYGONOFFSETCLAMPPROC = extern "system" fn(GLfloat, GLfloat, GLfloat);
18790extern "system" fn dummy_pfnglspecializeshaderproc (_: GLuint, _: *const GLchar, _: GLuint, _: *const GLuint, _: *const GLuint) {
18791	panic!("OpenGL function pointer `glSpecializeShader()` is null.")
18792}
18793extern "system" fn dummy_pfnglmultidrawarraysindirectcountproc (_: GLenum, _: *const c_void, _: GLintptr, _: GLsizei, _: GLsizei) {
18794	panic!("OpenGL function pointer `glMultiDrawArraysIndirectCount()` is null.")
18795}
18796extern "system" fn dummy_pfnglmultidrawelementsindirectcountproc (_: GLenum, _: GLenum, _: *const c_void, _: GLintptr, _: GLsizei, _: GLsizei) {
18797	panic!("OpenGL function pointer `glMultiDrawElementsIndirectCount()` is null.")
18798}
18799extern "system" fn dummy_pfnglpolygonoffsetclampproc (_: GLfloat, _: GLfloat, _: GLfloat) {
18800	panic!("OpenGL function pointer `glPolygonOffsetClamp()` is null.")
18801}
18802pub const GL_SHADER_BINARY_FORMAT_SPIR_V: GLenum = 0x9551;
18803pub const GL_SPIR_V_BINARY: GLenum = 0x9552;
18804pub const GL_PARAMETER_BUFFER: GLenum = 0x80EE;
18805pub const GL_PARAMETER_BUFFER_BINDING: GLenum = 0x80EF;
18806pub const GL_CONTEXT_FLAG_NO_ERROR_BIT: GLbitfield = 0x00000008;
18807pub const GL_VERTICES_SUBMITTED: GLenum = 0x82EE;
18808pub const GL_PRIMITIVES_SUBMITTED: GLenum = 0x82EF;
18809pub const GL_VERTEX_SHADER_INVOCATIONS: GLenum = 0x82F0;
18810pub const GL_TESS_CONTROL_SHADER_PATCHES: GLenum = 0x82F1;
18811pub const GL_TESS_EVALUATION_SHADER_INVOCATIONS: GLenum = 0x82F2;
18812pub const GL_GEOMETRY_SHADER_PRIMITIVES_EMITTED: GLenum = 0x82F3;
18813pub const GL_FRAGMENT_SHADER_INVOCATIONS: GLenum = 0x82F4;
18814pub const GL_COMPUTE_SHADER_INVOCATIONS: GLenum = 0x82F5;
18815pub const GL_CLIPPING_INPUT_PRIMITIVES: GLenum = 0x82F6;
18816pub const GL_CLIPPING_OUTPUT_PRIMITIVES: GLenum = 0x82F7;
18817pub const GL_POLYGON_OFFSET_CLAMP: GLenum = 0x8E1B;
18818pub const GL_SPIR_V_EXTENSIONS: GLenum = 0x9553;
18819pub const GL_NUM_SPIR_V_EXTENSIONS: GLenum = 0x9554;
18820pub const GL_TEXTURE_MAX_ANISOTROPY: GLenum = 0x84FE;
18821pub const GL_MAX_TEXTURE_MAX_ANISOTROPY: GLenum = 0x84FF;
18822pub const GL_TRANSFORM_FEEDBACK_OVERFLOW: GLenum = 0x82EC;
18823pub const GL_TRANSFORM_FEEDBACK_STREAM_OVERFLOW: GLenum = 0x82ED;
18824
18825pub trait GL_4_6 {
18826	fn glGetError(&self) -> GLenum;
18827	fn glSpecializeShader(&self, shader: GLuint, pEntryPoint: *const GLchar, numSpecializationConstants: GLuint, pConstantIndex: *const GLuint, pConstantValue: *const GLuint) -> Result<()>;
18828	fn glMultiDrawArraysIndirectCount(&self, mode: GLenum, indirect: *const c_void, drawcount: GLintptr, maxdrawcount: GLsizei, stride: GLsizei) -> Result<()>;
18829	fn glMultiDrawElementsIndirectCount(&self, mode: GLenum, type_: GLenum, indirect: *const c_void, drawcount: GLintptr, maxdrawcount: GLsizei, stride: GLsizei) -> Result<()>;
18830	fn glPolygonOffsetClamp(&self, factor: GLfloat, units: GLfloat, clamp: GLfloat) -> Result<()>;
18831}
18832
18833#[derive(Clone, Copy, PartialEq, Eq, Hash)]
18834pub struct Version46 {
18835	available: bool,
18836	geterror: PFNGLGETERRORPROC,
18837	specializeshader: PFNGLSPECIALIZESHADERPROC,
18838	multidrawarraysindirectcount: PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC,
18839	multidrawelementsindirectcount: PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC,
18840	polygonoffsetclamp: PFNGLPOLYGONOFFSETCLAMPPROC,
18841}
18842
18843impl GL_4_6 for Version46 {
18844	#[inline(always)]
18845	fn glGetError(&self) -> GLenum {
18846		(self.geterror)()
18847	}
18848	#[inline(always)]
18849	fn glSpecializeShader(&self, shader: GLuint, pEntryPoint: *const GLchar, numSpecializationConstants: GLuint, pConstantIndex: *const GLuint, pConstantValue: *const GLuint) -> Result<()> {
18850		let ret = process_catch("glSpecializeShader", catch_unwind(||(self.specializeshader)(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue)));
18851		#[cfg(feature = "diagnose")]
18852		if let Ok(ret) = ret {
18853			return to_result("glSpecializeShader", ret, self.glGetError());
18854		} else {
18855			return ret
18856		}
18857		#[cfg(not(feature = "diagnose"))]
18858		return ret;
18859	}
18860	#[inline(always)]
18861	fn glMultiDrawArraysIndirectCount(&self, mode: GLenum, indirect: *const c_void, drawcount: GLintptr, maxdrawcount: GLsizei, stride: GLsizei) -> Result<()> {
18862		let ret = process_catch("glMultiDrawArraysIndirectCount", catch_unwind(||(self.multidrawarraysindirectcount)(mode, indirect, drawcount, maxdrawcount, stride)));
18863		#[cfg(feature = "diagnose")]
18864		if let Ok(ret) = ret {
18865			return to_result("glMultiDrawArraysIndirectCount", ret, self.glGetError());
18866		} else {
18867			return ret
18868		}
18869		#[cfg(not(feature = "diagnose"))]
18870		return ret;
18871	}
18872	#[inline(always)]
18873	fn glMultiDrawElementsIndirectCount(&self, mode: GLenum, type_: GLenum, indirect: *const c_void, drawcount: GLintptr, maxdrawcount: GLsizei, stride: GLsizei) -> Result<()> {
18874		let ret = process_catch("glMultiDrawElementsIndirectCount", catch_unwind(||(self.multidrawelementsindirectcount)(mode, type_, indirect, drawcount, maxdrawcount, stride)));
18875		#[cfg(feature = "diagnose")]
18876		if let Ok(ret) = ret {
18877			return to_result("glMultiDrawElementsIndirectCount", ret, self.glGetError());
18878		} else {
18879			return ret
18880		}
18881		#[cfg(not(feature = "diagnose"))]
18882		return ret;
18883	}
18884	#[inline(always)]
18885	fn glPolygonOffsetClamp(&self, factor: GLfloat, units: GLfloat, clamp: GLfloat) -> Result<()> {
18886		let ret = process_catch("glPolygonOffsetClamp", catch_unwind(||(self.polygonoffsetclamp)(factor, units, clamp)));
18887		#[cfg(feature = "diagnose")]
18888		if let Ok(ret) = ret {
18889			return to_result("glPolygonOffsetClamp", ret, self.glGetError());
18890		} else {
18891			return ret
18892		}
18893		#[cfg(not(feature = "diagnose"))]
18894		return ret;
18895	}
18896}
18897
18898impl Version46 {
18899	pub fn new(base: impl GL_1_0, mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Self {
18900		let (_spec, major, minor, release) = base.get_version();
18901		if (major, minor, release) < (4, 6, 0) {
18902			return Self::default();
18903		}
18904		Self {
18905			available: true,
18906			geterror: {let proc = get_proc_address("glGetError"); if proc == null() {dummy_pfnglgeterrorproc} else {unsafe{transmute(proc)}}},
18907			specializeshader: {let proc = get_proc_address("glSpecializeShader"); if proc == null() {dummy_pfnglspecializeshaderproc} else {unsafe{transmute(proc)}}},
18908			multidrawarraysindirectcount: {let proc = get_proc_address("glMultiDrawArraysIndirectCount"); if proc == null() {dummy_pfnglmultidrawarraysindirectcountproc} else {unsafe{transmute(proc)}}},
18909			multidrawelementsindirectcount: {let proc = get_proc_address("glMultiDrawElementsIndirectCount"); if proc == null() {dummy_pfnglmultidrawelementsindirectcountproc} else {unsafe{transmute(proc)}}},
18910			polygonoffsetclamp: {let proc = get_proc_address("glPolygonOffsetClamp"); if proc == null() {dummy_pfnglpolygonoffsetclampproc} else {unsafe{transmute(proc)}}},
18911		}
18912	}
18913	#[inline(always)]
18914	pub fn get_available(&self) -> bool {
18915		self.available
18916	}
18917}
18918
18919impl Default for Version46 {
18920	fn default() -> Self {
18921		Self {
18922			available: false,
18923			geterror: dummy_pfnglgeterrorproc,
18924			specializeshader: dummy_pfnglspecializeshaderproc,
18925			multidrawarraysindirectcount: dummy_pfnglmultidrawarraysindirectcountproc,
18926			multidrawelementsindirectcount: dummy_pfnglmultidrawelementsindirectcountproc,
18927			polygonoffsetclamp: dummy_pfnglpolygonoffsetclampproc,
18928		}
18929	}
18930}
18931impl Debug for Version46 {
18932	fn fmt(&self, f: &mut Formatter) -> fmt::Result {
18933		if self.available {
18934			f.debug_struct("Version46")
18935			.field("available", &self.available)
18936			.field("specializeshader", unsafe{if transmute::<_, *const c_void>(self.specializeshader) == (dummy_pfnglspecializeshaderproc as *const c_void) {&null::<PFNGLSPECIALIZESHADERPROC>()} else {&self.specializeshader}})
18937			.field("multidrawarraysindirectcount", unsafe{if transmute::<_, *const c_void>(self.multidrawarraysindirectcount) == (dummy_pfnglmultidrawarraysindirectcountproc as *const c_void) {&null::<PFNGLMULTIDRAWARRAYSINDIRECTCOUNTPROC>()} else {&self.multidrawarraysindirectcount}})
18938			.field("multidrawelementsindirectcount", unsafe{if transmute::<_, *const c_void>(self.multidrawelementsindirectcount) == (dummy_pfnglmultidrawelementsindirectcountproc as *const c_void) {&null::<PFNGLMULTIDRAWELEMENTSINDIRECTCOUNTPROC>()} else {&self.multidrawelementsindirectcount}})
18939			.field("polygonoffsetclamp", unsafe{if transmute::<_, *const c_void>(self.polygonoffsetclamp) == (dummy_pfnglpolygonoffsetclampproc as *const c_void) {&null::<PFNGLPOLYGONOFFSETCLAMPPROC>()} else {&self.polygonoffsetclamp}})
18940			.finish()
18941		} else {
18942			f.debug_struct("Version46")
18943			.field("available", &self.available)
18944			.finish_non_exhaustive()
18945		}
18946	}
18947}
18948
18949#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
18950pub struct GLCore {
18951	pub version_1_0: Version10,
18952	pub version_1_1: Version11,
18953	pub version_1_2: Version12,
18954	pub version_1_3: Version13,
18955	pub version_1_4: Version14,
18956	pub version_1_5: Version15,
18957	pub version_2_0: Version20,
18958	pub version_2_1: Version21,
18959	pub version_3_0: Version30,
18960	pub version_3_1: Version31,
18961	pub version_3_2: Version32,
18962	pub version_3_3: Version33,
18963	pub version_4_0: Version40,
18964	pub version_4_1: Version41,
18965	pub version_4_2: Version42,
18966	pub version_4_3: Version43,
18967	pub version_4_4: Version44,
18968	pub version_4_5: Version45,
18969	pub version_4_6: Version46,
18970}
18971
18972impl GL_1_0 for GLCore {
18973	#[inline(always)]
18974	fn glCullFace(&self, mode: GLenum) -> Result<()> {
18975		let ret = process_catch("glCullFace", catch_unwind(||(self.version_1_0.cullface)(mode)));
18976		#[cfg(feature = "diagnose")]
18977		if let Ok(ret) = ret {
18978			return to_result("glCullFace", ret, (self.version_1_0.geterror)());
18979		} else {
18980			return ret
18981		}
18982		#[cfg(not(feature = "diagnose"))]
18983		return ret;
18984	}
18985	#[inline(always)]
18986	fn glFrontFace(&self, mode: GLenum) -> Result<()> {
18987		let ret = process_catch("glFrontFace", catch_unwind(||(self.version_1_0.frontface)(mode)));
18988		#[cfg(feature = "diagnose")]
18989		if let Ok(ret) = ret {
18990			return to_result("glFrontFace", ret, (self.version_1_0.geterror)());
18991		} else {
18992			return ret
18993		}
18994		#[cfg(not(feature = "diagnose"))]
18995		return ret;
18996	}
18997	#[inline(always)]
18998	fn glHint(&self, target: GLenum, mode: GLenum) -> Result<()> {
18999		let ret = process_catch("glHint", catch_unwind(||(self.version_1_0.hint)(target, mode)));
19000		#[cfg(feature = "diagnose")]
19001		if let Ok(ret) = ret {
19002			return to_result("glHint", ret, (self.version_1_0.geterror)());
19003		} else {
19004			return ret
19005		}
19006		#[cfg(not(feature = "diagnose"))]
19007		return ret;
19008	}
19009	#[inline(always)]
19010	fn glLineWidth(&self, width: GLfloat) -> Result<()> {
19011		let ret = process_catch("glLineWidth", catch_unwind(||(self.version_1_0.linewidth)(width)));
19012		#[cfg(feature = "diagnose")]
19013		if let Ok(ret) = ret {
19014			return to_result("glLineWidth", ret, (self.version_1_0.geterror)());
19015		} else {
19016			return ret
19017		}
19018		#[cfg(not(feature = "diagnose"))]
19019		return ret;
19020	}
19021	#[inline(always)]
19022	fn glPointSize(&self, size: GLfloat) -> Result<()> {
19023		let ret = process_catch("glPointSize", catch_unwind(||(self.version_1_0.pointsize)(size)));
19024		#[cfg(feature = "diagnose")]
19025		if let Ok(ret) = ret {
19026			return to_result("glPointSize", ret, (self.version_1_0.geterror)());
19027		} else {
19028			return ret
19029		}
19030		#[cfg(not(feature = "diagnose"))]
19031		return ret;
19032	}
19033	#[inline(always)]
19034	fn glPolygonMode(&self, face: GLenum, mode: GLenum) -> Result<()> {
19035		let ret = process_catch("glPolygonMode", catch_unwind(||(self.version_1_0.polygonmode)(face, mode)));
19036		#[cfg(feature = "diagnose")]
19037		if let Ok(ret) = ret {
19038			return to_result("glPolygonMode", ret, (self.version_1_0.geterror)());
19039		} else {
19040			return ret
19041		}
19042		#[cfg(not(feature = "diagnose"))]
19043		return ret;
19044	}
19045	#[inline(always)]
19046	fn glScissor(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
19047		let ret = process_catch("glScissor", catch_unwind(||(self.version_1_0.scissor)(x, y, width, height)));
19048		#[cfg(feature = "diagnose")]
19049		if let Ok(ret) = ret {
19050			return to_result("glScissor", ret, (self.version_1_0.geterror)());
19051		} else {
19052			return ret
19053		}
19054		#[cfg(not(feature = "diagnose"))]
19055		return ret;
19056	}
19057	#[inline(always)]
19058	fn glTexParameterf(&self, target: GLenum, pname: GLenum, param: GLfloat) -> Result<()> {
19059		let ret = process_catch("glTexParameterf", catch_unwind(||(self.version_1_0.texparameterf)(target, pname, param)));
19060		#[cfg(feature = "diagnose")]
19061		if let Ok(ret) = ret {
19062			return to_result("glTexParameterf", ret, (self.version_1_0.geterror)());
19063		} else {
19064			return ret
19065		}
19066		#[cfg(not(feature = "diagnose"))]
19067		return ret;
19068	}
19069	#[inline(always)]
19070	fn glTexParameterfv(&self, target: GLenum, pname: GLenum, params: *const GLfloat) -> Result<()> {
19071		let ret = process_catch("glTexParameterfv", catch_unwind(||(self.version_1_0.texparameterfv)(target, pname, params)));
19072		#[cfg(feature = "diagnose")]
19073		if let Ok(ret) = ret {
19074			return to_result("glTexParameterfv", ret, (self.version_1_0.geterror)());
19075		} else {
19076			return ret
19077		}
19078		#[cfg(not(feature = "diagnose"))]
19079		return ret;
19080	}
19081	#[inline(always)]
19082	fn glTexParameteri(&self, target: GLenum, pname: GLenum, param: GLint) -> Result<()> {
19083		let ret = process_catch("glTexParameteri", catch_unwind(||(self.version_1_0.texparameteri)(target, pname, param)));
19084		#[cfg(feature = "diagnose")]
19085		if let Ok(ret) = ret {
19086			return to_result("glTexParameteri", ret, (self.version_1_0.geterror)());
19087		} else {
19088			return ret
19089		}
19090		#[cfg(not(feature = "diagnose"))]
19091		return ret;
19092	}
19093	#[inline(always)]
19094	fn glTexParameteriv(&self, target: GLenum, pname: GLenum, params: *const GLint) -> Result<()> {
19095		let ret = process_catch("glTexParameteriv", catch_unwind(||(self.version_1_0.texparameteriv)(target, pname, params)));
19096		#[cfg(feature = "diagnose")]
19097		if let Ok(ret) = ret {
19098			return to_result("glTexParameteriv", ret, (self.version_1_0.geterror)());
19099		} else {
19100			return ret
19101		}
19102		#[cfg(not(feature = "diagnose"))]
19103		return ret;
19104	}
19105	#[inline(always)]
19106	fn glTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
19107		let ret = process_catch("glTexImage1D", catch_unwind(||(self.version_1_0.teximage1d)(target, level, internalformat, width, border, format, type_, pixels)));
19108		#[cfg(feature = "diagnose")]
19109		if let Ok(ret) = ret {
19110			return to_result("glTexImage1D", ret, (self.version_1_0.geterror)());
19111		} else {
19112			return ret
19113		}
19114		#[cfg(not(feature = "diagnose"))]
19115		return ret;
19116	}
19117	#[inline(always)]
19118	fn glTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
19119		let ret = process_catch("glTexImage2D", catch_unwind(||(self.version_1_0.teximage2d)(target, level, internalformat, width, height, border, format, type_, pixels)));
19120		#[cfg(feature = "diagnose")]
19121		if let Ok(ret) = ret {
19122			return to_result("glTexImage2D", ret, (self.version_1_0.geterror)());
19123		} else {
19124			return ret
19125		}
19126		#[cfg(not(feature = "diagnose"))]
19127		return ret;
19128	}
19129	#[inline(always)]
19130	fn glDrawBuffer(&self, buf: GLenum) -> Result<()> {
19131		let ret = process_catch("glDrawBuffer", catch_unwind(||(self.version_1_0.drawbuffer)(buf)));
19132		#[cfg(feature = "diagnose")]
19133		if let Ok(ret) = ret {
19134			return to_result("glDrawBuffer", ret, (self.version_1_0.geterror)());
19135		} else {
19136			return ret
19137		}
19138		#[cfg(not(feature = "diagnose"))]
19139		return ret;
19140	}
19141	#[inline(always)]
19142	fn glClear(&self, mask: GLbitfield) -> Result<()> {
19143		let ret = process_catch("glClear", catch_unwind(||(self.version_1_0.clear)(mask)));
19144		#[cfg(feature = "diagnose")]
19145		if let Ok(ret) = ret {
19146			return to_result("glClear", ret, (self.version_1_0.geterror)());
19147		} else {
19148			return ret
19149		}
19150		#[cfg(not(feature = "diagnose"))]
19151		return ret;
19152	}
19153	#[inline(always)]
19154	fn glClearColor(&self, red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat) -> Result<()> {
19155		let ret = process_catch("glClearColor", catch_unwind(||(self.version_1_0.clearcolor)(red, green, blue, alpha)));
19156		#[cfg(feature = "diagnose")]
19157		if let Ok(ret) = ret {
19158			return to_result("glClearColor", ret, (self.version_1_0.geterror)());
19159		} else {
19160			return ret
19161		}
19162		#[cfg(not(feature = "diagnose"))]
19163		return ret;
19164	}
19165	#[inline(always)]
19166	fn glClearStencil(&self, s: GLint) -> Result<()> {
19167		let ret = process_catch("glClearStencil", catch_unwind(||(self.version_1_0.clearstencil)(s)));
19168		#[cfg(feature = "diagnose")]
19169		if let Ok(ret) = ret {
19170			return to_result("glClearStencil", ret, (self.version_1_0.geterror)());
19171		} else {
19172			return ret
19173		}
19174		#[cfg(not(feature = "diagnose"))]
19175		return ret;
19176	}
19177	#[inline(always)]
19178	fn glClearDepth(&self, depth: GLdouble) -> Result<()> {
19179		let ret = process_catch("glClearDepth", catch_unwind(||(self.version_1_0.cleardepth)(depth)));
19180		#[cfg(feature = "diagnose")]
19181		if let Ok(ret) = ret {
19182			return to_result("glClearDepth", ret, (self.version_1_0.geterror)());
19183		} else {
19184			return ret
19185		}
19186		#[cfg(not(feature = "diagnose"))]
19187		return ret;
19188	}
19189	#[inline(always)]
19190	fn glStencilMask(&self, mask: GLuint) -> Result<()> {
19191		let ret = process_catch("glStencilMask", catch_unwind(||(self.version_1_0.stencilmask)(mask)));
19192		#[cfg(feature = "diagnose")]
19193		if let Ok(ret) = ret {
19194			return to_result("glStencilMask", ret, (self.version_1_0.geterror)());
19195		} else {
19196			return ret
19197		}
19198		#[cfg(not(feature = "diagnose"))]
19199		return ret;
19200	}
19201	#[inline(always)]
19202	fn glColorMask(&self, red: GLboolean, green: GLboolean, blue: GLboolean, alpha: GLboolean) -> Result<()> {
19203		let ret = process_catch("glColorMask", catch_unwind(||(self.version_1_0.colormask)(red, green, blue, alpha)));
19204		#[cfg(feature = "diagnose")]
19205		if let Ok(ret) = ret {
19206			return to_result("glColorMask", ret, (self.version_1_0.geterror)());
19207		} else {
19208			return ret
19209		}
19210		#[cfg(not(feature = "diagnose"))]
19211		return ret;
19212	}
19213	#[inline(always)]
19214	fn glDepthMask(&self, flag: GLboolean) -> Result<()> {
19215		let ret = process_catch("glDepthMask", catch_unwind(||(self.version_1_0.depthmask)(flag)));
19216		#[cfg(feature = "diagnose")]
19217		if let Ok(ret) = ret {
19218			return to_result("glDepthMask", ret, (self.version_1_0.geterror)());
19219		} else {
19220			return ret
19221		}
19222		#[cfg(not(feature = "diagnose"))]
19223		return ret;
19224	}
19225	#[inline(always)]
19226	fn glDisable(&self, cap: GLenum) -> Result<()> {
19227		let ret = process_catch("glDisable", catch_unwind(||(self.version_1_0.disable)(cap)));
19228		#[cfg(feature = "diagnose")]
19229		if let Ok(ret) = ret {
19230			return to_result("glDisable", ret, (self.version_1_0.geterror)());
19231		} else {
19232			return ret
19233		}
19234		#[cfg(not(feature = "diagnose"))]
19235		return ret;
19236	}
19237	#[inline(always)]
19238	fn glEnable(&self, cap: GLenum) -> Result<()> {
19239		let ret = process_catch("glEnable", catch_unwind(||(self.version_1_0.enable)(cap)));
19240		#[cfg(feature = "diagnose")]
19241		if let Ok(ret) = ret {
19242			return to_result("glEnable", ret, (self.version_1_0.geterror)());
19243		} else {
19244			return ret
19245		}
19246		#[cfg(not(feature = "diagnose"))]
19247		return ret;
19248	}
19249	#[inline(always)]
19250	fn glFinish(&self) -> Result<()> {
19251		let ret = process_catch("glFinish", catch_unwind(||(self.version_1_0.finish)()));
19252		#[cfg(feature = "diagnose")]
19253		if let Ok(ret) = ret {
19254			return to_result("glFinish", ret, (self.version_1_0.geterror)());
19255		} else {
19256			return ret
19257		}
19258		#[cfg(not(feature = "diagnose"))]
19259		return ret;
19260	}
19261	#[inline(always)]
19262	fn glFlush(&self) -> Result<()> {
19263		let ret = process_catch("glFlush", catch_unwind(||(self.version_1_0.flush)()));
19264		#[cfg(feature = "diagnose")]
19265		if let Ok(ret) = ret {
19266			return to_result("glFlush", ret, (self.version_1_0.geterror)());
19267		} else {
19268			return ret
19269		}
19270		#[cfg(not(feature = "diagnose"))]
19271		return ret;
19272	}
19273	#[inline(always)]
19274	fn glBlendFunc(&self, sfactor: GLenum, dfactor: GLenum) -> Result<()> {
19275		let ret = process_catch("glBlendFunc", catch_unwind(||(self.version_1_0.blendfunc)(sfactor, dfactor)));
19276		#[cfg(feature = "diagnose")]
19277		if let Ok(ret) = ret {
19278			return to_result("glBlendFunc", ret, (self.version_1_0.geterror)());
19279		} else {
19280			return ret
19281		}
19282		#[cfg(not(feature = "diagnose"))]
19283		return ret;
19284	}
19285	#[inline(always)]
19286	fn glLogicOp(&self, opcode: GLenum) -> Result<()> {
19287		let ret = process_catch("glLogicOp", catch_unwind(||(self.version_1_0.logicop)(opcode)));
19288		#[cfg(feature = "diagnose")]
19289		if let Ok(ret) = ret {
19290			return to_result("glLogicOp", ret, (self.version_1_0.geterror)());
19291		} else {
19292			return ret
19293		}
19294		#[cfg(not(feature = "diagnose"))]
19295		return ret;
19296	}
19297	#[inline(always)]
19298	fn glStencilFunc(&self, func: GLenum, ref_: GLint, mask: GLuint) -> Result<()> {
19299		let ret = process_catch("glStencilFunc", catch_unwind(||(self.version_1_0.stencilfunc)(func, ref_, mask)));
19300		#[cfg(feature = "diagnose")]
19301		if let Ok(ret) = ret {
19302			return to_result("glStencilFunc", ret, (self.version_1_0.geterror)());
19303		} else {
19304			return ret
19305		}
19306		#[cfg(not(feature = "diagnose"))]
19307		return ret;
19308	}
19309	#[inline(always)]
19310	fn glStencilOp(&self, fail: GLenum, zfail: GLenum, zpass: GLenum) -> Result<()> {
19311		let ret = process_catch("glStencilOp", catch_unwind(||(self.version_1_0.stencilop)(fail, zfail, zpass)));
19312		#[cfg(feature = "diagnose")]
19313		if let Ok(ret) = ret {
19314			return to_result("glStencilOp", ret, (self.version_1_0.geterror)());
19315		} else {
19316			return ret
19317		}
19318		#[cfg(not(feature = "diagnose"))]
19319		return ret;
19320	}
19321	#[inline(always)]
19322	fn glDepthFunc(&self, func: GLenum) -> Result<()> {
19323		let ret = process_catch("glDepthFunc", catch_unwind(||(self.version_1_0.depthfunc)(func)));
19324		#[cfg(feature = "diagnose")]
19325		if let Ok(ret) = ret {
19326			return to_result("glDepthFunc", ret, (self.version_1_0.geterror)());
19327		} else {
19328			return ret
19329		}
19330		#[cfg(not(feature = "diagnose"))]
19331		return ret;
19332	}
19333	#[inline(always)]
19334	fn glPixelStoref(&self, pname: GLenum, param: GLfloat) -> Result<()> {
19335		let ret = process_catch("glPixelStoref", catch_unwind(||(self.version_1_0.pixelstoref)(pname, param)));
19336		#[cfg(feature = "diagnose")]
19337		if let Ok(ret) = ret {
19338			return to_result("glPixelStoref", ret, (self.version_1_0.geterror)());
19339		} else {
19340			return ret
19341		}
19342		#[cfg(not(feature = "diagnose"))]
19343		return ret;
19344	}
19345	#[inline(always)]
19346	fn glPixelStorei(&self, pname: GLenum, param: GLint) -> Result<()> {
19347		let ret = process_catch("glPixelStorei", catch_unwind(||(self.version_1_0.pixelstorei)(pname, param)));
19348		#[cfg(feature = "diagnose")]
19349		if let Ok(ret) = ret {
19350			return to_result("glPixelStorei", ret, (self.version_1_0.geterror)());
19351		} else {
19352			return ret
19353		}
19354		#[cfg(not(feature = "diagnose"))]
19355		return ret;
19356	}
19357	#[inline(always)]
19358	fn glReadBuffer(&self, src: GLenum) -> Result<()> {
19359		let ret = process_catch("glReadBuffer", catch_unwind(||(self.version_1_0.readbuffer)(src)));
19360		#[cfg(feature = "diagnose")]
19361		if let Ok(ret) = ret {
19362			return to_result("glReadBuffer", ret, (self.version_1_0.geterror)());
19363		} else {
19364			return ret
19365		}
19366		#[cfg(not(feature = "diagnose"))]
19367		return ret;
19368	}
19369	#[inline(always)]
19370	fn glReadPixels(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *mut c_void) -> Result<()> {
19371		let ret = process_catch("glReadPixels", catch_unwind(||(self.version_1_0.readpixels)(x, y, width, height, format, type_, pixels)));
19372		#[cfg(feature = "diagnose")]
19373		if let Ok(ret) = ret {
19374			return to_result("glReadPixels", ret, (self.version_1_0.geterror)());
19375		} else {
19376			return ret
19377		}
19378		#[cfg(not(feature = "diagnose"))]
19379		return ret;
19380	}
19381	#[inline(always)]
19382	fn glGetBooleanv(&self, pname: GLenum, data: *mut GLboolean) -> Result<()> {
19383		let ret = process_catch("glGetBooleanv", catch_unwind(||(self.version_1_0.getbooleanv)(pname, data)));
19384		#[cfg(feature = "diagnose")]
19385		if let Ok(ret) = ret {
19386			return to_result("glGetBooleanv", ret, (self.version_1_0.geterror)());
19387		} else {
19388			return ret
19389		}
19390		#[cfg(not(feature = "diagnose"))]
19391		return ret;
19392	}
19393	#[inline(always)]
19394	fn glGetDoublev(&self, pname: GLenum, data: *mut GLdouble) -> Result<()> {
19395		let ret = process_catch("glGetDoublev", catch_unwind(||(self.version_1_0.getdoublev)(pname, data)));
19396		#[cfg(feature = "diagnose")]
19397		if let Ok(ret) = ret {
19398			return to_result("glGetDoublev", ret, (self.version_1_0.geterror)());
19399		} else {
19400			return ret
19401		}
19402		#[cfg(not(feature = "diagnose"))]
19403		return ret;
19404	}
19405	#[inline(always)]
19406	fn glGetError(&self) -> GLenum {
19407		(self.version_1_0.geterror)()
19408	}
19409	#[inline(always)]
19410	fn glGetFloatv(&self, pname: GLenum, data: *mut GLfloat) -> Result<()> {
19411		let ret = process_catch("glGetFloatv", catch_unwind(||(self.version_1_0.getfloatv)(pname, data)));
19412		#[cfg(feature = "diagnose")]
19413		if let Ok(ret) = ret {
19414			return to_result("glGetFloatv", ret, (self.version_1_0.geterror)());
19415		} else {
19416			return ret
19417		}
19418		#[cfg(not(feature = "diagnose"))]
19419		return ret;
19420	}
19421	#[inline(always)]
19422	fn glGetIntegerv(&self, pname: GLenum, data: *mut GLint) -> Result<()> {
19423		let ret = process_catch("glGetIntegerv", catch_unwind(||(self.version_1_0.getintegerv)(pname, data)));
19424		#[cfg(feature = "diagnose")]
19425		if let Ok(ret) = ret {
19426			return to_result("glGetIntegerv", ret, (self.version_1_0.geterror)());
19427		} else {
19428			return ret
19429		}
19430		#[cfg(not(feature = "diagnose"))]
19431		return ret;
19432	}
19433	#[inline(always)]
19434	fn glGetString(&self, name: GLenum) -> Result<&'static str> {
19435		let ret = process_catch("glGetString", catch_unwind(||unsafe{CStr::from_ptr((self.version_1_0.getstring)(name) as *const i8)}.to_str().unwrap()));
19436		#[cfg(feature = "diagnose")]
19437		if let Ok(ret) = ret {
19438			return to_result("glGetString", ret, (self.version_1_0.geterror)());
19439		} else {
19440			return ret
19441		}
19442		#[cfg(not(feature = "diagnose"))]
19443		return ret;
19444	}
19445	#[inline(always)]
19446	fn glGetTexImage(&self, target: GLenum, level: GLint, format: GLenum, type_: GLenum, pixels: *mut c_void) -> Result<()> {
19447		let ret = process_catch("glGetTexImage", catch_unwind(||(self.version_1_0.getteximage)(target, level, format, type_, pixels)));
19448		#[cfg(feature = "diagnose")]
19449		if let Ok(ret) = ret {
19450			return to_result("glGetTexImage", ret, (self.version_1_0.geterror)());
19451		} else {
19452			return ret
19453		}
19454		#[cfg(not(feature = "diagnose"))]
19455		return ret;
19456	}
19457	#[inline(always)]
19458	fn glGetTexParameterfv(&self, target: GLenum, pname: GLenum, params: *mut GLfloat) -> Result<()> {
19459		let ret = process_catch("glGetTexParameterfv", catch_unwind(||(self.version_1_0.gettexparameterfv)(target, pname, params)));
19460		#[cfg(feature = "diagnose")]
19461		if let Ok(ret) = ret {
19462			return to_result("glGetTexParameterfv", ret, (self.version_1_0.geterror)());
19463		} else {
19464			return ret
19465		}
19466		#[cfg(not(feature = "diagnose"))]
19467		return ret;
19468	}
19469	#[inline(always)]
19470	fn glGetTexParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
19471		let ret = process_catch("glGetTexParameteriv", catch_unwind(||(self.version_1_0.gettexparameteriv)(target, pname, params)));
19472		#[cfg(feature = "diagnose")]
19473		if let Ok(ret) = ret {
19474			return to_result("glGetTexParameteriv", ret, (self.version_1_0.geterror)());
19475		} else {
19476			return ret
19477		}
19478		#[cfg(not(feature = "diagnose"))]
19479		return ret;
19480	}
19481	#[inline(always)]
19482	fn glGetTexLevelParameterfv(&self, target: GLenum, level: GLint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
19483		let ret = process_catch("glGetTexLevelParameterfv", catch_unwind(||(self.version_1_0.gettexlevelparameterfv)(target, level, pname, params)));
19484		#[cfg(feature = "diagnose")]
19485		if let Ok(ret) = ret {
19486			return to_result("glGetTexLevelParameterfv", ret, (self.version_1_0.geterror)());
19487		} else {
19488			return ret
19489		}
19490		#[cfg(not(feature = "diagnose"))]
19491		return ret;
19492	}
19493	#[inline(always)]
19494	fn glGetTexLevelParameteriv(&self, target: GLenum, level: GLint, pname: GLenum, params: *mut GLint) -> Result<()> {
19495		let ret = process_catch("glGetTexLevelParameteriv", catch_unwind(||(self.version_1_0.gettexlevelparameteriv)(target, level, pname, params)));
19496		#[cfg(feature = "diagnose")]
19497		if let Ok(ret) = ret {
19498			return to_result("glGetTexLevelParameteriv", ret, (self.version_1_0.geterror)());
19499		} else {
19500			return ret
19501		}
19502		#[cfg(not(feature = "diagnose"))]
19503		return ret;
19504	}
19505	#[inline(always)]
19506	fn glIsEnabled(&self, cap: GLenum) -> Result<GLboolean> {
19507		let ret = process_catch("glIsEnabled", catch_unwind(||(self.version_1_0.isenabled)(cap)));
19508		#[cfg(feature = "diagnose")]
19509		if let Ok(ret) = ret {
19510			return to_result("glIsEnabled", ret, (self.version_1_0.geterror)());
19511		} else {
19512			return ret
19513		}
19514		#[cfg(not(feature = "diagnose"))]
19515		return ret;
19516	}
19517	#[inline(always)]
19518	fn glDepthRange(&self, n: GLdouble, f: GLdouble) -> Result<()> {
19519		let ret = process_catch("glDepthRange", catch_unwind(||(self.version_1_0.depthrange)(n, f)));
19520		#[cfg(feature = "diagnose")]
19521		if let Ok(ret) = ret {
19522			return to_result("glDepthRange", ret, (self.version_1_0.geterror)());
19523		} else {
19524			return ret
19525		}
19526		#[cfg(not(feature = "diagnose"))]
19527		return ret;
19528	}
19529	#[inline(always)]
19530	fn glViewport(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
19531		let ret = process_catch("glViewport", catch_unwind(||(self.version_1_0.viewport)(x, y, width, height)));
19532		#[cfg(feature = "diagnose")]
19533		if let Ok(ret) = ret {
19534			return to_result("glViewport", ret, (self.version_1_0.geterror)());
19535		} else {
19536			return ret
19537		}
19538		#[cfg(not(feature = "diagnose"))]
19539		return ret;
19540	}
19541	#[inline(always)]
19542	fn get_version(&self) -> (&'static str, u32, u32, u32) {
19543		self.version_1_0.get_version()
19544	}
19545	#[inline(always)]
19546	fn get_vendor(&self) -> &'static str {
19547		self.version_1_0.get_vendor()
19548	}
19549	#[inline(always)]
19550	fn get_renderer(&self) -> &'static str {
19551		self.version_1_0.get_renderer()
19552	}
19553	#[inline(always)]
19554	fn get_versionstr(&self) -> &'static str {
19555		self.version_1_0.get_versionstr()
19556	}
19557}
19558
19559impl GL_1_1 for GLCore {
19560	#[inline(always)]
19561	fn glGetError(&self) -> GLenum {
19562		(self.version_1_1.geterror)()
19563	}
19564	#[inline(always)]
19565	fn glDrawArrays(&self, mode: GLenum, first: GLint, count: GLsizei) -> Result<()> {
19566		let ret = process_catch("glDrawArrays", catch_unwind(||(self.version_1_1.drawarrays)(mode, first, count)));
19567		#[cfg(feature = "diagnose")]
19568		if let Ok(ret) = ret {
19569			return to_result("glDrawArrays", ret, (self.version_1_1.geterror)());
19570		} else {
19571			return ret
19572		}
19573		#[cfg(not(feature = "diagnose"))]
19574		return ret;
19575	}
19576	#[inline(always)]
19577	fn glDrawElements(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void) -> Result<()> {
19578		let ret = process_catch("glDrawElements", catch_unwind(||(self.version_1_1.drawelements)(mode, count, type_, indices)));
19579		#[cfg(feature = "diagnose")]
19580		if let Ok(ret) = ret {
19581			return to_result("glDrawElements", ret, (self.version_1_1.geterror)());
19582		} else {
19583			return ret
19584		}
19585		#[cfg(not(feature = "diagnose"))]
19586		return ret;
19587	}
19588	#[inline(always)]
19589	fn glGetPointerv(&self, pname: GLenum, params: *mut *mut c_void) -> Result<()> {
19590		let ret = process_catch("glGetPointerv", catch_unwind(||(self.version_1_1.getpointerv)(pname, params)));
19591		#[cfg(feature = "diagnose")]
19592		if let Ok(ret) = ret {
19593			return to_result("glGetPointerv", ret, (self.version_1_1.geterror)());
19594		} else {
19595			return ret
19596		}
19597		#[cfg(not(feature = "diagnose"))]
19598		return ret;
19599	}
19600	#[inline(always)]
19601	fn glPolygonOffset(&self, factor: GLfloat, units: GLfloat) -> Result<()> {
19602		let ret = process_catch("glPolygonOffset", catch_unwind(||(self.version_1_1.polygonoffset)(factor, units)));
19603		#[cfg(feature = "diagnose")]
19604		if let Ok(ret) = ret {
19605			return to_result("glPolygonOffset", ret, (self.version_1_1.geterror)());
19606		} else {
19607			return ret
19608		}
19609		#[cfg(not(feature = "diagnose"))]
19610		return ret;
19611	}
19612	#[inline(always)]
19613	fn glCopyTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, border: GLint) -> Result<()> {
19614		let ret = process_catch("glCopyTexImage1D", catch_unwind(||(self.version_1_1.copyteximage1d)(target, level, internalformat, x, y, width, border)));
19615		#[cfg(feature = "diagnose")]
19616		if let Ok(ret) = ret {
19617			return to_result("glCopyTexImage1D", ret, (self.version_1_1.geterror)());
19618		} else {
19619			return ret
19620		}
19621		#[cfg(not(feature = "diagnose"))]
19622		return ret;
19623	}
19624	#[inline(always)]
19625	fn glCopyTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei, border: GLint) -> Result<()> {
19626		let ret = process_catch("glCopyTexImage2D", catch_unwind(||(self.version_1_1.copyteximage2d)(target, level, internalformat, x, y, width, height, border)));
19627		#[cfg(feature = "diagnose")]
19628		if let Ok(ret) = ret {
19629			return to_result("glCopyTexImage2D", ret, (self.version_1_1.geterror)());
19630		} else {
19631			return ret
19632		}
19633		#[cfg(not(feature = "diagnose"))]
19634		return ret;
19635	}
19636	#[inline(always)]
19637	fn glCopyTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, x: GLint, y: GLint, width: GLsizei) -> Result<()> {
19638		let ret = process_catch("glCopyTexSubImage1D", catch_unwind(||(self.version_1_1.copytexsubimage1d)(target, level, xoffset, x, y, width)));
19639		#[cfg(feature = "diagnose")]
19640		if let Ok(ret) = ret {
19641			return to_result("glCopyTexSubImage1D", ret, (self.version_1_1.geterror)());
19642		} else {
19643			return ret
19644		}
19645		#[cfg(not(feature = "diagnose"))]
19646		return ret;
19647	}
19648	#[inline(always)]
19649	fn glCopyTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
19650		let ret = process_catch("glCopyTexSubImage2D", catch_unwind(||(self.version_1_1.copytexsubimage2d)(target, level, xoffset, yoffset, x, y, width, height)));
19651		#[cfg(feature = "diagnose")]
19652		if let Ok(ret) = ret {
19653			return to_result("glCopyTexSubImage2D", ret, (self.version_1_1.geterror)());
19654		} else {
19655			return ret
19656		}
19657		#[cfg(not(feature = "diagnose"))]
19658		return ret;
19659	}
19660	#[inline(always)]
19661	fn glTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
19662		let ret = process_catch("glTexSubImage1D", catch_unwind(||(self.version_1_1.texsubimage1d)(target, level, xoffset, width, format, type_, pixels)));
19663		#[cfg(feature = "diagnose")]
19664		if let Ok(ret) = ret {
19665			return to_result("glTexSubImage1D", ret, (self.version_1_1.geterror)());
19666		} else {
19667			return ret
19668		}
19669		#[cfg(not(feature = "diagnose"))]
19670		return ret;
19671	}
19672	#[inline(always)]
19673	fn glTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
19674		let ret = process_catch("glTexSubImage2D", catch_unwind(||(self.version_1_1.texsubimage2d)(target, level, xoffset, yoffset, width, height, format, type_, pixels)));
19675		#[cfg(feature = "diagnose")]
19676		if let Ok(ret) = ret {
19677			return to_result("glTexSubImage2D", ret, (self.version_1_1.geterror)());
19678		} else {
19679			return ret
19680		}
19681		#[cfg(not(feature = "diagnose"))]
19682		return ret;
19683	}
19684	#[inline(always)]
19685	fn glBindTexture(&self, target: GLenum, texture: GLuint) -> Result<()> {
19686		let ret = process_catch("glBindTexture", catch_unwind(||(self.version_1_1.bindtexture)(target, texture)));
19687		#[cfg(feature = "diagnose")]
19688		if let Ok(ret) = ret {
19689			return to_result("glBindTexture", ret, (self.version_1_1.geterror)());
19690		} else {
19691			return ret
19692		}
19693		#[cfg(not(feature = "diagnose"))]
19694		return ret;
19695	}
19696	#[inline(always)]
19697	fn glDeleteTextures(&self, n: GLsizei, textures: *const GLuint) -> Result<()> {
19698		let ret = process_catch("glDeleteTextures", catch_unwind(||(self.version_1_1.deletetextures)(n, textures)));
19699		#[cfg(feature = "diagnose")]
19700		if let Ok(ret) = ret {
19701			return to_result("glDeleteTextures", ret, (self.version_1_1.geterror)());
19702		} else {
19703			return ret
19704		}
19705		#[cfg(not(feature = "diagnose"))]
19706		return ret;
19707	}
19708	#[inline(always)]
19709	fn glGenTextures(&self, n: GLsizei, textures: *mut GLuint) -> Result<()> {
19710		let ret = process_catch("glGenTextures", catch_unwind(||(self.version_1_1.gentextures)(n, textures)));
19711		#[cfg(feature = "diagnose")]
19712		if let Ok(ret) = ret {
19713			return to_result("glGenTextures", ret, (self.version_1_1.geterror)());
19714		} else {
19715			return ret
19716		}
19717		#[cfg(not(feature = "diagnose"))]
19718		return ret;
19719	}
19720	#[inline(always)]
19721	fn glIsTexture(&self, texture: GLuint) -> Result<GLboolean> {
19722		let ret = process_catch("glIsTexture", catch_unwind(||(self.version_1_1.istexture)(texture)));
19723		#[cfg(feature = "diagnose")]
19724		if let Ok(ret) = ret {
19725			return to_result("glIsTexture", ret, (self.version_1_1.geterror)());
19726		} else {
19727			return ret
19728		}
19729		#[cfg(not(feature = "diagnose"))]
19730		return ret;
19731	}
19732}
19733
19734impl GL_1_2 for GLCore {
19735	#[inline(always)]
19736	fn glGetError(&self) -> GLenum {
19737		(self.version_1_2.geterror)()
19738	}
19739	#[inline(always)]
19740	fn glDrawRangeElements(&self, mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type_: GLenum, indices: *const c_void) -> Result<()> {
19741		let ret = process_catch("glDrawRangeElements", catch_unwind(||(self.version_1_2.drawrangeelements)(mode, start, end, count, type_, indices)));
19742		#[cfg(feature = "diagnose")]
19743		if let Ok(ret) = ret {
19744			return to_result("glDrawRangeElements", ret, (self.version_1_2.geterror)());
19745		} else {
19746			return ret
19747		}
19748		#[cfg(not(feature = "diagnose"))]
19749		return ret;
19750	}
19751	#[inline(always)]
19752	fn glTexImage3D(&self, target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
19753		let ret = process_catch("glTexImage3D", catch_unwind(||(self.version_1_2.teximage3d)(target, level, internalformat, width, height, depth, border, format, type_, pixels)));
19754		#[cfg(feature = "diagnose")]
19755		if let Ok(ret) = ret {
19756			return to_result("glTexImage3D", ret, (self.version_1_2.geterror)());
19757		} else {
19758			return ret
19759		}
19760		#[cfg(not(feature = "diagnose"))]
19761		return ret;
19762	}
19763	#[inline(always)]
19764	fn glTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
19765		let ret = process_catch("glTexSubImage3D", catch_unwind(||(self.version_1_2.texsubimage3d)(target, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, pixels)));
19766		#[cfg(feature = "diagnose")]
19767		if let Ok(ret) = ret {
19768			return to_result("glTexSubImage3D", ret, (self.version_1_2.geterror)());
19769		} else {
19770			return ret
19771		}
19772		#[cfg(not(feature = "diagnose"))]
19773		return ret;
19774	}
19775	#[inline(always)]
19776	fn glCopyTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
19777		let ret = process_catch("glCopyTexSubImage3D", catch_unwind(||(self.version_1_2.copytexsubimage3d)(target, level, xoffset, yoffset, zoffset, x, y, width, height)));
19778		#[cfg(feature = "diagnose")]
19779		if let Ok(ret) = ret {
19780			return to_result("glCopyTexSubImage3D", ret, (self.version_1_2.geterror)());
19781		} else {
19782			return ret
19783		}
19784		#[cfg(not(feature = "diagnose"))]
19785		return ret;
19786	}
19787}
19788
19789impl GL_1_3 for GLCore {
19790	#[inline(always)]
19791	fn glGetError(&self) -> GLenum {
19792		(self.version_1_3.geterror)()
19793	}
19794	#[inline(always)]
19795	fn glActiveTexture(&self, texture: GLenum) -> Result<()> {
19796		let ret = process_catch("glActiveTexture", catch_unwind(||(self.version_1_3.activetexture)(texture)));
19797		#[cfg(feature = "diagnose")]
19798		if let Ok(ret) = ret {
19799			return to_result("glActiveTexture", ret, (self.version_1_3.geterror)());
19800		} else {
19801			return ret
19802		}
19803		#[cfg(not(feature = "diagnose"))]
19804		return ret;
19805	}
19806	#[inline(always)]
19807	fn glSampleCoverage(&self, value: GLfloat, invert: GLboolean) -> Result<()> {
19808		let ret = process_catch("glSampleCoverage", catch_unwind(||(self.version_1_3.samplecoverage)(value, invert)));
19809		#[cfg(feature = "diagnose")]
19810		if let Ok(ret) = ret {
19811			return to_result("glSampleCoverage", ret, (self.version_1_3.geterror)());
19812		} else {
19813			return ret
19814		}
19815		#[cfg(not(feature = "diagnose"))]
19816		return ret;
19817	}
19818	#[inline(always)]
19819	fn glCompressedTexImage3D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()> {
19820		let ret = process_catch("glCompressedTexImage3D", catch_unwind(||(self.version_1_3.compressedteximage3d)(target, level, internalformat, width, height, depth, border, imageSize, data)));
19821		#[cfg(feature = "diagnose")]
19822		if let Ok(ret) = ret {
19823			return to_result("glCompressedTexImage3D", ret, (self.version_1_3.geterror)());
19824		} else {
19825			return ret
19826		}
19827		#[cfg(not(feature = "diagnose"))]
19828		return ret;
19829	}
19830	#[inline(always)]
19831	fn glCompressedTexImage2D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, height: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()> {
19832		let ret = process_catch("glCompressedTexImage2D", catch_unwind(||(self.version_1_3.compressedteximage2d)(target, level, internalformat, width, height, border, imageSize, data)));
19833		#[cfg(feature = "diagnose")]
19834		if let Ok(ret) = ret {
19835			return to_result("glCompressedTexImage2D", ret, (self.version_1_3.geterror)());
19836		} else {
19837			return ret
19838		}
19839		#[cfg(not(feature = "diagnose"))]
19840		return ret;
19841	}
19842	#[inline(always)]
19843	fn glCompressedTexImage1D(&self, target: GLenum, level: GLint, internalformat: GLenum, width: GLsizei, border: GLint, imageSize: GLsizei, data: *const c_void) -> Result<()> {
19844		let ret = process_catch("glCompressedTexImage1D", catch_unwind(||(self.version_1_3.compressedteximage1d)(target, level, internalformat, width, border, imageSize, data)));
19845		#[cfg(feature = "diagnose")]
19846		if let Ok(ret) = ret {
19847			return to_result("glCompressedTexImage1D", ret, (self.version_1_3.geterror)());
19848		} else {
19849			return ret
19850		}
19851		#[cfg(not(feature = "diagnose"))]
19852		return ret;
19853	}
19854	#[inline(always)]
19855	fn glCompressedTexSubImage3D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
19856		let ret = process_catch("glCompressedTexSubImage3D", catch_unwind(||(self.version_1_3.compressedtexsubimage3d)(target, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)));
19857		#[cfg(feature = "diagnose")]
19858		if let Ok(ret) = ret {
19859			return to_result("glCompressedTexSubImage3D", ret, (self.version_1_3.geterror)());
19860		} else {
19861			return ret
19862		}
19863		#[cfg(not(feature = "diagnose"))]
19864		return ret;
19865	}
19866	#[inline(always)]
19867	fn glCompressedTexSubImage2D(&self, target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
19868		let ret = process_catch("glCompressedTexSubImage2D", catch_unwind(||(self.version_1_3.compressedtexsubimage2d)(target, level, xoffset, yoffset, width, height, format, imageSize, data)));
19869		#[cfg(feature = "diagnose")]
19870		if let Ok(ret) = ret {
19871			return to_result("glCompressedTexSubImage2D", ret, (self.version_1_3.geterror)());
19872		} else {
19873			return ret
19874		}
19875		#[cfg(not(feature = "diagnose"))]
19876		return ret;
19877	}
19878	#[inline(always)]
19879	fn glCompressedTexSubImage1D(&self, target: GLenum, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
19880		let ret = process_catch("glCompressedTexSubImage1D", catch_unwind(||(self.version_1_3.compressedtexsubimage1d)(target, level, xoffset, width, format, imageSize, data)));
19881		#[cfg(feature = "diagnose")]
19882		if let Ok(ret) = ret {
19883			return to_result("glCompressedTexSubImage1D", ret, (self.version_1_3.geterror)());
19884		} else {
19885			return ret
19886		}
19887		#[cfg(not(feature = "diagnose"))]
19888		return ret;
19889	}
19890	#[inline(always)]
19891	fn glGetCompressedTexImage(&self, target: GLenum, level: GLint, img: *mut c_void) -> Result<()> {
19892		let ret = process_catch("glGetCompressedTexImage", catch_unwind(||(self.version_1_3.getcompressedteximage)(target, level, img)));
19893		#[cfg(feature = "diagnose")]
19894		if let Ok(ret) = ret {
19895			return to_result("glGetCompressedTexImage", ret, (self.version_1_3.geterror)());
19896		} else {
19897			return ret
19898		}
19899		#[cfg(not(feature = "diagnose"))]
19900		return ret;
19901	}
19902	#[inline(always)]
19903	fn glClientActiveTexture(&self, texture: GLenum) -> Result<()> {
19904		let ret = process_catch("glClientActiveTexture", catch_unwind(||(self.version_1_3.clientactivetexture)(texture)));
19905		#[cfg(feature = "diagnose")]
19906		if let Ok(ret) = ret {
19907			return to_result("glClientActiveTexture", ret, (self.version_1_3.geterror)());
19908		} else {
19909			return ret
19910		}
19911		#[cfg(not(feature = "diagnose"))]
19912		return ret;
19913	}
19914	#[inline(always)]
19915	fn glMultiTexCoord1d(&self, target: GLenum, s: GLdouble) -> Result<()> {
19916		let ret = process_catch("glMultiTexCoord1d", catch_unwind(||(self.version_1_3.multitexcoord1d)(target, s)));
19917		#[cfg(feature = "diagnose")]
19918		if let Ok(ret) = ret {
19919			return to_result("glMultiTexCoord1d", ret, (self.version_1_3.geterror)());
19920		} else {
19921			return ret
19922		}
19923		#[cfg(not(feature = "diagnose"))]
19924		return ret;
19925	}
19926	#[inline(always)]
19927	fn glMultiTexCoord1dv(&self, target: GLenum, v: *const GLdouble) -> Result<()> {
19928		let ret = process_catch("glMultiTexCoord1dv", catch_unwind(||(self.version_1_3.multitexcoord1dv)(target, v)));
19929		#[cfg(feature = "diagnose")]
19930		if let Ok(ret) = ret {
19931			return to_result("glMultiTexCoord1dv", ret, (self.version_1_3.geterror)());
19932		} else {
19933			return ret
19934		}
19935		#[cfg(not(feature = "diagnose"))]
19936		return ret;
19937	}
19938	#[inline(always)]
19939	fn glMultiTexCoord1f(&self, target: GLenum, s: GLfloat) -> Result<()> {
19940		let ret = process_catch("glMultiTexCoord1f", catch_unwind(||(self.version_1_3.multitexcoord1f)(target, s)));
19941		#[cfg(feature = "diagnose")]
19942		if let Ok(ret) = ret {
19943			return to_result("glMultiTexCoord1f", ret, (self.version_1_3.geterror)());
19944		} else {
19945			return ret
19946		}
19947		#[cfg(not(feature = "diagnose"))]
19948		return ret;
19949	}
19950	#[inline(always)]
19951	fn glMultiTexCoord1fv(&self, target: GLenum, v: *const GLfloat) -> Result<()> {
19952		let ret = process_catch("glMultiTexCoord1fv", catch_unwind(||(self.version_1_3.multitexcoord1fv)(target, v)));
19953		#[cfg(feature = "diagnose")]
19954		if let Ok(ret) = ret {
19955			return to_result("glMultiTexCoord1fv", ret, (self.version_1_3.geterror)());
19956		} else {
19957			return ret
19958		}
19959		#[cfg(not(feature = "diagnose"))]
19960		return ret;
19961	}
19962	#[inline(always)]
19963	fn glMultiTexCoord1i(&self, target: GLenum, s: GLint) -> Result<()> {
19964		let ret = process_catch("glMultiTexCoord1i", catch_unwind(||(self.version_1_3.multitexcoord1i)(target, s)));
19965		#[cfg(feature = "diagnose")]
19966		if let Ok(ret) = ret {
19967			return to_result("glMultiTexCoord1i", ret, (self.version_1_3.geterror)());
19968		} else {
19969			return ret
19970		}
19971		#[cfg(not(feature = "diagnose"))]
19972		return ret;
19973	}
19974	#[inline(always)]
19975	fn glMultiTexCoord1iv(&self, target: GLenum, v: *const GLint) -> Result<()> {
19976		let ret = process_catch("glMultiTexCoord1iv", catch_unwind(||(self.version_1_3.multitexcoord1iv)(target, v)));
19977		#[cfg(feature = "diagnose")]
19978		if let Ok(ret) = ret {
19979			return to_result("glMultiTexCoord1iv", ret, (self.version_1_3.geterror)());
19980		} else {
19981			return ret
19982		}
19983		#[cfg(not(feature = "diagnose"))]
19984		return ret;
19985	}
19986	#[inline(always)]
19987	fn glMultiTexCoord1s(&self, target: GLenum, s: GLshort) -> Result<()> {
19988		let ret = process_catch("glMultiTexCoord1s", catch_unwind(||(self.version_1_3.multitexcoord1s)(target, s)));
19989		#[cfg(feature = "diagnose")]
19990		if let Ok(ret) = ret {
19991			return to_result("glMultiTexCoord1s", ret, (self.version_1_3.geterror)());
19992		} else {
19993			return ret
19994		}
19995		#[cfg(not(feature = "diagnose"))]
19996		return ret;
19997	}
19998	#[inline(always)]
19999	fn glMultiTexCoord1sv(&self, target: GLenum, v: *const GLshort) -> Result<()> {
20000		let ret = process_catch("glMultiTexCoord1sv", catch_unwind(||(self.version_1_3.multitexcoord1sv)(target, v)));
20001		#[cfg(feature = "diagnose")]
20002		if let Ok(ret) = ret {
20003			return to_result("glMultiTexCoord1sv", ret, (self.version_1_3.geterror)());
20004		} else {
20005			return ret
20006		}
20007		#[cfg(not(feature = "diagnose"))]
20008		return ret;
20009	}
20010	#[inline(always)]
20011	fn glMultiTexCoord2d(&self, target: GLenum, s: GLdouble, t: GLdouble) -> Result<()> {
20012		let ret = process_catch("glMultiTexCoord2d", catch_unwind(||(self.version_1_3.multitexcoord2d)(target, s, t)));
20013		#[cfg(feature = "diagnose")]
20014		if let Ok(ret) = ret {
20015			return to_result("glMultiTexCoord2d", ret, (self.version_1_3.geterror)());
20016		} else {
20017			return ret
20018		}
20019		#[cfg(not(feature = "diagnose"))]
20020		return ret;
20021	}
20022	#[inline(always)]
20023	fn glMultiTexCoord2dv(&self, target: GLenum, v: *const GLdouble) -> Result<()> {
20024		let ret = process_catch("glMultiTexCoord2dv", catch_unwind(||(self.version_1_3.multitexcoord2dv)(target, v)));
20025		#[cfg(feature = "diagnose")]
20026		if let Ok(ret) = ret {
20027			return to_result("glMultiTexCoord2dv", ret, (self.version_1_3.geterror)());
20028		} else {
20029			return ret
20030		}
20031		#[cfg(not(feature = "diagnose"))]
20032		return ret;
20033	}
20034	#[inline(always)]
20035	fn glMultiTexCoord2f(&self, target: GLenum, s: GLfloat, t: GLfloat) -> Result<()> {
20036		let ret = process_catch("glMultiTexCoord2f", catch_unwind(||(self.version_1_3.multitexcoord2f)(target, s, t)));
20037		#[cfg(feature = "diagnose")]
20038		if let Ok(ret) = ret {
20039			return to_result("glMultiTexCoord2f", ret, (self.version_1_3.geterror)());
20040		} else {
20041			return ret
20042		}
20043		#[cfg(not(feature = "diagnose"))]
20044		return ret;
20045	}
20046	#[inline(always)]
20047	fn glMultiTexCoord2fv(&self, target: GLenum, v: *const GLfloat) -> Result<()> {
20048		let ret = process_catch("glMultiTexCoord2fv", catch_unwind(||(self.version_1_3.multitexcoord2fv)(target, v)));
20049		#[cfg(feature = "diagnose")]
20050		if let Ok(ret) = ret {
20051			return to_result("glMultiTexCoord2fv", ret, (self.version_1_3.geterror)());
20052		} else {
20053			return ret
20054		}
20055		#[cfg(not(feature = "diagnose"))]
20056		return ret;
20057	}
20058	#[inline(always)]
20059	fn glMultiTexCoord2i(&self, target: GLenum, s: GLint, t: GLint) -> Result<()> {
20060		let ret = process_catch("glMultiTexCoord2i", catch_unwind(||(self.version_1_3.multitexcoord2i)(target, s, t)));
20061		#[cfg(feature = "diagnose")]
20062		if let Ok(ret) = ret {
20063			return to_result("glMultiTexCoord2i", ret, (self.version_1_3.geterror)());
20064		} else {
20065			return ret
20066		}
20067		#[cfg(not(feature = "diagnose"))]
20068		return ret;
20069	}
20070	#[inline(always)]
20071	fn glMultiTexCoord2iv(&self, target: GLenum, v: *const GLint) -> Result<()> {
20072		let ret = process_catch("glMultiTexCoord2iv", catch_unwind(||(self.version_1_3.multitexcoord2iv)(target, v)));
20073		#[cfg(feature = "diagnose")]
20074		if let Ok(ret) = ret {
20075			return to_result("glMultiTexCoord2iv", ret, (self.version_1_3.geterror)());
20076		} else {
20077			return ret
20078		}
20079		#[cfg(not(feature = "diagnose"))]
20080		return ret;
20081	}
20082	#[inline(always)]
20083	fn glMultiTexCoord2s(&self, target: GLenum, s: GLshort, t: GLshort) -> Result<()> {
20084		let ret = process_catch("glMultiTexCoord2s", catch_unwind(||(self.version_1_3.multitexcoord2s)(target, s, t)));
20085		#[cfg(feature = "diagnose")]
20086		if let Ok(ret) = ret {
20087			return to_result("glMultiTexCoord2s", ret, (self.version_1_3.geterror)());
20088		} else {
20089			return ret
20090		}
20091		#[cfg(not(feature = "diagnose"))]
20092		return ret;
20093	}
20094	#[inline(always)]
20095	fn glMultiTexCoord2sv(&self, target: GLenum, v: *const GLshort) -> Result<()> {
20096		let ret = process_catch("glMultiTexCoord2sv", catch_unwind(||(self.version_1_3.multitexcoord2sv)(target, v)));
20097		#[cfg(feature = "diagnose")]
20098		if let Ok(ret) = ret {
20099			return to_result("glMultiTexCoord2sv", ret, (self.version_1_3.geterror)());
20100		} else {
20101			return ret
20102		}
20103		#[cfg(not(feature = "diagnose"))]
20104		return ret;
20105	}
20106	#[inline(always)]
20107	fn glMultiTexCoord3d(&self, target: GLenum, s: GLdouble, t: GLdouble, r: GLdouble) -> Result<()> {
20108		let ret = process_catch("glMultiTexCoord3d", catch_unwind(||(self.version_1_3.multitexcoord3d)(target, s, t, r)));
20109		#[cfg(feature = "diagnose")]
20110		if let Ok(ret) = ret {
20111			return to_result("glMultiTexCoord3d", ret, (self.version_1_3.geterror)());
20112		} else {
20113			return ret
20114		}
20115		#[cfg(not(feature = "diagnose"))]
20116		return ret;
20117	}
20118	#[inline(always)]
20119	fn glMultiTexCoord3dv(&self, target: GLenum, v: *const GLdouble) -> Result<()> {
20120		let ret = process_catch("glMultiTexCoord3dv", catch_unwind(||(self.version_1_3.multitexcoord3dv)(target, v)));
20121		#[cfg(feature = "diagnose")]
20122		if let Ok(ret) = ret {
20123			return to_result("glMultiTexCoord3dv", ret, (self.version_1_3.geterror)());
20124		} else {
20125			return ret
20126		}
20127		#[cfg(not(feature = "diagnose"))]
20128		return ret;
20129	}
20130	#[inline(always)]
20131	fn glMultiTexCoord3f(&self, target: GLenum, s: GLfloat, t: GLfloat, r: GLfloat) -> Result<()> {
20132		let ret = process_catch("glMultiTexCoord3f", catch_unwind(||(self.version_1_3.multitexcoord3f)(target, s, t, r)));
20133		#[cfg(feature = "diagnose")]
20134		if let Ok(ret) = ret {
20135			return to_result("glMultiTexCoord3f", ret, (self.version_1_3.geterror)());
20136		} else {
20137			return ret
20138		}
20139		#[cfg(not(feature = "diagnose"))]
20140		return ret;
20141	}
20142	#[inline(always)]
20143	fn glMultiTexCoord3fv(&self, target: GLenum, v: *const GLfloat) -> Result<()> {
20144		let ret = process_catch("glMultiTexCoord3fv", catch_unwind(||(self.version_1_3.multitexcoord3fv)(target, v)));
20145		#[cfg(feature = "diagnose")]
20146		if let Ok(ret) = ret {
20147			return to_result("glMultiTexCoord3fv", ret, (self.version_1_3.geterror)());
20148		} else {
20149			return ret
20150		}
20151		#[cfg(not(feature = "diagnose"))]
20152		return ret;
20153	}
20154	#[inline(always)]
20155	fn glMultiTexCoord3i(&self, target: GLenum, s: GLint, t: GLint, r: GLint) -> Result<()> {
20156		let ret = process_catch("glMultiTexCoord3i", catch_unwind(||(self.version_1_3.multitexcoord3i)(target, s, t, r)));
20157		#[cfg(feature = "diagnose")]
20158		if let Ok(ret) = ret {
20159			return to_result("glMultiTexCoord3i", ret, (self.version_1_3.geterror)());
20160		} else {
20161			return ret
20162		}
20163		#[cfg(not(feature = "diagnose"))]
20164		return ret;
20165	}
20166	#[inline(always)]
20167	fn glMultiTexCoord3iv(&self, target: GLenum, v: *const GLint) -> Result<()> {
20168		let ret = process_catch("glMultiTexCoord3iv", catch_unwind(||(self.version_1_3.multitexcoord3iv)(target, v)));
20169		#[cfg(feature = "diagnose")]
20170		if let Ok(ret) = ret {
20171			return to_result("glMultiTexCoord3iv", ret, (self.version_1_3.geterror)());
20172		} else {
20173			return ret
20174		}
20175		#[cfg(not(feature = "diagnose"))]
20176		return ret;
20177	}
20178	#[inline(always)]
20179	fn glMultiTexCoord3s(&self, target: GLenum, s: GLshort, t: GLshort, r: GLshort) -> Result<()> {
20180		let ret = process_catch("glMultiTexCoord3s", catch_unwind(||(self.version_1_3.multitexcoord3s)(target, s, t, r)));
20181		#[cfg(feature = "diagnose")]
20182		if let Ok(ret) = ret {
20183			return to_result("glMultiTexCoord3s", ret, (self.version_1_3.geterror)());
20184		} else {
20185			return ret
20186		}
20187		#[cfg(not(feature = "diagnose"))]
20188		return ret;
20189	}
20190	#[inline(always)]
20191	fn glMultiTexCoord3sv(&self, target: GLenum, v: *const GLshort) -> Result<()> {
20192		let ret = process_catch("glMultiTexCoord3sv", catch_unwind(||(self.version_1_3.multitexcoord3sv)(target, v)));
20193		#[cfg(feature = "diagnose")]
20194		if let Ok(ret) = ret {
20195			return to_result("glMultiTexCoord3sv", ret, (self.version_1_3.geterror)());
20196		} else {
20197			return ret
20198		}
20199		#[cfg(not(feature = "diagnose"))]
20200		return ret;
20201	}
20202	#[inline(always)]
20203	fn glMultiTexCoord4d(&self, target: GLenum, s: GLdouble, t: GLdouble, r: GLdouble, q: GLdouble) -> Result<()> {
20204		let ret = process_catch("glMultiTexCoord4d", catch_unwind(||(self.version_1_3.multitexcoord4d)(target, s, t, r, q)));
20205		#[cfg(feature = "diagnose")]
20206		if let Ok(ret) = ret {
20207			return to_result("glMultiTexCoord4d", ret, (self.version_1_3.geterror)());
20208		} else {
20209			return ret
20210		}
20211		#[cfg(not(feature = "diagnose"))]
20212		return ret;
20213	}
20214	#[inline(always)]
20215	fn glMultiTexCoord4dv(&self, target: GLenum, v: *const GLdouble) -> Result<()> {
20216		let ret = process_catch("glMultiTexCoord4dv", catch_unwind(||(self.version_1_3.multitexcoord4dv)(target, v)));
20217		#[cfg(feature = "diagnose")]
20218		if let Ok(ret) = ret {
20219			return to_result("glMultiTexCoord4dv", ret, (self.version_1_3.geterror)());
20220		} else {
20221			return ret
20222		}
20223		#[cfg(not(feature = "diagnose"))]
20224		return ret;
20225	}
20226	#[inline(always)]
20227	fn glMultiTexCoord4f(&self, target: GLenum, s: GLfloat, t: GLfloat, r: GLfloat, q: GLfloat) -> Result<()> {
20228		let ret = process_catch("glMultiTexCoord4f", catch_unwind(||(self.version_1_3.multitexcoord4f)(target, s, t, r, q)));
20229		#[cfg(feature = "diagnose")]
20230		if let Ok(ret) = ret {
20231			return to_result("glMultiTexCoord4f", ret, (self.version_1_3.geterror)());
20232		} else {
20233			return ret
20234		}
20235		#[cfg(not(feature = "diagnose"))]
20236		return ret;
20237	}
20238	#[inline(always)]
20239	fn glMultiTexCoord4fv(&self, target: GLenum, v: *const GLfloat) -> Result<()> {
20240		let ret = process_catch("glMultiTexCoord4fv", catch_unwind(||(self.version_1_3.multitexcoord4fv)(target, v)));
20241		#[cfg(feature = "diagnose")]
20242		if let Ok(ret) = ret {
20243			return to_result("glMultiTexCoord4fv", ret, (self.version_1_3.geterror)());
20244		} else {
20245			return ret
20246		}
20247		#[cfg(not(feature = "diagnose"))]
20248		return ret;
20249	}
20250	#[inline(always)]
20251	fn glMultiTexCoord4i(&self, target: GLenum, s: GLint, t: GLint, r: GLint, q: GLint) -> Result<()> {
20252		let ret = process_catch("glMultiTexCoord4i", catch_unwind(||(self.version_1_3.multitexcoord4i)(target, s, t, r, q)));
20253		#[cfg(feature = "diagnose")]
20254		if let Ok(ret) = ret {
20255			return to_result("glMultiTexCoord4i", ret, (self.version_1_3.geterror)());
20256		} else {
20257			return ret
20258		}
20259		#[cfg(not(feature = "diagnose"))]
20260		return ret;
20261	}
20262	#[inline(always)]
20263	fn glMultiTexCoord4iv(&self, target: GLenum, v: *const GLint) -> Result<()> {
20264		let ret = process_catch("glMultiTexCoord4iv", catch_unwind(||(self.version_1_3.multitexcoord4iv)(target, v)));
20265		#[cfg(feature = "diagnose")]
20266		if let Ok(ret) = ret {
20267			return to_result("glMultiTexCoord4iv", ret, (self.version_1_3.geterror)());
20268		} else {
20269			return ret
20270		}
20271		#[cfg(not(feature = "diagnose"))]
20272		return ret;
20273	}
20274	#[inline(always)]
20275	fn glMultiTexCoord4s(&self, target: GLenum, s: GLshort, t: GLshort, r: GLshort, q: GLshort) -> Result<()> {
20276		let ret = process_catch("glMultiTexCoord4s", catch_unwind(||(self.version_1_3.multitexcoord4s)(target, s, t, r, q)));
20277		#[cfg(feature = "diagnose")]
20278		if let Ok(ret) = ret {
20279			return to_result("glMultiTexCoord4s", ret, (self.version_1_3.geterror)());
20280		} else {
20281			return ret
20282		}
20283		#[cfg(not(feature = "diagnose"))]
20284		return ret;
20285	}
20286	#[inline(always)]
20287	fn glMultiTexCoord4sv(&self, target: GLenum, v: *const GLshort) -> Result<()> {
20288		let ret = process_catch("glMultiTexCoord4sv", catch_unwind(||(self.version_1_3.multitexcoord4sv)(target, v)));
20289		#[cfg(feature = "diagnose")]
20290		if let Ok(ret) = ret {
20291			return to_result("glMultiTexCoord4sv", ret, (self.version_1_3.geterror)());
20292		} else {
20293			return ret
20294		}
20295		#[cfg(not(feature = "diagnose"))]
20296		return ret;
20297	}
20298	#[inline(always)]
20299	fn glLoadTransposeMatrixf(&self, m: *const GLfloat) -> Result<()> {
20300		let ret = process_catch("glLoadTransposeMatrixf", catch_unwind(||(self.version_1_3.loadtransposematrixf)(m)));
20301		#[cfg(feature = "diagnose")]
20302		if let Ok(ret) = ret {
20303			return to_result("glLoadTransposeMatrixf", ret, (self.version_1_3.geterror)());
20304		} else {
20305			return ret
20306		}
20307		#[cfg(not(feature = "diagnose"))]
20308		return ret;
20309	}
20310	#[inline(always)]
20311	fn glLoadTransposeMatrixd(&self, m: *const GLdouble) -> Result<()> {
20312		let ret = process_catch("glLoadTransposeMatrixd", catch_unwind(||(self.version_1_3.loadtransposematrixd)(m)));
20313		#[cfg(feature = "diagnose")]
20314		if let Ok(ret) = ret {
20315			return to_result("glLoadTransposeMatrixd", ret, (self.version_1_3.geterror)());
20316		} else {
20317			return ret
20318		}
20319		#[cfg(not(feature = "diagnose"))]
20320		return ret;
20321	}
20322	#[inline(always)]
20323	fn glMultTransposeMatrixf(&self, m: *const GLfloat) -> Result<()> {
20324		let ret = process_catch("glMultTransposeMatrixf", catch_unwind(||(self.version_1_3.multtransposematrixf)(m)));
20325		#[cfg(feature = "diagnose")]
20326		if let Ok(ret) = ret {
20327			return to_result("glMultTransposeMatrixf", ret, (self.version_1_3.geterror)());
20328		} else {
20329			return ret
20330		}
20331		#[cfg(not(feature = "diagnose"))]
20332		return ret;
20333	}
20334	#[inline(always)]
20335	fn glMultTransposeMatrixd(&self, m: *const GLdouble) -> Result<()> {
20336		let ret = process_catch("glMultTransposeMatrixd", catch_unwind(||(self.version_1_3.multtransposematrixd)(m)));
20337		#[cfg(feature = "diagnose")]
20338		if let Ok(ret) = ret {
20339			return to_result("glMultTransposeMatrixd", ret, (self.version_1_3.geterror)());
20340		} else {
20341			return ret
20342		}
20343		#[cfg(not(feature = "diagnose"))]
20344		return ret;
20345	}
20346}
20347
20348impl GL_1_4 for GLCore {
20349	#[inline(always)]
20350	fn glGetError(&self) -> GLenum {
20351		(self.version_1_4.geterror)()
20352	}
20353	#[inline(always)]
20354	fn glBlendFuncSeparate(&self, sfactorRGB: GLenum, dfactorRGB: GLenum, sfactorAlpha: GLenum, dfactorAlpha: GLenum) -> Result<()> {
20355		let ret = process_catch("glBlendFuncSeparate", catch_unwind(||(self.version_1_4.blendfuncseparate)(sfactorRGB, dfactorRGB, sfactorAlpha, dfactorAlpha)));
20356		#[cfg(feature = "diagnose")]
20357		if let Ok(ret) = ret {
20358			return to_result("glBlendFuncSeparate", ret, (self.version_1_4.geterror)());
20359		} else {
20360			return ret
20361		}
20362		#[cfg(not(feature = "diagnose"))]
20363		return ret;
20364	}
20365	#[inline(always)]
20366	fn glMultiDrawArrays(&self, mode: GLenum, first: *const GLint, count: *const GLsizei, drawcount: GLsizei) -> Result<()> {
20367		let ret = process_catch("glMultiDrawArrays", catch_unwind(||(self.version_1_4.multidrawarrays)(mode, first, count, drawcount)));
20368		#[cfg(feature = "diagnose")]
20369		if let Ok(ret) = ret {
20370			return to_result("glMultiDrawArrays", ret, (self.version_1_4.geterror)());
20371		} else {
20372			return ret
20373		}
20374		#[cfg(not(feature = "diagnose"))]
20375		return ret;
20376	}
20377	#[inline(always)]
20378	fn glMultiDrawElements(&self, mode: GLenum, count: *const GLsizei, type_: GLenum, indices: *const *const c_void, drawcount: GLsizei) -> Result<()> {
20379		let ret = process_catch("glMultiDrawElements", catch_unwind(||(self.version_1_4.multidrawelements)(mode, count, type_, indices, drawcount)));
20380		#[cfg(feature = "diagnose")]
20381		if let Ok(ret) = ret {
20382			return to_result("glMultiDrawElements", ret, (self.version_1_4.geterror)());
20383		} else {
20384			return ret
20385		}
20386		#[cfg(not(feature = "diagnose"))]
20387		return ret;
20388	}
20389	#[inline(always)]
20390	fn glPointParameterf(&self, pname: GLenum, param: GLfloat) -> Result<()> {
20391		let ret = process_catch("glPointParameterf", catch_unwind(||(self.version_1_4.pointparameterf)(pname, param)));
20392		#[cfg(feature = "diagnose")]
20393		if let Ok(ret) = ret {
20394			return to_result("glPointParameterf", ret, (self.version_1_4.geterror)());
20395		} else {
20396			return ret
20397		}
20398		#[cfg(not(feature = "diagnose"))]
20399		return ret;
20400	}
20401	#[inline(always)]
20402	fn glPointParameterfv(&self, pname: GLenum, params: *const GLfloat) -> Result<()> {
20403		let ret = process_catch("glPointParameterfv", catch_unwind(||(self.version_1_4.pointparameterfv)(pname, params)));
20404		#[cfg(feature = "diagnose")]
20405		if let Ok(ret) = ret {
20406			return to_result("glPointParameterfv", ret, (self.version_1_4.geterror)());
20407		} else {
20408			return ret
20409		}
20410		#[cfg(not(feature = "diagnose"))]
20411		return ret;
20412	}
20413	#[inline(always)]
20414	fn glPointParameteri(&self, pname: GLenum, param: GLint) -> Result<()> {
20415		let ret = process_catch("glPointParameteri", catch_unwind(||(self.version_1_4.pointparameteri)(pname, param)));
20416		#[cfg(feature = "diagnose")]
20417		if let Ok(ret) = ret {
20418			return to_result("glPointParameteri", ret, (self.version_1_4.geterror)());
20419		} else {
20420			return ret
20421		}
20422		#[cfg(not(feature = "diagnose"))]
20423		return ret;
20424	}
20425	#[inline(always)]
20426	fn glPointParameteriv(&self, pname: GLenum, params: *const GLint) -> Result<()> {
20427		let ret = process_catch("glPointParameteriv", catch_unwind(||(self.version_1_4.pointparameteriv)(pname, params)));
20428		#[cfg(feature = "diagnose")]
20429		if let Ok(ret) = ret {
20430			return to_result("glPointParameteriv", ret, (self.version_1_4.geterror)());
20431		} else {
20432			return ret
20433		}
20434		#[cfg(not(feature = "diagnose"))]
20435		return ret;
20436	}
20437	#[inline(always)]
20438	fn glFogCoordf(&self, coord: GLfloat) -> Result<()> {
20439		let ret = process_catch("glFogCoordf", catch_unwind(||(self.version_1_4.fogcoordf)(coord)));
20440		#[cfg(feature = "diagnose")]
20441		if let Ok(ret) = ret {
20442			return to_result("glFogCoordf", ret, (self.version_1_4.geterror)());
20443		} else {
20444			return ret
20445		}
20446		#[cfg(not(feature = "diagnose"))]
20447		return ret;
20448	}
20449	#[inline(always)]
20450	fn glFogCoordfv(&self, coord: *const GLfloat) -> Result<()> {
20451		let ret = process_catch("glFogCoordfv", catch_unwind(||(self.version_1_4.fogcoordfv)(coord)));
20452		#[cfg(feature = "diagnose")]
20453		if let Ok(ret) = ret {
20454			return to_result("glFogCoordfv", ret, (self.version_1_4.geterror)());
20455		} else {
20456			return ret
20457		}
20458		#[cfg(not(feature = "diagnose"))]
20459		return ret;
20460	}
20461	#[inline(always)]
20462	fn glFogCoordd(&self, coord: GLdouble) -> Result<()> {
20463		let ret = process_catch("glFogCoordd", catch_unwind(||(self.version_1_4.fogcoordd)(coord)));
20464		#[cfg(feature = "diagnose")]
20465		if let Ok(ret) = ret {
20466			return to_result("glFogCoordd", ret, (self.version_1_4.geterror)());
20467		} else {
20468			return ret
20469		}
20470		#[cfg(not(feature = "diagnose"))]
20471		return ret;
20472	}
20473	#[inline(always)]
20474	fn glFogCoorddv(&self, coord: *const GLdouble) -> Result<()> {
20475		let ret = process_catch("glFogCoorddv", catch_unwind(||(self.version_1_4.fogcoorddv)(coord)));
20476		#[cfg(feature = "diagnose")]
20477		if let Ok(ret) = ret {
20478			return to_result("glFogCoorddv", ret, (self.version_1_4.geterror)());
20479		} else {
20480			return ret
20481		}
20482		#[cfg(not(feature = "diagnose"))]
20483		return ret;
20484	}
20485	#[inline(always)]
20486	fn glFogCoordPointer(&self, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()> {
20487		let ret = process_catch("glFogCoordPointer", catch_unwind(||(self.version_1_4.fogcoordpointer)(type_, stride, pointer)));
20488		#[cfg(feature = "diagnose")]
20489		if let Ok(ret) = ret {
20490			return to_result("glFogCoordPointer", ret, (self.version_1_4.geterror)());
20491		} else {
20492			return ret
20493		}
20494		#[cfg(not(feature = "diagnose"))]
20495		return ret;
20496	}
20497	#[inline(always)]
20498	fn glSecondaryColor3b(&self, red: GLbyte, green: GLbyte, blue: GLbyte) -> Result<()> {
20499		let ret = process_catch("glSecondaryColor3b", catch_unwind(||(self.version_1_4.secondarycolor3b)(red, green, blue)));
20500		#[cfg(feature = "diagnose")]
20501		if let Ok(ret) = ret {
20502			return to_result("glSecondaryColor3b", ret, (self.version_1_4.geterror)());
20503		} else {
20504			return ret
20505		}
20506		#[cfg(not(feature = "diagnose"))]
20507		return ret;
20508	}
20509	#[inline(always)]
20510	fn glSecondaryColor3bv(&self, v: *const GLbyte) -> Result<()> {
20511		let ret = process_catch("glSecondaryColor3bv", catch_unwind(||(self.version_1_4.secondarycolor3bv)(v)));
20512		#[cfg(feature = "diagnose")]
20513		if let Ok(ret) = ret {
20514			return to_result("glSecondaryColor3bv", ret, (self.version_1_4.geterror)());
20515		} else {
20516			return ret
20517		}
20518		#[cfg(not(feature = "diagnose"))]
20519		return ret;
20520	}
20521	#[inline(always)]
20522	fn glSecondaryColor3d(&self, red: GLdouble, green: GLdouble, blue: GLdouble) -> Result<()> {
20523		let ret = process_catch("glSecondaryColor3d", catch_unwind(||(self.version_1_4.secondarycolor3d)(red, green, blue)));
20524		#[cfg(feature = "diagnose")]
20525		if let Ok(ret) = ret {
20526			return to_result("glSecondaryColor3d", ret, (self.version_1_4.geterror)());
20527		} else {
20528			return ret
20529		}
20530		#[cfg(not(feature = "diagnose"))]
20531		return ret;
20532	}
20533	#[inline(always)]
20534	fn glSecondaryColor3dv(&self, v: *const GLdouble) -> Result<()> {
20535		let ret = process_catch("glSecondaryColor3dv", catch_unwind(||(self.version_1_4.secondarycolor3dv)(v)));
20536		#[cfg(feature = "diagnose")]
20537		if let Ok(ret) = ret {
20538			return to_result("glSecondaryColor3dv", ret, (self.version_1_4.geterror)());
20539		} else {
20540			return ret
20541		}
20542		#[cfg(not(feature = "diagnose"))]
20543		return ret;
20544	}
20545	#[inline(always)]
20546	fn glSecondaryColor3f(&self, red: GLfloat, green: GLfloat, blue: GLfloat) -> Result<()> {
20547		let ret = process_catch("glSecondaryColor3f", catch_unwind(||(self.version_1_4.secondarycolor3f)(red, green, blue)));
20548		#[cfg(feature = "diagnose")]
20549		if let Ok(ret) = ret {
20550			return to_result("glSecondaryColor3f", ret, (self.version_1_4.geterror)());
20551		} else {
20552			return ret
20553		}
20554		#[cfg(not(feature = "diagnose"))]
20555		return ret;
20556	}
20557	#[inline(always)]
20558	fn glSecondaryColor3fv(&self, v: *const GLfloat) -> Result<()> {
20559		let ret = process_catch("glSecondaryColor3fv", catch_unwind(||(self.version_1_4.secondarycolor3fv)(v)));
20560		#[cfg(feature = "diagnose")]
20561		if let Ok(ret) = ret {
20562			return to_result("glSecondaryColor3fv", ret, (self.version_1_4.geterror)());
20563		} else {
20564			return ret
20565		}
20566		#[cfg(not(feature = "diagnose"))]
20567		return ret;
20568	}
20569	#[inline(always)]
20570	fn glSecondaryColor3i(&self, red: GLint, green: GLint, blue: GLint) -> Result<()> {
20571		let ret = process_catch("glSecondaryColor3i", catch_unwind(||(self.version_1_4.secondarycolor3i)(red, green, blue)));
20572		#[cfg(feature = "diagnose")]
20573		if let Ok(ret) = ret {
20574			return to_result("glSecondaryColor3i", ret, (self.version_1_4.geterror)());
20575		} else {
20576			return ret
20577		}
20578		#[cfg(not(feature = "diagnose"))]
20579		return ret;
20580	}
20581	#[inline(always)]
20582	fn glSecondaryColor3iv(&self, v: *const GLint) -> Result<()> {
20583		let ret = process_catch("glSecondaryColor3iv", catch_unwind(||(self.version_1_4.secondarycolor3iv)(v)));
20584		#[cfg(feature = "diagnose")]
20585		if let Ok(ret) = ret {
20586			return to_result("glSecondaryColor3iv", ret, (self.version_1_4.geterror)());
20587		} else {
20588			return ret
20589		}
20590		#[cfg(not(feature = "diagnose"))]
20591		return ret;
20592	}
20593	#[inline(always)]
20594	fn glSecondaryColor3s(&self, red: GLshort, green: GLshort, blue: GLshort) -> Result<()> {
20595		let ret = process_catch("glSecondaryColor3s", catch_unwind(||(self.version_1_4.secondarycolor3s)(red, green, blue)));
20596		#[cfg(feature = "diagnose")]
20597		if let Ok(ret) = ret {
20598			return to_result("glSecondaryColor3s", ret, (self.version_1_4.geterror)());
20599		} else {
20600			return ret
20601		}
20602		#[cfg(not(feature = "diagnose"))]
20603		return ret;
20604	}
20605	#[inline(always)]
20606	fn glSecondaryColor3sv(&self, v: *const GLshort) -> Result<()> {
20607		let ret = process_catch("glSecondaryColor3sv", catch_unwind(||(self.version_1_4.secondarycolor3sv)(v)));
20608		#[cfg(feature = "diagnose")]
20609		if let Ok(ret) = ret {
20610			return to_result("glSecondaryColor3sv", ret, (self.version_1_4.geterror)());
20611		} else {
20612			return ret
20613		}
20614		#[cfg(not(feature = "diagnose"))]
20615		return ret;
20616	}
20617	#[inline(always)]
20618	fn glSecondaryColor3ub(&self, red: GLubyte, green: GLubyte, blue: GLubyte) -> Result<()> {
20619		let ret = process_catch("glSecondaryColor3ub", catch_unwind(||(self.version_1_4.secondarycolor3ub)(red, green, blue)));
20620		#[cfg(feature = "diagnose")]
20621		if let Ok(ret) = ret {
20622			return to_result("glSecondaryColor3ub", ret, (self.version_1_4.geterror)());
20623		} else {
20624			return ret
20625		}
20626		#[cfg(not(feature = "diagnose"))]
20627		return ret;
20628	}
20629	#[inline(always)]
20630	fn glSecondaryColor3ubv(&self, v: *const GLubyte) -> Result<()> {
20631		let ret = process_catch("glSecondaryColor3ubv", catch_unwind(||(self.version_1_4.secondarycolor3ubv)(v)));
20632		#[cfg(feature = "diagnose")]
20633		if let Ok(ret) = ret {
20634			return to_result("glSecondaryColor3ubv", ret, (self.version_1_4.geterror)());
20635		} else {
20636			return ret
20637		}
20638		#[cfg(not(feature = "diagnose"))]
20639		return ret;
20640	}
20641	#[inline(always)]
20642	fn glSecondaryColor3ui(&self, red: GLuint, green: GLuint, blue: GLuint) -> Result<()> {
20643		let ret = process_catch("glSecondaryColor3ui", catch_unwind(||(self.version_1_4.secondarycolor3ui)(red, green, blue)));
20644		#[cfg(feature = "diagnose")]
20645		if let Ok(ret) = ret {
20646			return to_result("glSecondaryColor3ui", ret, (self.version_1_4.geterror)());
20647		} else {
20648			return ret
20649		}
20650		#[cfg(not(feature = "diagnose"))]
20651		return ret;
20652	}
20653	#[inline(always)]
20654	fn glSecondaryColor3uiv(&self, v: *const GLuint) -> Result<()> {
20655		let ret = process_catch("glSecondaryColor3uiv", catch_unwind(||(self.version_1_4.secondarycolor3uiv)(v)));
20656		#[cfg(feature = "diagnose")]
20657		if let Ok(ret) = ret {
20658			return to_result("glSecondaryColor3uiv", ret, (self.version_1_4.geterror)());
20659		} else {
20660			return ret
20661		}
20662		#[cfg(not(feature = "diagnose"))]
20663		return ret;
20664	}
20665	#[inline(always)]
20666	fn glSecondaryColor3us(&self, red: GLushort, green: GLushort, blue: GLushort) -> Result<()> {
20667		let ret = process_catch("glSecondaryColor3us", catch_unwind(||(self.version_1_4.secondarycolor3us)(red, green, blue)));
20668		#[cfg(feature = "diagnose")]
20669		if let Ok(ret) = ret {
20670			return to_result("glSecondaryColor3us", ret, (self.version_1_4.geterror)());
20671		} else {
20672			return ret
20673		}
20674		#[cfg(not(feature = "diagnose"))]
20675		return ret;
20676	}
20677	#[inline(always)]
20678	fn glSecondaryColor3usv(&self, v: *const GLushort) -> Result<()> {
20679		let ret = process_catch("glSecondaryColor3usv", catch_unwind(||(self.version_1_4.secondarycolor3usv)(v)));
20680		#[cfg(feature = "diagnose")]
20681		if let Ok(ret) = ret {
20682			return to_result("glSecondaryColor3usv", ret, (self.version_1_4.geterror)());
20683		} else {
20684			return ret
20685		}
20686		#[cfg(not(feature = "diagnose"))]
20687		return ret;
20688	}
20689	#[inline(always)]
20690	fn glSecondaryColorPointer(&self, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()> {
20691		let ret = process_catch("glSecondaryColorPointer", catch_unwind(||(self.version_1_4.secondarycolorpointer)(size, type_, stride, pointer)));
20692		#[cfg(feature = "diagnose")]
20693		if let Ok(ret) = ret {
20694			return to_result("glSecondaryColorPointer", ret, (self.version_1_4.geterror)());
20695		} else {
20696			return ret
20697		}
20698		#[cfg(not(feature = "diagnose"))]
20699		return ret;
20700	}
20701	#[inline(always)]
20702	fn glWindowPos2d(&self, x: GLdouble, y: GLdouble) -> Result<()> {
20703		let ret = process_catch("glWindowPos2d", catch_unwind(||(self.version_1_4.windowpos2d)(x, y)));
20704		#[cfg(feature = "diagnose")]
20705		if let Ok(ret) = ret {
20706			return to_result("glWindowPos2d", ret, (self.version_1_4.geterror)());
20707		} else {
20708			return ret
20709		}
20710		#[cfg(not(feature = "diagnose"))]
20711		return ret;
20712	}
20713	#[inline(always)]
20714	fn glWindowPos2dv(&self, v: *const GLdouble) -> Result<()> {
20715		let ret = process_catch("glWindowPos2dv", catch_unwind(||(self.version_1_4.windowpos2dv)(v)));
20716		#[cfg(feature = "diagnose")]
20717		if let Ok(ret) = ret {
20718			return to_result("glWindowPos2dv", ret, (self.version_1_4.geterror)());
20719		} else {
20720			return ret
20721		}
20722		#[cfg(not(feature = "diagnose"))]
20723		return ret;
20724	}
20725	#[inline(always)]
20726	fn glWindowPos2f(&self, x: GLfloat, y: GLfloat) -> Result<()> {
20727		let ret = process_catch("glWindowPos2f", catch_unwind(||(self.version_1_4.windowpos2f)(x, y)));
20728		#[cfg(feature = "diagnose")]
20729		if let Ok(ret) = ret {
20730			return to_result("glWindowPos2f", ret, (self.version_1_4.geterror)());
20731		} else {
20732			return ret
20733		}
20734		#[cfg(not(feature = "diagnose"))]
20735		return ret;
20736	}
20737	#[inline(always)]
20738	fn glWindowPos2fv(&self, v: *const GLfloat) -> Result<()> {
20739		let ret = process_catch("glWindowPos2fv", catch_unwind(||(self.version_1_4.windowpos2fv)(v)));
20740		#[cfg(feature = "diagnose")]
20741		if let Ok(ret) = ret {
20742			return to_result("glWindowPos2fv", ret, (self.version_1_4.geterror)());
20743		} else {
20744			return ret
20745		}
20746		#[cfg(not(feature = "diagnose"))]
20747		return ret;
20748	}
20749	#[inline(always)]
20750	fn glWindowPos2i(&self, x: GLint, y: GLint) -> Result<()> {
20751		let ret = process_catch("glWindowPos2i", catch_unwind(||(self.version_1_4.windowpos2i)(x, y)));
20752		#[cfg(feature = "diagnose")]
20753		if let Ok(ret) = ret {
20754			return to_result("glWindowPos2i", ret, (self.version_1_4.geterror)());
20755		} else {
20756			return ret
20757		}
20758		#[cfg(not(feature = "diagnose"))]
20759		return ret;
20760	}
20761	#[inline(always)]
20762	fn glWindowPos2iv(&self, v: *const GLint) -> Result<()> {
20763		let ret = process_catch("glWindowPos2iv", catch_unwind(||(self.version_1_4.windowpos2iv)(v)));
20764		#[cfg(feature = "diagnose")]
20765		if let Ok(ret) = ret {
20766			return to_result("glWindowPos2iv", ret, (self.version_1_4.geterror)());
20767		} else {
20768			return ret
20769		}
20770		#[cfg(not(feature = "diagnose"))]
20771		return ret;
20772	}
20773	#[inline(always)]
20774	fn glWindowPos2s(&self, x: GLshort, y: GLshort) -> Result<()> {
20775		let ret = process_catch("glWindowPos2s", catch_unwind(||(self.version_1_4.windowpos2s)(x, y)));
20776		#[cfg(feature = "diagnose")]
20777		if let Ok(ret) = ret {
20778			return to_result("glWindowPos2s", ret, (self.version_1_4.geterror)());
20779		} else {
20780			return ret
20781		}
20782		#[cfg(not(feature = "diagnose"))]
20783		return ret;
20784	}
20785	#[inline(always)]
20786	fn glWindowPos2sv(&self, v: *const GLshort) -> Result<()> {
20787		let ret = process_catch("glWindowPos2sv", catch_unwind(||(self.version_1_4.windowpos2sv)(v)));
20788		#[cfg(feature = "diagnose")]
20789		if let Ok(ret) = ret {
20790			return to_result("glWindowPos2sv", ret, (self.version_1_4.geterror)());
20791		} else {
20792			return ret
20793		}
20794		#[cfg(not(feature = "diagnose"))]
20795		return ret;
20796	}
20797	#[inline(always)]
20798	fn glWindowPos3d(&self, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()> {
20799		let ret = process_catch("glWindowPos3d", catch_unwind(||(self.version_1_4.windowpos3d)(x, y, z)));
20800		#[cfg(feature = "diagnose")]
20801		if let Ok(ret) = ret {
20802			return to_result("glWindowPos3d", ret, (self.version_1_4.geterror)());
20803		} else {
20804			return ret
20805		}
20806		#[cfg(not(feature = "diagnose"))]
20807		return ret;
20808	}
20809	#[inline(always)]
20810	fn glWindowPos3dv(&self, v: *const GLdouble) -> Result<()> {
20811		let ret = process_catch("glWindowPos3dv", catch_unwind(||(self.version_1_4.windowpos3dv)(v)));
20812		#[cfg(feature = "diagnose")]
20813		if let Ok(ret) = ret {
20814			return to_result("glWindowPos3dv", ret, (self.version_1_4.geterror)());
20815		} else {
20816			return ret
20817		}
20818		#[cfg(not(feature = "diagnose"))]
20819		return ret;
20820	}
20821	#[inline(always)]
20822	fn glWindowPos3f(&self, x: GLfloat, y: GLfloat, z: GLfloat) -> Result<()> {
20823		let ret = process_catch("glWindowPos3f", catch_unwind(||(self.version_1_4.windowpos3f)(x, y, z)));
20824		#[cfg(feature = "diagnose")]
20825		if let Ok(ret) = ret {
20826			return to_result("glWindowPos3f", ret, (self.version_1_4.geterror)());
20827		} else {
20828			return ret
20829		}
20830		#[cfg(not(feature = "diagnose"))]
20831		return ret;
20832	}
20833	#[inline(always)]
20834	fn glWindowPos3fv(&self, v: *const GLfloat) -> Result<()> {
20835		let ret = process_catch("glWindowPos3fv", catch_unwind(||(self.version_1_4.windowpos3fv)(v)));
20836		#[cfg(feature = "diagnose")]
20837		if let Ok(ret) = ret {
20838			return to_result("glWindowPos3fv", ret, (self.version_1_4.geterror)());
20839		} else {
20840			return ret
20841		}
20842		#[cfg(not(feature = "diagnose"))]
20843		return ret;
20844	}
20845	#[inline(always)]
20846	fn glWindowPos3i(&self, x: GLint, y: GLint, z: GLint) -> Result<()> {
20847		let ret = process_catch("glWindowPos3i", catch_unwind(||(self.version_1_4.windowpos3i)(x, y, z)));
20848		#[cfg(feature = "diagnose")]
20849		if let Ok(ret) = ret {
20850			return to_result("glWindowPos3i", ret, (self.version_1_4.geterror)());
20851		} else {
20852			return ret
20853		}
20854		#[cfg(not(feature = "diagnose"))]
20855		return ret;
20856	}
20857	#[inline(always)]
20858	fn glWindowPos3iv(&self, v: *const GLint) -> Result<()> {
20859		let ret = process_catch("glWindowPos3iv", catch_unwind(||(self.version_1_4.windowpos3iv)(v)));
20860		#[cfg(feature = "diagnose")]
20861		if let Ok(ret) = ret {
20862			return to_result("glWindowPos3iv", ret, (self.version_1_4.geterror)());
20863		} else {
20864			return ret
20865		}
20866		#[cfg(not(feature = "diagnose"))]
20867		return ret;
20868	}
20869	#[inline(always)]
20870	fn glWindowPos3s(&self, x: GLshort, y: GLshort, z: GLshort) -> Result<()> {
20871		let ret = process_catch("glWindowPos3s", catch_unwind(||(self.version_1_4.windowpos3s)(x, y, z)));
20872		#[cfg(feature = "diagnose")]
20873		if let Ok(ret) = ret {
20874			return to_result("glWindowPos3s", ret, (self.version_1_4.geterror)());
20875		} else {
20876			return ret
20877		}
20878		#[cfg(not(feature = "diagnose"))]
20879		return ret;
20880	}
20881	#[inline(always)]
20882	fn glWindowPos3sv(&self, v: *const GLshort) -> Result<()> {
20883		let ret = process_catch("glWindowPos3sv", catch_unwind(||(self.version_1_4.windowpos3sv)(v)));
20884		#[cfg(feature = "diagnose")]
20885		if let Ok(ret) = ret {
20886			return to_result("glWindowPos3sv", ret, (self.version_1_4.geterror)());
20887		} else {
20888			return ret
20889		}
20890		#[cfg(not(feature = "diagnose"))]
20891		return ret;
20892	}
20893	#[inline(always)]
20894	fn glBlendColor(&self, red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat) -> Result<()> {
20895		let ret = process_catch("glBlendColor", catch_unwind(||(self.version_1_4.blendcolor)(red, green, blue, alpha)));
20896		#[cfg(feature = "diagnose")]
20897		if let Ok(ret) = ret {
20898			return to_result("glBlendColor", ret, (self.version_1_4.geterror)());
20899		} else {
20900			return ret
20901		}
20902		#[cfg(not(feature = "diagnose"))]
20903		return ret;
20904	}
20905	#[inline(always)]
20906	fn glBlendEquation(&self, mode: GLenum) -> Result<()> {
20907		let ret = process_catch("glBlendEquation", catch_unwind(||(self.version_1_4.blendequation)(mode)));
20908		#[cfg(feature = "diagnose")]
20909		if let Ok(ret) = ret {
20910			return to_result("glBlendEquation", ret, (self.version_1_4.geterror)());
20911		} else {
20912			return ret
20913		}
20914		#[cfg(not(feature = "diagnose"))]
20915		return ret;
20916	}
20917}
20918
20919impl GL_1_5 for GLCore {
20920	#[inline(always)]
20921	fn glGetError(&self) -> GLenum {
20922		(self.version_1_5.geterror)()
20923	}
20924	#[inline(always)]
20925	fn glGenQueries(&self, n: GLsizei, ids: *mut GLuint) -> Result<()> {
20926		let ret = process_catch("glGenQueries", catch_unwind(||(self.version_1_5.genqueries)(n, ids)));
20927		#[cfg(feature = "diagnose")]
20928		if let Ok(ret) = ret {
20929			return to_result("glGenQueries", ret, (self.version_1_5.geterror)());
20930		} else {
20931			return ret
20932		}
20933		#[cfg(not(feature = "diagnose"))]
20934		return ret;
20935	}
20936	#[inline(always)]
20937	fn glDeleteQueries(&self, n: GLsizei, ids: *const GLuint) -> Result<()> {
20938		let ret = process_catch("glDeleteQueries", catch_unwind(||(self.version_1_5.deletequeries)(n, ids)));
20939		#[cfg(feature = "diagnose")]
20940		if let Ok(ret) = ret {
20941			return to_result("glDeleteQueries", ret, (self.version_1_5.geterror)());
20942		} else {
20943			return ret
20944		}
20945		#[cfg(not(feature = "diagnose"))]
20946		return ret;
20947	}
20948	#[inline(always)]
20949	fn glIsQuery(&self, id: GLuint) -> Result<GLboolean> {
20950		let ret = process_catch("glIsQuery", catch_unwind(||(self.version_1_5.isquery)(id)));
20951		#[cfg(feature = "diagnose")]
20952		if let Ok(ret) = ret {
20953			return to_result("glIsQuery", ret, (self.version_1_5.geterror)());
20954		} else {
20955			return ret
20956		}
20957		#[cfg(not(feature = "diagnose"))]
20958		return ret;
20959	}
20960	#[inline(always)]
20961	fn glBeginQuery(&self, target: GLenum, id: GLuint) -> Result<()> {
20962		let ret = process_catch("glBeginQuery", catch_unwind(||(self.version_1_5.beginquery)(target, id)));
20963		#[cfg(feature = "diagnose")]
20964		if let Ok(ret) = ret {
20965			return to_result("glBeginQuery", ret, (self.version_1_5.geterror)());
20966		} else {
20967			return ret
20968		}
20969		#[cfg(not(feature = "diagnose"))]
20970		return ret;
20971	}
20972	#[inline(always)]
20973	fn glEndQuery(&self, target: GLenum) -> Result<()> {
20974		let ret = process_catch("glEndQuery", catch_unwind(||(self.version_1_5.endquery)(target)));
20975		#[cfg(feature = "diagnose")]
20976		if let Ok(ret) = ret {
20977			return to_result("glEndQuery", ret, (self.version_1_5.geterror)());
20978		} else {
20979			return ret
20980		}
20981		#[cfg(not(feature = "diagnose"))]
20982		return ret;
20983	}
20984	#[inline(always)]
20985	fn glGetQueryiv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
20986		let ret = process_catch("glGetQueryiv", catch_unwind(||(self.version_1_5.getqueryiv)(target, pname, params)));
20987		#[cfg(feature = "diagnose")]
20988		if let Ok(ret) = ret {
20989			return to_result("glGetQueryiv", ret, (self.version_1_5.geterror)());
20990		} else {
20991			return ret
20992		}
20993		#[cfg(not(feature = "diagnose"))]
20994		return ret;
20995	}
20996	#[inline(always)]
20997	fn glGetQueryObjectiv(&self, id: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
20998		let ret = process_catch("glGetQueryObjectiv", catch_unwind(||(self.version_1_5.getqueryobjectiv)(id, pname, params)));
20999		#[cfg(feature = "diagnose")]
21000		if let Ok(ret) = ret {
21001			return to_result("glGetQueryObjectiv", ret, (self.version_1_5.geterror)());
21002		} else {
21003			return ret
21004		}
21005		#[cfg(not(feature = "diagnose"))]
21006		return ret;
21007	}
21008	#[inline(always)]
21009	fn glGetQueryObjectuiv(&self, id: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()> {
21010		let ret = process_catch("glGetQueryObjectuiv", catch_unwind(||(self.version_1_5.getqueryobjectuiv)(id, pname, params)));
21011		#[cfg(feature = "diagnose")]
21012		if let Ok(ret) = ret {
21013			return to_result("glGetQueryObjectuiv", ret, (self.version_1_5.geterror)());
21014		} else {
21015			return ret
21016		}
21017		#[cfg(not(feature = "diagnose"))]
21018		return ret;
21019	}
21020	#[inline(always)]
21021	fn glBindBuffer(&self, target: GLenum, buffer: GLuint) -> Result<()> {
21022		let ret = process_catch("glBindBuffer", catch_unwind(||(self.version_1_5.bindbuffer)(target, buffer)));
21023		#[cfg(feature = "diagnose")]
21024		if let Ok(ret) = ret {
21025			return to_result("glBindBuffer", ret, (self.version_1_5.geterror)());
21026		} else {
21027			return ret
21028		}
21029		#[cfg(not(feature = "diagnose"))]
21030		return ret;
21031	}
21032	#[inline(always)]
21033	fn glDeleteBuffers(&self, n: GLsizei, buffers: *const GLuint) -> Result<()> {
21034		let ret = process_catch("glDeleteBuffers", catch_unwind(||(self.version_1_5.deletebuffers)(n, buffers)));
21035		#[cfg(feature = "diagnose")]
21036		if let Ok(ret) = ret {
21037			return to_result("glDeleteBuffers", ret, (self.version_1_5.geterror)());
21038		} else {
21039			return ret
21040		}
21041		#[cfg(not(feature = "diagnose"))]
21042		return ret;
21043	}
21044	#[inline(always)]
21045	fn glGenBuffers(&self, n: GLsizei, buffers: *mut GLuint) -> Result<()> {
21046		let ret = process_catch("glGenBuffers", catch_unwind(||(self.version_1_5.genbuffers)(n, buffers)));
21047		#[cfg(feature = "diagnose")]
21048		if let Ok(ret) = ret {
21049			return to_result("glGenBuffers", ret, (self.version_1_5.geterror)());
21050		} else {
21051			return ret
21052		}
21053		#[cfg(not(feature = "diagnose"))]
21054		return ret;
21055	}
21056	#[inline(always)]
21057	fn glIsBuffer(&self, buffer: GLuint) -> Result<GLboolean> {
21058		let ret = process_catch("glIsBuffer", catch_unwind(||(self.version_1_5.isbuffer)(buffer)));
21059		#[cfg(feature = "diagnose")]
21060		if let Ok(ret) = ret {
21061			return to_result("glIsBuffer", ret, (self.version_1_5.geterror)());
21062		} else {
21063			return ret
21064		}
21065		#[cfg(not(feature = "diagnose"))]
21066		return ret;
21067	}
21068	#[inline(always)]
21069	fn glBufferData(&self, target: GLenum, size: GLsizeiptr, data: *const c_void, usage: GLenum) -> Result<()> {
21070		let ret = process_catch("glBufferData", catch_unwind(||(self.version_1_5.bufferdata)(target, size, data, usage)));
21071		#[cfg(feature = "diagnose")]
21072		if let Ok(ret) = ret {
21073			return to_result("glBufferData", ret, (self.version_1_5.geterror)());
21074		} else {
21075			return ret
21076		}
21077		#[cfg(not(feature = "diagnose"))]
21078		return ret;
21079	}
21080	#[inline(always)]
21081	fn glBufferSubData(&self, target: GLenum, offset: GLintptr, size: GLsizeiptr, data: *const c_void) -> Result<()> {
21082		let ret = process_catch("glBufferSubData", catch_unwind(||(self.version_1_5.buffersubdata)(target, offset, size, data)));
21083		#[cfg(feature = "diagnose")]
21084		if let Ok(ret) = ret {
21085			return to_result("glBufferSubData", ret, (self.version_1_5.geterror)());
21086		} else {
21087			return ret
21088		}
21089		#[cfg(not(feature = "diagnose"))]
21090		return ret;
21091	}
21092	#[inline(always)]
21093	fn glGetBufferSubData(&self, target: GLenum, offset: GLintptr, size: GLsizeiptr, data: *mut c_void) -> Result<()> {
21094		let ret = process_catch("glGetBufferSubData", catch_unwind(||(self.version_1_5.getbuffersubdata)(target, offset, size, data)));
21095		#[cfg(feature = "diagnose")]
21096		if let Ok(ret) = ret {
21097			return to_result("glGetBufferSubData", ret, (self.version_1_5.geterror)());
21098		} else {
21099			return ret
21100		}
21101		#[cfg(not(feature = "diagnose"))]
21102		return ret;
21103	}
21104	#[inline(always)]
21105	fn glMapBuffer(&self, target: GLenum, access: GLenum) -> Result<*mut c_void> {
21106		let ret = process_catch("glMapBuffer", catch_unwind(||(self.version_1_5.mapbuffer)(target, access)));
21107		#[cfg(feature = "diagnose")]
21108		if let Ok(ret) = ret {
21109			return to_result("glMapBuffer", ret, (self.version_1_5.geterror)());
21110		} else {
21111			return ret
21112		}
21113		#[cfg(not(feature = "diagnose"))]
21114		return ret;
21115	}
21116	#[inline(always)]
21117	fn glUnmapBuffer(&self, target: GLenum) -> Result<GLboolean> {
21118		let ret = process_catch("glUnmapBuffer", catch_unwind(||(self.version_1_5.unmapbuffer)(target)));
21119		#[cfg(feature = "diagnose")]
21120		if let Ok(ret) = ret {
21121			return to_result("glUnmapBuffer", ret, (self.version_1_5.geterror)());
21122		} else {
21123			return ret
21124		}
21125		#[cfg(not(feature = "diagnose"))]
21126		return ret;
21127	}
21128	#[inline(always)]
21129	fn glGetBufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
21130		let ret = process_catch("glGetBufferParameteriv", catch_unwind(||(self.version_1_5.getbufferparameteriv)(target, pname, params)));
21131		#[cfg(feature = "diagnose")]
21132		if let Ok(ret) = ret {
21133			return to_result("glGetBufferParameteriv", ret, (self.version_1_5.geterror)());
21134		} else {
21135			return ret
21136		}
21137		#[cfg(not(feature = "diagnose"))]
21138		return ret;
21139	}
21140	#[inline(always)]
21141	fn glGetBufferPointerv(&self, target: GLenum, pname: GLenum, params: *mut *mut c_void) -> Result<()> {
21142		let ret = process_catch("glGetBufferPointerv", catch_unwind(||(self.version_1_5.getbufferpointerv)(target, pname, params)));
21143		#[cfg(feature = "diagnose")]
21144		if let Ok(ret) = ret {
21145			return to_result("glGetBufferPointerv", ret, (self.version_1_5.geterror)());
21146		} else {
21147			return ret
21148		}
21149		#[cfg(not(feature = "diagnose"))]
21150		return ret;
21151	}
21152}
21153
21154impl GL_2_0 for GLCore {
21155	#[inline(always)]
21156	fn glGetError(&self) -> GLenum {
21157		(self.version_2_0.geterror)()
21158	}
21159	#[inline(always)]
21160	fn glBlendEquationSeparate(&self, modeRGB: GLenum, modeAlpha: GLenum) -> Result<()> {
21161		let ret = process_catch("glBlendEquationSeparate", catch_unwind(||(self.version_2_0.blendequationseparate)(modeRGB, modeAlpha)));
21162		#[cfg(feature = "diagnose")]
21163		if let Ok(ret) = ret {
21164			return to_result("glBlendEquationSeparate", ret, (self.version_2_0.geterror)());
21165		} else {
21166			return ret
21167		}
21168		#[cfg(not(feature = "diagnose"))]
21169		return ret;
21170	}
21171	#[inline(always)]
21172	fn glDrawBuffers(&self, n: GLsizei, bufs: *const GLenum) -> Result<()> {
21173		let ret = process_catch("glDrawBuffers", catch_unwind(||(self.version_2_0.drawbuffers)(n, bufs)));
21174		#[cfg(feature = "diagnose")]
21175		if let Ok(ret) = ret {
21176			return to_result("glDrawBuffers", ret, (self.version_2_0.geterror)());
21177		} else {
21178			return ret
21179		}
21180		#[cfg(not(feature = "diagnose"))]
21181		return ret;
21182	}
21183	#[inline(always)]
21184	fn glStencilOpSeparate(&self, face: GLenum, sfail: GLenum, dpfail: GLenum, dppass: GLenum) -> Result<()> {
21185		let ret = process_catch("glStencilOpSeparate", catch_unwind(||(self.version_2_0.stencilopseparate)(face, sfail, dpfail, dppass)));
21186		#[cfg(feature = "diagnose")]
21187		if let Ok(ret) = ret {
21188			return to_result("glStencilOpSeparate", ret, (self.version_2_0.geterror)());
21189		} else {
21190			return ret
21191		}
21192		#[cfg(not(feature = "diagnose"))]
21193		return ret;
21194	}
21195	#[inline(always)]
21196	fn glStencilFuncSeparate(&self, face: GLenum, func: GLenum, ref_: GLint, mask: GLuint) -> Result<()> {
21197		let ret = process_catch("glStencilFuncSeparate", catch_unwind(||(self.version_2_0.stencilfuncseparate)(face, func, ref_, mask)));
21198		#[cfg(feature = "diagnose")]
21199		if let Ok(ret) = ret {
21200			return to_result("glStencilFuncSeparate", ret, (self.version_2_0.geterror)());
21201		} else {
21202			return ret
21203		}
21204		#[cfg(not(feature = "diagnose"))]
21205		return ret;
21206	}
21207	#[inline(always)]
21208	fn glStencilMaskSeparate(&self, face: GLenum, mask: GLuint) -> Result<()> {
21209		let ret = process_catch("glStencilMaskSeparate", catch_unwind(||(self.version_2_0.stencilmaskseparate)(face, mask)));
21210		#[cfg(feature = "diagnose")]
21211		if let Ok(ret) = ret {
21212			return to_result("glStencilMaskSeparate", ret, (self.version_2_0.geterror)());
21213		} else {
21214			return ret
21215		}
21216		#[cfg(not(feature = "diagnose"))]
21217		return ret;
21218	}
21219	#[inline(always)]
21220	fn glAttachShader(&self, program: GLuint, shader: GLuint) -> Result<()> {
21221		let ret = process_catch("glAttachShader", catch_unwind(||(self.version_2_0.attachshader)(program, shader)));
21222		#[cfg(feature = "diagnose")]
21223		if let Ok(ret) = ret {
21224			return to_result("glAttachShader", ret, (self.version_2_0.geterror)());
21225		} else {
21226			return ret
21227		}
21228		#[cfg(not(feature = "diagnose"))]
21229		return ret;
21230	}
21231	#[inline(always)]
21232	fn glBindAttribLocation(&self, program: GLuint, index: GLuint, name: *const GLchar) -> Result<()> {
21233		let ret = process_catch("glBindAttribLocation", catch_unwind(||(self.version_2_0.bindattriblocation)(program, index, name)));
21234		#[cfg(feature = "diagnose")]
21235		if let Ok(ret) = ret {
21236			return to_result("glBindAttribLocation", ret, (self.version_2_0.geterror)());
21237		} else {
21238			return ret
21239		}
21240		#[cfg(not(feature = "diagnose"))]
21241		return ret;
21242	}
21243	#[inline(always)]
21244	fn glCompileShader(&self, shader: GLuint) -> Result<()> {
21245		let ret = process_catch("glCompileShader", catch_unwind(||(self.version_2_0.compileshader)(shader)));
21246		#[cfg(feature = "diagnose")]
21247		if let Ok(ret) = ret {
21248			return to_result("glCompileShader", ret, (self.version_2_0.geterror)());
21249		} else {
21250			return ret
21251		}
21252		#[cfg(not(feature = "diagnose"))]
21253		return ret;
21254	}
21255	#[inline(always)]
21256	fn glCreateProgram(&self) -> Result<GLuint> {
21257		let ret = process_catch("glCreateProgram", catch_unwind(||(self.version_2_0.createprogram)()));
21258		#[cfg(feature = "diagnose")]
21259		if let Ok(ret) = ret {
21260			return to_result("glCreateProgram", ret, (self.version_2_0.geterror)());
21261		} else {
21262			return ret
21263		}
21264		#[cfg(not(feature = "diagnose"))]
21265		return ret;
21266	}
21267	#[inline(always)]
21268	fn glCreateShader(&self, type_: GLenum) -> Result<GLuint> {
21269		let ret = process_catch("glCreateShader", catch_unwind(||(self.version_2_0.createshader)(type_)));
21270		#[cfg(feature = "diagnose")]
21271		if let Ok(ret) = ret {
21272			return to_result("glCreateShader", ret, (self.version_2_0.geterror)());
21273		} else {
21274			return ret
21275		}
21276		#[cfg(not(feature = "diagnose"))]
21277		return ret;
21278	}
21279	#[inline(always)]
21280	fn glDeleteProgram(&self, program: GLuint) -> Result<()> {
21281		let ret = process_catch("glDeleteProgram", catch_unwind(||(self.version_2_0.deleteprogram)(program)));
21282		#[cfg(feature = "diagnose")]
21283		if let Ok(ret) = ret {
21284			return to_result("glDeleteProgram", ret, (self.version_2_0.geterror)());
21285		} else {
21286			return ret
21287		}
21288		#[cfg(not(feature = "diagnose"))]
21289		return ret;
21290	}
21291	#[inline(always)]
21292	fn glDeleteShader(&self, shader: GLuint) -> Result<()> {
21293		let ret = process_catch("glDeleteShader", catch_unwind(||(self.version_2_0.deleteshader)(shader)));
21294		#[cfg(feature = "diagnose")]
21295		if let Ok(ret) = ret {
21296			return to_result("glDeleteShader", ret, (self.version_2_0.geterror)());
21297		} else {
21298			return ret
21299		}
21300		#[cfg(not(feature = "diagnose"))]
21301		return ret;
21302	}
21303	#[inline(always)]
21304	fn glDetachShader(&self, program: GLuint, shader: GLuint) -> Result<()> {
21305		let ret = process_catch("glDetachShader", catch_unwind(||(self.version_2_0.detachshader)(program, shader)));
21306		#[cfg(feature = "diagnose")]
21307		if let Ok(ret) = ret {
21308			return to_result("glDetachShader", ret, (self.version_2_0.geterror)());
21309		} else {
21310			return ret
21311		}
21312		#[cfg(not(feature = "diagnose"))]
21313		return ret;
21314	}
21315	#[inline(always)]
21316	fn glDisableVertexAttribArray(&self, index: GLuint) -> Result<()> {
21317		let ret = process_catch("glDisableVertexAttribArray", catch_unwind(||(self.version_2_0.disablevertexattribarray)(index)));
21318		#[cfg(feature = "diagnose")]
21319		if let Ok(ret) = ret {
21320			return to_result("glDisableVertexAttribArray", ret, (self.version_2_0.geterror)());
21321		} else {
21322			return ret
21323		}
21324		#[cfg(not(feature = "diagnose"))]
21325		return ret;
21326	}
21327	#[inline(always)]
21328	fn glEnableVertexAttribArray(&self, index: GLuint) -> Result<()> {
21329		let ret = process_catch("glEnableVertexAttribArray", catch_unwind(||(self.version_2_0.enablevertexattribarray)(index)));
21330		#[cfg(feature = "diagnose")]
21331		if let Ok(ret) = ret {
21332			return to_result("glEnableVertexAttribArray", ret, (self.version_2_0.geterror)());
21333		} else {
21334			return ret
21335		}
21336		#[cfg(not(feature = "diagnose"))]
21337		return ret;
21338	}
21339	#[inline(always)]
21340	fn glGetActiveAttrib(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLint, type_: *mut GLenum, name: *mut GLchar) -> Result<()> {
21341		let ret = process_catch("glGetActiveAttrib", catch_unwind(||(self.version_2_0.getactiveattrib)(program, index, bufSize, length, size, type_, name)));
21342		#[cfg(feature = "diagnose")]
21343		if let Ok(ret) = ret {
21344			return to_result("glGetActiveAttrib", ret, (self.version_2_0.geterror)());
21345		} else {
21346			return ret
21347		}
21348		#[cfg(not(feature = "diagnose"))]
21349		return ret;
21350	}
21351	#[inline(always)]
21352	fn glGetActiveUniform(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLint, type_: *mut GLenum, name: *mut GLchar) -> Result<()> {
21353		let ret = process_catch("glGetActiveUniform", catch_unwind(||(self.version_2_0.getactiveuniform)(program, index, bufSize, length, size, type_, name)));
21354		#[cfg(feature = "diagnose")]
21355		if let Ok(ret) = ret {
21356			return to_result("glGetActiveUniform", ret, (self.version_2_0.geterror)());
21357		} else {
21358			return ret
21359		}
21360		#[cfg(not(feature = "diagnose"))]
21361		return ret;
21362	}
21363	#[inline(always)]
21364	fn glGetAttachedShaders(&self, program: GLuint, maxCount: GLsizei, count: *mut GLsizei, shaders: *mut GLuint) -> Result<()> {
21365		let ret = process_catch("glGetAttachedShaders", catch_unwind(||(self.version_2_0.getattachedshaders)(program, maxCount, count, shaders)));
21366		#[cfg(feature = "diagnose")]
21367		if let Ok(ret) = ret {
21368			return to_result("glGetAttachedShaders", ret, (self.version_2_0.geterror)());
21369		} else {
21370			return ret
21371		}
21372		#[cfg(not(feature = "diagnose"))]
21373		return ret;
21374	}
21375	#[inline(always)]
21376	fn glGetAttribLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint> {
21377		let ret = process_catch("glGetAttribLocation", catch_unwind(||(self.version_2_0.getattriblocation)(program, name)));
21378		#[cfg(feature = "diagnose")]
21379		if let Ok(ret) = ret {
21380			return to_result("glGetAttribLocation", ret, (self.version_2_0.geterror)());
21381		} else {
21382			return ret
21383		}
21384		#[cfg(not(feature = "diagnose"))]
21385		return ret;
21386	}
21387	#[inline(always)]
21388	fn glGetProgramiv(&self, program: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
21389		let ret = process_catch("glGetProgramiv", catch_unwind(||(self.version_2_0.getprogramiv)(program, pname, params)));
21390		#[cfg(feature = "diagnose")]
21391		if let Ok(ret) = ret {
21392			return to_result("glGetProgramiv", ret, (self.version_2_0.geterror)());
21393		} else {
21394			return ret
21395		}
21396		#[cfg(not(feature = "diagnose"))]
21397		return ret;
21398	}
21399	#[inline(always)]
21400	fn glGetProgramInfoLog(&self, program: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()> {
21401		let ret = process_catch("glGetProgramInfoLog", catch_unwind(||(self.version_2_0.getprograminfolog)(program, bufSize, length, infoLog)));
21402		#[cfg(feature = "diagnose")]
21403		if let Ok(ret) = ret {
21404			return to_result("glGetProgramInfoLog", ret, (self.version_2_0.geterror)());
21405		} else {
21406			return ret
21407		}
21408		#[cfg(not(feature = "diagnose"))]
21409		return ret;
21410	}
21411	#[inline(always)]
21412	fn glGetShaderiv(&self, shader: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
21413		let ret = process_catch("glGetShaderiv", catch_unwind(||(self.version_2_0.getshaderiv)(shader, pname, params)));
21414		#[cfg(feature = "diagnose")]
21415		if let Ok(ret) = ret {
21416			return to_result("glGetShaderiv", ret, (self.version_2_0.geterror)());
21417		} else {
21418			return ret
21419		}
21420		#[cfg(not(feature = "diagnose"))]
21421		return ret;
21422	}
21423	#[inline(always)]
21424	fn glGetShaderInfoLog(&self, shader: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()> {
21425		let ret = process_catch("glGetShaderInfoLog", catch_unwind(||(self.version_2_0.getshaderinfolog)(shader, bufSize, length, infoLog)));
21426		#[cfg(feature = "diagnose")]
21427		if let Ok(ret) = ret {
21428			return to_result("glGetShaderInfoLog", ret, (self.version_2_0.geterror)());
21429		} else {
21430			return ret
21431		}
21432		#[cfg(not(feature = "diagnose"))]
21433		return ret;
21434	}
21435	#[inline(always)]
21436	fn glGetShaderSource(&self, shader: GLuint, bufSize: GLsizei, length: *mut GLsizei, source: *mut GLchar) -> Result<()> {
21437		let ret = process_catch("glGetShaderSource", catch_unwind(||(self.version_2_0.getshadersource)(shader, bufSize, length, source)));
21438		#[cfg(feature = "diagnose")]
21439		if let Ok(ret) = ret {
21440			return to_result("glGetShaderSource", ret, (self.version_2_0.geterror)());
21441		} else {
21442			return ret
21443		}
21444		#[cfg(not(feature = "diagnose"))]
21445		return ret;
21446	}
21447	#[inline(always)]
21448	fn glGetUniformLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint> {
21449		let ret = process_catch("glGetUniformLocation", catch_unwind(||(self.version_2_0.getuniformlocation)(program, name)));
21450		#[cfg(feature = "diagnose")]
21451		if let Ok(ret) = ret {
21452			return to_result("glGetUniformLocation", ret, (self.version_2_0.geterror)());
21453		} else {
21454			return ret
21455		}
21456		#[cfg(not(feature = "diagnose"))]
21457		return ret;
21458	}
21459	#[inline(always)]
21460	fn glGetUniformfv(&self, program: GLuint, location: GLint, params: *mut GLfloat) -> Result<()> {
21461		let ret = process_catch("glGetUniformfv", catch_unwind(||(self.version_2_0.getuniformfv)(program, location, params)));
21462		#[cfg(feature = "diagnose")]
21463		if let Ok(ret) = ret {
21464			return to_result("glGetUniformfv", ret, (self.version_2_0.geterror)());
21465		} else {
21466			return ret
21467		}
21468		#[cfg(not(feature = "diagnose"))]
21469		return ret;
21470	}
21471	#[inline(always)]
21472	fn glGetUniformiv(&self, program: GLuint, location: GLint, params: *mut GLint) -> Result<()> {
21473		let ret = process_catch("glGetUniformiv", catch_unwind(||(self.version_2_0.getuniformiv)(program, location, params)));
21474		#[cfg(feature = "diagnose")]
21475		if let Ok(ret) = ret {
21476			return to_result("glGetUniformiv", ret, (self.version_2_0.geterror)());
21477		} else {
21478			return ret
21479		}
21480		#[cfg(not(feature = "diagnose"))]
21481		return ret;
21482	}
21483	#[inline(always)]
21484	fn glGetVertexAttribdv(&self, index: GLuint, pname: GLenum, params: *mut GLdouble) -> Result<()> {
21485		let ret = process_catch("glGetVertexAttribdv", catch_unwind(||(self.version_2_0.getvertexattribdv)(index, pname, params)));
21486		#[cfg(feature = "diagnose")]
21487		if let Ok(ret) = ret {
21488			return to_result("glGetVertexAttribdv", ret, (self.version_2_0.geterror)());
21489		} else {
21490			return ret
21491		}
21492		#[cfg(not(feature = "diagnose"))]
21493		return ret;
21494	}
21495	#[inline(always)]
21496	fn glGetVertexAttribfv(&self, index: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
21497		let ret = process_catch("glGetVertexAttribfv", catch_unwind(||(self.version_2_0.getvertexattribfv)(index, pname, params)));
21498		#[cfg(feature = "diagnose")]
21499		if let Ok(ret) = ret {
21500			return to_result("glGetVertexAttribfv", ret, (self.version_2_0.geterror)());
21501		} else {
21502			return ret
21503		}
21504		#[cfg(not(feature = "diagnose"))]
21505		return ret;
21506	}
21507	#[inline(always)]
21508	fn glGetVertexAttribiv(&self, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
21509		let ret = process_catch("glGetVertexAttribiv", catch_unwind(||(self.version_2_0.getvertexattribiv)(index, pname, params)));
21510		#[cfg(feature = "diagnose")]
21511		if let Ok(ret) = ret {
21512			return to_result("glGetVertexAttribiv", ret, (self.version_2_0.geterror)());
21513		} else {
21514			return ret
21515		}
21516		#[cfg(not(feature = "diagnose"))]
21517		return ret;
21518	}
21519	#[inline(always)]
21520	fn glGetVertexAttribPointerv(&self, index: GLuint, pname: GLenum, pointer: *mut *mut c_void) -> Result<()> {
21521		let ret = process_catch("glGetVertexAttribPointerv", catch_unwind(||(self.version_2_0.getvertexattribpointerv)(index, pname, pointer)));
21522		#[cfg(feature = "diagnose")]
21523		if let Ok(ret) = ret {
21524			return to_result("glGetVertexAttribPointerv", ret, (self.version_2_0.geterror)());
21525		} else {
21526			return ret
21527		}
21528		#[cfg(not(feature = "diagnose"))]
21529		return ret;
21530	}
21531	#[inline(always)]
21532	fn glIsProgram(&self, program: GLuint) -> Result<GLboolean> {
21533		let ret = process_catch("glIsProgram", catch_unwind(||(self.version_2_0.isprogram)(program)));
21534		#[cfg(feature = "diagnose")]
21535		if let Ok(ret) = ret {
21536			return to_result("glIsProgram", ret, (self.version_2_0.geterror)());
21537		} else {
21538			return ret
21539		}
21540		#[cfg(not(feature = "diagnose"))]
21541		return ret;
21542	}
21543	#[inline(always)]
21544	fn glIsShader(&self, shader: GLuint) -> Result<GLboolean> {
21545		let ret = process_catch("glIsShader", catch_unwind(||(self.version_2_0.isshader)(shader)));
21546		#[cfg(feature = "diagnose")]
21547		if let Ok(ret) = ret {
21548			return to_result("glIsShader", ret, (self.version_2_0.geterror)());
21549		} else {
21550			return ret
21551		}
21552		#[cfg(not(feature = "diagnose"))]
21553		return ret;
21554	}
21555	#[inline(always)]
21556	fn glLinkProgram(&self, program: GLuint) -> Result<()> {
21557		let ret = process_catch("glLinkProgram", catch_unwind(||(self.version_2_0.linkprogram)(program)));
21558		#[cfg(feature = "diagnose")]
21559		if let Ok(ret) = ret {
21560			return to_result("glLinkProgram", ret, (self.version_2_0.geterror)());
21561		} else {
21562			return ret
21563		}
21564		#[cfg(not(feature = "diagnose"))]
21565		return ret;
21566	}
21567	#[inline(always)]
21568	fn glShaderSource(&self, shader: GLuint, count: GLsizei, string_: *const *const GLchar, length: *const GLint) -> Result<()> {
21569		let ret = process_catch("glShaderSource", catch_unwind(||(self.version_2_0.shadersource)(shader, count, string_, length)));
21570		#[cfg(feature = "diagnose")]
21571		if let Ok(ret) = ret {
21572			return to_result("glShaderSource", ret, (self.version_2_0.geterror)());
21573		} else {
21574			return ret
21575		}
21576		#[cfg(not(feature = "diagnose"))]
21577		return ret;
21578	}
21579	#[inline(always)]
21580	fn glUseProgram(&self, program: GLuint) -> Result<()> {
21581		let ret = process_catch("glUseProgram", catch_unwind(||(self.version_2_0.useprogram)(program)));
21582		#[cfg(feature = "diagnose")]
21583		if let Ok(ret) = ret {
21584			return to_result("glUseProgram", ret, (self.version_2_0.geterror)());
21585		} else {
21586			return ret
21587		}
21588		#[cfg(not(feature = "diagnose"))]
21589		return ret;
21590	}
21591	#[inline(always)]
21592	fn glUniform1f(&self, location: GLint, v0: GLfloat) -> Result<()> {
21593		let ret = process_catch("glUniform1f", catch_unwind(||(self.version_2_0.uniform1f)(location, v0)));
21594		#[cfg(feature = "diagnose")]
21595		if let Ok(ret) = ret {
21596			return to_result("glUniform1f", ret, (self.version_2_0.geterror)());
21597		} else {
21598			return ret
21599		}
21600		#[cfg(not(feature = "diagnose"))]
21601		return ret;
21602	}
21603	#[inline(always)]
21604	fn glUniform2f(&self, location: GLint, v0: GLfloat, v1: GLfloat) -> Result<()> {
21605		let ret = process_catch("glUniform2f", catch_unwind(||(self.version_2_0.uniform2f)(location, v0, v1)));
21606		#[cfg(feature = "diagnose")]
21607		if let Ok(ret) = ret {
21608			return to_result("glUniform2f", ret, (self.version_2_0.geterror)());
21609		} else {
21610			return ret
21611		}
21612		#[cfg(not(feature = "diagnose"))]
21613		return ret;
21614	}
21615	#[inline(always)]
21616	fn glUniform3f(&self, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat) -> Result<()> {
21617		let ret = process_catch("glUniform3f", catch_unwind(||(self.version_2_0.uniform3f)(location, v0, v1, v2)));
21618		#[cfg(feature = "diagnose")]
21619		if let Ok(ret) = ret {
21620			return to_result("glUniform3f", ret, (self.version_2_0.geterror)());
21621		} else {
21622			return ret
21623		}
21624		#[cfg(not(feature = "diagnose"))]
21625		return ret;
21626	}
21627	#[inline(always)]
21628	fn glUniform4f(&self, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat) -> Result<()> {
21629		let ret = process_catch("glUniform4f", catch_unwind(||(self.version_2_0.uniform4f)(location, v0, v1, v2, v3)));
21630		#[cfg(feature = "diagnose")]
21631		if let Ok(ret) = ret {
21632			return to_result("glUniform4f", ret, (self.version_2_0.geterror)());
21633		} else {
21634			return ret
21635		}
21636		#[cfg(not(feature = "diagnose"))]
21637		return ret;
21638	}
21639	#[inline(always)]
21640	fn glUniform1i(&self, location: GLint, v0: GLint) -> Result<()> {
21641		let ret = process_catch("glUniform1i", catch_unwind(||(self.version_2_0.uniform1i)(location, v0)));
21642		#[cfg(feature = "diagnose")]
21643		if let Ok(ret) = ret {
21644			return to_result("glUniform1i", ret, (self.version_2_0.geterror)());
21645		} else {
21646			return ret
21647		}
21648		#[cfg(not(feature = "diagnose"))]
21649		return ret;
21650	}
21651	#[inline(always)]
21652	fn glUniform2i(&self, location: GLint, v0: GLint, v1: GLint) -> Result<()> {
21653		let ret = process_catch("glUniform2i", catch_unwind(||(self.version_2_0.uniform2i)(location, v0, v1)));
21654		#[cfg(feature = "diagnose")]
21655		if let Ok(ret) = ret {
21656			return to_result("glUniform2i", ret, (self.version_2_0.geterror)());
21657		} else {
21658			return ret
21659		}
21660		#[cfg(not(feature = "diagnose"))]
21661		return ret;
21662	}
21663	#[inline(always)]
21664	fn glUniform3i(&self, location: GLint, v0: GLint, v1: GLint, v2: GLint) -> Result<()> {
21665		let ret = process_catch("glUniform3i", catch_unwind(||(self.version_2_0.uniform3i)(location, v0, v1, v2)));
21666		#[cfg(feature = "diagnose")]
21667		if let Ok(ret) = ret {
21668			return to_result("glUniform3i", ret, (self.version_2_0.geterror)());
21669		} else {
21670			return ret
21671		}
21672		#[cfg(not(feature = "diagnose"))]
21673		return ret;
21674	}
21675	#[inline(always)]
21676	fn glUniform4i(&self, location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint) -> Result<()> {
21677		let ret = process_catch("glUniform4i", catch_unwind(||(self.version_2_0.uniform4i)(location, v0, v1, v2, v3)));
21678		#[cfg(feature = "diagnose")]
21679		if let Ok(ret) = ret {
21680			return to_result("glUniform4i", ret, (self.version_2_0.geterror)());
21681		} else {
21682			return ret
21683		}
21684		#[cfg(not(feature = "diagnose"))]
21685		return ret;
21686	}
21687	#[inline(always)]
21688	fn glUniform1fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
21689		let ret = process_catch("glUniform1fv", catch_unwind(||(self.version_2_0.uniform1fv)(location, count, value)));
21690		#[cfg(feature = "diagnose")]
21691		if let Ok(ret) = ret {
21692			return to_result("glUniform1fv", ret, (self.version_2_0.geterror)());
21693		} else {
21694			return ret
21695		}
21696		#[cfg(not(feature = "diagnose"))]
21697		return ret;
21698	}
21699	#[inline(always)]
21700	fn glUniform2fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
21701		let ret = process_catch("glUniform2fv", catch_unwind(||(self.version_2_0.uniform2fv)(location, count, value)));
21702		#[cfg(feature = "diagnose")]
21703		if let Ok(ret) = ret {
21704			return to_result("glUniform2fv", ret, (self.version_2_0.geterror)());
21705		} else {
21706			return ret
21707		}
21708		#[cfg(not(feature = "diagnose"))]
21709		return ret;
21710	}
21711	#[inline(always)]
21712	fn glUniform3fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
21713		let ret = process_catch("glUniform3fv", catch_unwind(||(self.version_2_0.uniform3fv)(location, count, value)));
21714		#[cfg(feature = "diagnose")]
21715		if let Ok(ret) = ret {
21716			return to_result("glUniform3fv", ret, (self.version_2_0.geterror)());
21717		} else {
21718			return ret
21719		}
21720		#[cfg(not(feature = "diagnose"))]
21721		return ret;
21722	}
21723	#[inline(always)]
21724	fn glUniform4fv(&self, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
21725		let ret = process_catch("glUniform4fv", catch_unwind(||(self.version_2_0.uniform4fv)(location, count, value)));
21726		#[cfg(feature = "diagnose")]
21727		if let Ok(ret) = ret {
21728			return to_result("glUniform4fv", ret, (self.version_2_0.geterror)());
21729		} else {
21730			return ret
21731		}
21732		#[cfg(not(feature = "diagnose"))]
21733		return ret;
21734	}
21735	#[inline(always)]
21736	fn glUniform1iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
21737		let ret = process_catch("glUniform1iv", catch_unwind(||(self.version_2_0.uniform1iv)(location, count, value)));
21738		#[cfg(feature = "diagnose")]
21739		if let Ok(ret) = ret {
21740			return to_result("glUniform1iv", ret, (self.version_2_0.geterror)());
21741		} else {
21742			return ret
21743		}
21744		#[cfg(not(feature = "diagnose"))]
21745		return ret;
21746	}
21747	#[inline(always)]
21748	fn glUniform2iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
21749		let ret = process_catch("glUniform2iv", catch_unwind(||(self.version_2_0.uniform2iv)(location, count, value)));
21750		#[cfg(feature = "diagnose")]
21751		if let Ok(ret) = ret {
21752			return to_result("glUniform2iv", ret, (self.version_2_0.geterror)());
21753		} else {
21754			return ret
21755		}
21756		#[cfg(not(feature = "diagnose"))]
21757		return ret;
21758	}
21759	#[inline(always)]
21760	fn glUniform3iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
21761		let ret = process_catch("glUniform3iv", catch_unwind(||(self.version_2_0.uniform3iv)(location, count, value)));
21762		#[cfg(feature = "diagnose")]
21763		if let Ok(ret) = ret {
21764			return to_result("glUniform3iv", ret, (self.version_2_0.geterror)());
21765		} else {
21766			return ret
21767		}
21768		#[cfg(not(feature = "diagnose"))]
21769		return ret;
21770	}
21771	#[inline(always)]
21772	fn glUniform4iv(&self, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
21773		let ret = process_catch("glUniform4iv", catch_unwind(||(self.version_2_0.uniform4iv)(location, count, value)));
21774		#[cfg(feature = "diagnose")]
21775		if let Ok(ret) = ret {
21776			return to_result("glUniform4iv", ret, (self.version_2_0.geterror)());
21777		} else {
21778			return ret
21779		}
21780		#[cfg(not(feature = "diagnose"))]
21781		return ret;
21782	}
21783	#[inline(always)]
21784	fn glUniformMatrix2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
21785		let ret = process_catch("glUniformMatrix2fv", catch_unwind(||(self.version_2_0.uniformmatrix2fv)(location, count, transpose, value)));
21786		#[cfg(feature = "diagnose")]
21787		if let Ok(ret) = ret {
21788			return to_result("glUniformMatrix2fv", ret, (self.version_2_0.geterror)());
21789		} else {
21790			return ret
21791		}
21792		#[cfg(not(feature = "diagnose"))]
21793		return ret;
21794	}
21795	#[inline(always)]
21796	fn glUniformMatrix3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
21797		let ret = process_catch("glUniformMatrix3fv", catch_unwind(||(self.version_2_0.uniformmatrix3fv)(location, count, transpose, value)));
21798		#[cfg(feature = "diagnose")]
21799		if let Ok(ret) = ret {
21800			return to_result("glUniformMatrix3fv", ret, (self.version_2_0.geterror)());
21801		} else {
21802			return ret
21803		}
21804		#[cfg(not(feature = "diagnose"))]
21805		return ret;
21806	}
21807	#[inline(always)]
21808	fn glUniformMatrix4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
21809		let ret = process_catch("glUniformMatrix4fv", catch_unwind(||(self.version_2_0.uniformmatrix4fv)(location, count, transpose, value)));
21810		#[cfg(feature = "diagnose")]
21811		if let Ok(ret) = ret {
21812			return to_result("glUniformMatrix4fv", ret, (self.version_2_0.geterror)());
21813		} else {
21814			return ret
21815		}
21816		#[cfg(not(feature = "diagnose"))]
21817		return ret;
21818	}
21819	#[inline(always)]
21820	fn glValidateProgram(&self, program: GLuint) -> Result<()> {
21821		let ret = process_catch("glValidateProgram", catch_unwind(||(self.version_2_0.validateprogram)(program)));
21822		#[cfg(feature = "diagnose")]
21823		if let Ok(ret) = ret {
21824			return to_result("glValidateProgram", ret, (self.version_2_0.geterror)());
21825		} else {
21826			return ret
21827		}
21828		#[cfg(not(feature = "diagnose"))]
21829		return ret;
21830	}
21831	#[inline(always)]
21832	fn glVertexAttrib1d(&self, index: GLuint, x: GLdouble) -> Result<()> {
21833		let ret = process_catch("glVertexAttrib1d", catch_unwind(||(self.version_2_0.vertexattrib1d)(index, x)));
21834		#[cfg(feature = "diagnose")]
21835		if let Ok(ret) = ret {
21836			return to_result("glVertexAttrib1d", ret, (self.version_2_0.geterror)());
21837		} else {
21838			return ret
21839		}
21840		#[cfg(not(feature = "diagnose"))]
21841		return ret;
21842	}
21843	#[inline(always)]
21844	fn glVertexAttrib1dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
21845		let ret = process_catch("glVertexAttrib1dv", catch_unwind(||(self.version_2_0.vertexattrib1dv)(index, v)));
21846		#[cfg(feature = "diagnose")]
21847		if let Ok(ret) = ret {
21848			return to_result("glVertexAttrib1dv", ret, (self.version_2_0.geterror)());
21849		} else {
21850			return ret
21851		}
21852		#[cfg(not(feature = "diagnose"))]
21853		return ret;
21854	}
21855	#[inline(always)]
21856	fn glVertexAttrib1f(&self, index: GLuint, x: GLfloat) -> Result<()> {
21857		let ret = process_catch("glVertexAttrib1f", catch_unwind(||(self.version_2_0.vertexattrib1f)(index, x)));
21858		#[cfg(feature = "diagnose")]
21859		if let Ok(ret) = ret {
21860			return to_result("glVertexAttrib1f", ret, (self.version_2_0.geterror)());
21861		} else {
21862			return ret
21863		}
21864		#[cfg(not(feature = "diagnose"))]
21865		return ret;
21866	}
21867	#[inline(always)]
21868	fn glVertexAttrib1fv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
21869		let ret = process_catch("glVertexAttrib1fv", catch_unwind(||(self.version_2_0.vertexattrib1fv)(index, v)));
21870		#[cfg(feature = "diagnose")]
21871		if let Ok(ret) = ret {
21872			return to_result("glVertexAttrib1fv", ret, (self.version_2_0.geterror)());
21873		} else {
21874			return ret
21875		}
21876		#[cfg(not(feature = "diagnose"))]
21877		return ret;
21878	}
21879	#[inline(always)]
21880	fn glVertexAttrib1s(&self, index: GLuint, x: GLshort) -> Result<()> {
21881		let ret = process_catch("glVertexAttrib1s", catch_unwind(||(self.version_2_0.vertexattrib1s)(index, x)));
21882		#[cfg(feature = "diagnose")]
21883		if let Ok(ret) = ret {
21884			return to_result("glVertexAttrib1s", ret, (self.version_2_0.geterror)());
21885		} else {
21886			return ret
21887		}
21888		#[cfg(not(feature = "diagnose"))]
21889		return ret;
21890	}
21891	#[inline(always)]
21892	fn glVertexAttrib1sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
21893		let ret = process_catch("glVertexAttrib1sv", catch_unwind(||(self.version_2_0.vertexattrib1sv)(index, v)));
21894		#[cfg(feature = "diagnose")]
21895		if let Ok(ret) = ret {
21896			return to_result("glVertexAttrib1sv", ret, (self.version_2_0.geterror)());
21897		} else {
21898			return ret
21899		}
21900		#[cfg(not(feature = "diagnose"))]
21901		return ret;
21902	}
21903	#[inline(always)]
21904	fn glVertexAttrib2d(&self, index: GLuint, x: GLdouble, y: GLdouble) -> Result<()> {
21905		let ret = process_catch("glVertexAttrib2d", catch_unwind(||(self.version_2_0.vertexattrib2d)(index, x, y)));
21906		#[cfg(feature = "diagnose")]
21907		if let Ok(ret) = ret {
21908			return to_result("glVertexAttrib2d", ret, (self.version_2_0.geterror)());
21909		} else {
21910			return ret
21911		}
21912		#[cfg(not(feature = "diagnose"))]
21913		return ret;
21914	}
21915	#[inline(always)]
21916	fn glVertexAttrib2dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
21917		let ret = process_catch("glVertexAttrib2dv", catch_unwind(||(self.version_2_0.vertexattrib2dv)(index, v)));
21918		#[cfg(feature = "diagnose")]
21919		if let Ok(ret) = ret {
21920			return to_result("glVertexAttrib2dv", ret, (self.version_2_0.geterror)());
21921		} else {
21922			return ret
21923		}
21924		#[cfg(not(feature = "diagnose"))]
21925		return ret;
21926	}
21927	#[inline(always)]
21928	fn glVertexAttrib2f(&self, index: GLuint, x: GLfloat, y: GLfloat) -> Result<()> {
21929		let ret = process_catch("glVertexAttrib2f", catch_unwind(||(self.version_2_0.vertexattrib2f)(index, x, y)));
21930		#[cfg(feature = "diagnose")]
21931		if let Ok(ret) = ret {
21932			return to_result("glVertexAttrib2f", ret, (self.version_2_0.geterror)());
21933		} else {
21934			return ret
21935		}
21936		#[cfg(not(feature = "diagnose"))]
21937		return ret;
21938	}
21939	#[inline(always)]
21940	fn glVertexAttrib2fv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
21941		let ret = process_catch("glVertexAttrib2fv", catch_unwind(||(self.version_2_0.vertexattrib2fv)(index, v)));
21942		#[cfg(feature = "diagnose")]
21943		if let Ok(ret) = ret {
21944			return to_result("glVertexAttrib2fv", ret, (self.version_2_0.geterror)());
21945		} else {
21946			return ret
21947		}
21948		#[cfg(not(feature = "diagnose"))]
21949		return ret;
21950	}
21951	#[inline(always)]
21952	fn glVertexAttrib2s(&self, index: GLuint, x: GLshort, y: GLshort) -> Result<()> {
21953		let ret = process_catch("glVertexAttrib2s", catch_unwind(||(self.version_2_0.vertexattrib2s)(index, x, y)));
21954		#[cfg(feature = "diagnose")]
21955		if let Ok(ret) = ret {
21956			return to_result("glVertexAttrib2s", ret, (self.version_2_0.geterror)());
21957		} else {
21958			return ret
21959		}
21960		#[cfg(not(feature = "diagnose"))]
21961		return ret;
21962	}
21963	#[inline(always)]
21964	fn glVertexAttrib2sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
21965		let ret = process_catch("glVertexAttrib2sv", catch_unwind(||(self.version_2_0.vertexattrib2sv)(index, v)));
21966		#[cfg(feature = "diagnose")]
21967		if let Ok(ret) = ret {
21968			return to_result("glVertexAttrib2sv", ret, (self.version_2_0.geterror)());
21969		} else {
21970			return ret
21971		}
21972		#[cfg(not(feature = "diagnose"))]
21973		return ret;
21974	}
21975	#[inline(always)]
21976	fn glVertexAttrib3d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()> {
21977		let ret = process_catch("glVertexAttrib3d", catch_unwind(||(self.version_2_0.vertexattrib3d)(index, x, y, z)));
21978		#[cfg(feature = "diagnose")]
21979		if let Ok(ret) = ret {
21980			return to_result("glVertexAttrib3d", ret, (self.version_2_0.geterror)());
21981		} else {
21982			return ret
21983		}
21984		#[cfg(not(feature = "diagnose"))]
21985		return ret;
21986	}
21987	#[inline(always)]
21988	fn glVertexAttrib3dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
21989		let ret = process_catch("glVertexAttrib3dv", catch_unwind(||(self.version_2_0.vertexattrib3dv)(index, v)));
21990		#[cfg(feature = "diagnose")]
21991		if let Ok(ret) = ret {
21992			return to_result("glVertexAttrib3dv", ret, (self.version_2_0.geterror)());
21993		} else {
21994			return ret
21995		}
21996		#[cfg(not(feature = "diagnose"))]
21997		return ret;
21998	}
21999	#[inline(always)]
22000	fn glVertexAttrib3f(&self, index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat) -> Result<()> {
22001		let ret = process_catch("glVertexAttrib3f", catch_unwind(||(self.version_2_0.vertexattrib3f)(index, x, y, z)));
22002		#[cfg(feature = "diagnose")]
22003		if let Ok(ret) = ret {
22004			return to_result("glVertexAttrib3f", ret, (self.version_2_0.geterror)());
22005		} else {
22006			return ret
22007		}
22008		#[cfg(not(feature = "diagnose"))]
22009		return ret;
22010	}
22011	#[inline(always)]
22012	fn glVertexAttrib3fv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
22013		let ret = process_catch("glVertexAttrib3fv", catch_unwind(||(self.version_2_0.vertexattrib3fv)(index, v)));
22014		#[cfg(feature = "diagnose")]
22015		if let Ok(ret) = ret {
22016			return to_result("glVertexAttrib3fv", ret, (self.version_2_0.geterror)());
22017		} else {
22018			return ret
22019		}
22020		#[cfg(not(feature = "diagnose"))]
22021		return ret;
22022	}
22023	#[inline(always)]
22024	fn glVertexAttrib3s(&self, index: GLuint, x: GLshort, y: GLshort, z: GLshort) -> Result<()> {
22025		let ret = process_catch("glVertexAttrib3s", catch_unwind(||(self.version_2_0.vertexattrib3s)(index, x, y, z)));
22026		#[cfg(feature = "diagnose")]
22027		if let Ok(ret) = ret {
22028			return to_result("glVertexAttrib3s", ret, (self.version_2_0.geterror)());
22029		} else {
22030			return ret
22031		}
22032		#[cfg(not(feature = "diagnose"))]
22033		return ret;
22034	}
22035	#[inline(always)]
22036	fn glVertexAttrib3sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
22037		let ret = process_catch("glVertexAttrib3sv", catch_unwind(||(self.version_2_0.vertexattrib3sv)(index, v)));
22038		#[cfg(feature = "diagnose")]
22039		if let Ok(ret) = ret {
22040			return to_result("glVertexAttrib3sv", ret, (self.version_2_0.geterror)());
22041		} else {
22042			return ret
22043		}
22044		#[cfg(not(feature = "diagnose"))]
22045		return ret;
22046	}
22047	#[inline(always)]
22048	fn glVertexAttrib4Nbv(&self, index: GLuint, v: *const GLbyte) -> Result<()> {
22049		let ret = process_catch("glVertexAttrib4Nbv", catch_unwind(||(self.version_2_0.vertexattrib4nbv)(index, v)));
22050		#[cfg(feature = "diagnose")]
22051		if let Ok(ret) = ret {
22052			return to_result("glVertexAttrib4Nbv", ret, (self.version_2_0.geterror)());
22053		} else {
22054			return ret
22055		}
22056		#[cfg(not(feature = "diagnose"))]
22057		return ret;
22058	}
22059	#[inline(always)]
22060	fn glVertexAttrib4Niv(&self, index: GLuint, v: *const GLint) -> Result<()> {
22061		let ret = process_catch("glVertexAttrib4Niv", catch_unwind(||(self.version_2_0.vertexattrib4niv)(index, v)));
22062		#[cfg(feature = "diagnose")]
22063		if let Ok(ret) = ret {
22064			return to_result("glVertexAttrib4Niv", ret, (self.version_2_0.geterror)());
22065		} else {
22066			return ret
22067		}
22068		#[cfg(not(feature = "diagnose"))]
22069		return ret;
22070	}
22071	#[inline(always)]
22072	fn glVertexAttrib4Nsv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
22073		let ret = process_catch("glVertexAttrib4Nsv", catch_unwind(||(self.version_2_0.vertexattrib4nsv)(index, v)));
22074		#[cfg(feature = "diagnose")]
22075		if let Ok(ret) = ret {
22076			return to_result("glVertexAttrib4Nsv", ret, (self.version_2_0.geterror)());
22077		} else {
22078			return ret
22079		}
22080		#[cfg(not(feature = "diagnose"))]
22081		return ret;
22082	}
22083	#[inline(always)]
22084	fn glVertexAttrib4Nub(&self, index: GLuint, x: GLubyte, y: GLubyte, z: GLubyte, w: GLubyte) -> Result<()> {
22085		let ret = process_catch("glVertexAttrib4Nub", catch_unwind(||(self.version_2_0.vertexattrib4nub)(index, x, y, z, w)));
22086		#[cfg(feature = "diagnose")]
22087		if let Ok(ret) = ret {
22088			return to_result("glVertexAttrib4Nub", ret, (self.version_2_0.geterror)());
22089		} else {
22090			return ret
22091		}
22092		#[cfg(not(feature = "diagnose"))]
22093		return ret;
22094	}
22095	#[inline(always)]
22096	fn glVertexAttrib4Nubv(&self, index: GLuint, v: *const GLubyte) -> Result<()> {
22097		let ret = process_catch("glVertexAttrib4Nubv", catch_unwind(||(self.version_2_0.vertexattrib4nubv)(index, v)));
22098		#[cfg(feature = "diagnose")]
22099		if let Ok(ret) = ret {
22100			return to_result("glVertexAttrib4Nubv", ret, (self.version_2_0.geterror)());
22101		} else {
22102			return ret
22103		}
22104		#[cfg(not(feature = "diagnose"))]
22105		return ret;
22106	}
22107	#[inline(always)]
22108	fn glVertexAttrib4Nuiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
22109		let ret = process_catch("glVertexAttrib4Nuiv", catch_unwind(||(self.version_2_0.vertexattrib4nuiv)(index, v)));
22110		#[cfg(feature = "diagnose")]
22111		if let Ok(ret) = ret {
22112			return to_result("glVertexAttrib4Nuiv", ret, (self.version_2_0.geterror)());
22113		} else {
22114			return ret
22115		}
22116		#[cfg(not(feature = "diagnose"))]
22117		return ret;
22118	}
22119	#[inline(always)]
22120	fn glVertexAttrib4Nusv(&self, index: GLuint, v: *const GLushort) -> Result<()> {
22121		let ret = process_catch("glVertexAttrib4Nusv", catch_unwind(||(self.version_2_0.vertexattrib4nusv)(index, v)));
22122		#[cfg(feature = "diagnose")]
22123		if let Ok(ret) = ret {
22124			return to_result("glVertexAttrib4Nusv", ret, (self.version_2_0.geterror)());
22125		} else {
22126			return ret
22127		}
22128		#[cfg(not(feature = "diagnose"))]
22129		return ret;
22130	}
22131	#[inline(always)]
22132	fn glVertexAttrib4bv(&self, index: GLuint, v: *const GLbyte) -> Result<()> {
22133		let ret = process_catch("glVertexAttrib4bv", catch_unwind(||(self.version_2_0.vertexattrib4bv)(index, v)));
22134		#[cfg(feature = "diagnose")]
22135		if let Ok(ret) = ret {
22136			return to_result("glVertexAttrib4bv", ret, (self.version_2_0.geterror)());
22137		} else {
22138			return ret
22139		}
22140		#[cfg(not(feature = "diagnose"))]
22141		return ret;
22142	}
22143	#[inline(always)]
22144	fn glVertexAttrib4d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()> {
22145		let ret = process_catch("glVertexAttrib4d", catch_unwind(||(self.version_2_0.vertexattrib4d)(index, x, y, z, w)));
22146		#[cfg(feature = "diagnose")]
22147		if let Ok(ret) = ret {
22148			return to_result("glVertexAttrib4d", ret, (self.version_2_0.geterror)());
22149		} else {
22150			return ret
22151		}
22152		#[cfg(not(feature = "diagnose"))]
22153		return ret;
22154	}
22155	#[inline(always)]
22156	fn glVertexAttrib4dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
22157		let ret = process_catch("glVertexAttrib4dv", catch_unwind(||(self.version_2_0.vertexattrib4dv)(index, v)));
22158		#[cfg(feature = "diagnose")]
22159		if let Ok(ret) = ret {
22160			return to_result("glVertexAttrib4dv", ret, (self.version_2_0.geterror)());
22161		} else {
22162			return ret
22163		}
22164		#[cfg(not(feature = "diagnose"))]
22165		return ret;
22166	}
22167	#[inline(always)]
22168	fn glVertexAttrib4f(&self, index: GLuint, x: GLfloat, y: GLfloat, z: GLfloat, w: GLfloat) -> Result<()> {
22169		let ret = process_catch("glVertexAttrib4f", catch_unwind(||(self.version_2_0.vertexattrib4f)(index, x, y, z, w)));
22170		#[cfg(feature = "diagnose")]
22171		if let Ok(ret) = ret {
22172			return to_result("glVertexAttrib4f", ret, (self.version_2_0.geterror)());
22173		} else {
22174			return ret
22175		}
22176		#[cfg(not(feature = "diagnose"))]
22177		return ret;
22178	}
22179	#[inline(always)]
22180	fn glVertexAttrib4fv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
22181		let ret = process_catch("glVertexAttrib4fv", catch_unwind(||(self.version_2_0.vertexattrib4fv)(index, v)));
22182		#[cfg(feature = "diagnose")]
22183		if let Ok(ret) = ret {
22184			return to_result("glVertexAttrib4fv", ret, (self.version_2_0.geterror)());
22185		} else {
22186			return ret
22187		}
22188		#[cfg(not(feature = "diagnose"))]
22189		return ret;
22190	}
22191	#[inline(always)]
22192	fn glVertexAttrib4iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
22193		let ret = process_catch("glVertexAttrib4iv", catch_unwind(||(self.version_2_0.vertexattrib4iv)(index, v)));
22194		#[cfg(feature = "diagnose")]
22195		if let Ok(ret) = ret {
22196			return to_result("glVertexAttrib4iv", ret, (self.version_2_0.geterror)());
22197		} else {
22198			return ret
22199		}
22200		#[cfg(not(feature = "diagnose"))]
22201		return ret;
22202	}
22203	#[inline(always)]
22204	fn glVertexAttrib4s(&self, index: GLuint, x: GLshort, y: GLshort, z: GLshort, w: GLshort) -> Result<()> {
22205		let ret = process_catch("glVertexAttrib4s", catch_unwind(||(self.version_2_0.vertexattrib4s)(index, x, y, z, w)));
22206		#[cfg(feature = "diagnose")]
22207		if let Ok(ret) = ret {
22208			return to_result("glVertexAttrib4s", ret, (self.version_2_0.geterror)());
22209		} else {
22210			return ret
22211		}
22212		#[cfg(not(feature = "diagnose"))]
22213		return ret;
22214	}
22215	#[inline(always)]
22216	fn glVertexAttrib4sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
22217		let ret = process_catch("glVertexAttrib4sv", catch_unwind(||(self.version_2_0.vertexattrib4sv)(index, v)));
22218		#[cfg(feature = "diagnose")]
22219		if let Ok(ret) = ret {
22220			return to_result("glVertexAttrib4sv", ret, (self.version_2_0.geterror)());
22221		} else {
22222			return ret
22223		}
22224		#[cfg(not(feature = "diagnose"))]
22225		return ret;
22226	}
22227	#[inline(always)]
22228	fn glVertexAttrib4ubv(&self, index: GLuint, v: *const GLubyte) -> Result<()> {
22229		let ret = process_catch("glVertexAttrib4ubv", catch_unwind(||(self.version_2_0.vertexattrib4ubv)(index, v)));
22230		#[cfg(feature = "diagnose")]
22231		if let Ok(ret) = ret {
22232			return to_result("glVertexAttrib4ubv", ret, (self.version_2_0.geterror)());
22233		} else {
22234			return ret
22235		}
22236		#[cfg(not(feature = "diagnose"))]
22237		return ret;
22238	}
22239	#[inline(always)]
22240	fn glVertexAttrib4uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
22241		let ret = process_catch("glVertexAttrib4uiv", catch_unwind(||(self.version_2_0.vertexattrib4uiv)(index, v)));
22242		#[cfg(feature = "diagnose")]
22243		if let Ok(ret) = ret {
22244			return to_result("glVertexAttrib4uiv", ret, (self.version_2_0.geterror)());
22245		} else {
22246			return ret
22247		}
22248		#[cfg(not(feature = "diagnose"))]
22249		return ret;
22250	}
22251	#[inline(always)]
22252	fn glVertexAttrib4usv(&self, index: GLuint, v: *const GLushort) -> Result<()> {
22253		let ret = process_catch("glVertexAttrib4usv", catch_unwind(||(self.version_2_0.vertexattrib4usv)(index, v)));
22254		#[cfg(feature = "diagnose")]
22255		if let Ok(ret) = ret {
22256			return to_result("glVertexAttrib4usv", ret, (self.version_2_0.geterror)());
22257		} else {
22258			return ret
22259		}
22260		#[cfg(not(feature = "diagnose"))]
22261		return ret;
22262	}
22263	#[inline(always)]
22264	fn glVertexAttribPointer(&self, index: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, stride: GLsizei, pointer: *const c_void) -> Result<()> {
22265		let ret = process_catch("glVertexAttribPointer", catch_unwind(||(self.version_2_0.vertexattribpointer)(index, size, type_, normalized, stride, pointer)));
22266		#[cfg(feature = "diagnose")]
22267		if let Ok(ret) = ret {
22268			return to_result("glVertexAttribPointer", ret, (self.version_2_0.geterror)());
22269		} else {
22270			return ret
22271		}
22272		#[cfg(not(feature = "diagnose"))]
22273		return ret;
22274	}
22275	#[inline(always)]
22276	fn get_shading_language_version(&self) -> &'static str {
22277		self.version_2_0.shading_language_version
22278	}
22279}
22280
22281impl GL_2_1 for GLCore {
22282	#[inline(always)]
22283	fn glGetError(&self) -> GLenum {
22284		(self.version_2_1.geterror)()
22285	}
22286	#[inline(always)]
22287	fn glUniformMatrix2x3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
22288		let ret = process_catch("glUniformMatrix2x3fv", catch_unwind(||(self.version_2_1.uniformmatrix2x3fv)(location, count, transpose, value)));
22289		#[cfg(feature = "diagnose")]
22290		if let Ok(ret) = ret {
22291			return to_result("glUniformMatrix2x3fv", ret, (self.version_2_1.geterror)());
22292		} else {
22293			return ret
22294		}
22295		#[cfg(not(feature = "diagnose"))]
22296		return ret;
22297	}
22298	#[inline(always)]
22299	fn glUniformMatrix3x2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
22300		let ret = process_catch("glUniformMatrix3x2fv", catch_unwind(||(self.version_2_1.uniformmatrix3x2fv)(location, count, transpose, value)));
22301		#[cfg(feature = "diagnose")]
22302		if let Ok(ret) = ret {
22303			return to_result("glUniformMatrix3x2fv", ret, (self.version_2_1.geterror)());
22304		} else {
22305			return ret
22306		}
22307		#[cfg(not(feature = "diagnose"))]
22308		return ret;
22309	}
22310	#[inline(always)]
22311	fn glUniformMatrix2x4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
22312		let ret = process_catch("glUniformMatrix2x4fv", catch_unwind(||(self.version_2_1.uniformmatrix2x4fv)(location, count, transpose, value)));
22313		#[cfg(feature = "diagnose")]
22314		if let Ok(ret) = ret {
22315			return to_result("glUniformMatrix2x4fv", ret, (self.version_2_1.geterror)());
22316		} else {
22317			return ret
22318		}
22319		#[cfg(not(feature = "diagnose"))]
22320		return ret;
22321	}
22322	#[inline(always)]
22323	fn glUniformMatrix4x2fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
22324		let ret = process_catch("glUniformMatrix4x2fv", catch_unwind(||(self.version_2_1.uniformmatrix4x2fv)(location, count, transpose, value)));
22325		#[cfg(feature = "diagnose")]
22326		if let Ok(ret) = ret {
22327			return to_result("glUniformMatrix4x2fv", ret, (self.version_2_1.geterror)());
22328		} else {
22329			return ret
22330		}
22331		#[cfg(not(feature = "diagnose"))]
22332		return ret;
22333	}
22334	#[inline(always)]
22335	fn glUniformMatrix3x4fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
22336		let ret = process_catch("glUniformMatrix3x4fv", catch_unwind(||(self.version_2_1.uniformmatrix3x4fv)(location, count, transpose, value)));
22337		#[cfg(feature = "diagnose")]
22338		if let Ok(ret) = ret {
22339			return to_result("glUniformMatrix3x4fv", ret, (self.version_2_1.geterror)());
22340		} else {
22341			return ret
22342		}
22343		#[cfg(not(feature = "diagnose"))]
22344		return ret;
22345	}
22346	#[inline(always)]
22347	fn glUniformMatrix4x3fv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
22348		let ret = process_catch("glUniformMatrix4x3fv", catch_unwind(||(self.version_2_1.uniformmatrix4x3fv)(location, count, transpose, value)));
22349		#[cfg(feature = "diagnose")]
22350		if let Ok(ret) = ret {
22351			return to_result("glUniformMatrix4x3fv", ret, (self.version_2_1.geterror)());
22352		} else {
22353			return ret
22354		}
22355		#[cfg(not(feature = "diagnose"))]
22356		return ret;
22357	}
22358}
22359
22360impl GL_3_0 for GLCore {
22361	#[inline(always)]
22362	fn glGetError(&self) -> GLenum {
22363		(self.version_3_0.geterror)()
22364	}
22365	#[inline(always)]
22366	fn glColorMaski(&self, index: GLuint, r: GLboolean, g: GLboolean, b: GLboolean, a: GLboolean) -> Result<()> {
22367		let ret = process_catch("glColorMaski", catch_unwind(||(self.version_3_0.colormaski)(index, r, g, b, a)));
22368		#[cfg(feature = "diagnose")]
22369		if let Ok(ret) = ret {
22370			return to_result("glColorMaski", ret, (self.version_3_0.geterror)());
22371		} else {
22372			return ret
22373		}
22374		#[cfg(not(feature = "diagnose"))]
22375		return ret;
22376	}
22377	#[inline(always)]
22378	fn glGetBooleani_v(&self, target: GLenum, index: GLuint, data: *mut GLboolean) -> Result<()> {
22379		let ret = process_catch("glGetBooleani_v", catch_unwind(||(self.version_3_0.getbooleani_v)(target, index, data)));
22380		#[cfg(feature = "diagnose")]
22381		if let Ok(ret) = ret {
22382			return to_result("glGetBooleani_v", ret, (self.version_3_0.geterror)());
22383		} else {
22384			return ret
22385		}
22386		#[cfg(not(feature = "diagnose"))]
22387		return ret;
22388	}
22389	#[inline(always)]
22390	fn glGetIntegeri_v(&self, target: GLenum, index: GLuint, data: *mut GLint) -> Result<()> {
22391		let ret = process_catch("glGetIntegeri_v", catch_unwind(||(self.version_3_0.getintegeri_v)(target, index, data)));
22392		#[cfg(feature = "diagnose")]
22393		if let Ok(ret) = ret {
22394			return to_result("glGetIntegeri_v", ret, (self.version_3_0.geterror)());
22395		} else {
22396			return ret
22397		}
22398		#[cfg(not(feature = "diagnose"))]
22399		return ret;
22400	}
22401	#[inline(always)]
22402	fn glEnablei(&self, target: GLenum, index: GLuint) -> Result<()> {
22403		let ret = process_catch("glEnablei", catch_unwind(||(self.version_3_0.enablei)(target, index)));
22404		#[cfg(feature = "diagnose")]
22405		if let Ok(ret) = ret {
22406			return to_result("glEnablei", ret, (self.version_3_0.geterror)());
22407		} else {
22408			return ret
22409		}
22410		#[cfg(not(feature = "diagnose"))]
22411		return ret;
22412	}
22413	#[inline(always)]
22414	fn glDisablei(&self, target: GLenum, index: GLuint) -> Result<()> {
22415		let ret = process_catch("glDisablei", catch_unwind(||(self.version_3_0.disablei)(target, index)));
22416		#[cfg(feature = "diagnose")]
22417		if let Ok(ret) = ret {
22418			return to_result("glDisablei", ret, (self.version_3_0.geterror)());
22419		} else {
22420			return ret
22421		}
22422		#[cfg(not(feature = "diagnose"))]
22423		return ret;
22424	}
22425	#[inline(always)]
22426	fn glIsEnabledi(&self, target: GLenum, index: GLuint) -> Result<GLboolean> {
22427		let ret = process_catch("glIsEnabledi", catch_unwind(||(self.version_3_0.isenabledi)(target, index)));
22428		#[cfg(feature = "diagnose")]
22429		if let Ok(ret) = ret {
22430			return to_result("glIsEnabledi", ret, (self.version_3_0.geterror)());
22431		} else {
22432			return ret
22433		}
22434		#[cfg(not(feature = "diagnose"))]
22435		return ret;
22436	}
22437	#[inline(always)]
22438	fn glBeginTransformFeedback(&self, primitiveMode: GLenum) -> Result<()> {
22439		let ret = process_catch("glBeginTransformFeedback", catch_unwind(||(self.version_3_0.begintransformfeedback)(primitiveMode)));
22440		#[cfg(feature = "diagnose")]
22441		if let Ok(ret) = ret {
22442			return to_result("glBeginTransformFeedback", ret, (self.version_3_0.geterror)());
22443		} else {
22444			return ret
22445		}
22446		#[cfg(not(feature = "diagnose"))]
22447		return ret;
22448	}
22449	#[inline(always)]
22450	fn glEndTransformFeedback(&self) -> Result<()> {
22451		let ret = process_catch("glEndTransformFeedback", catch_unwind(||(self.version_3_0.endtransformfeedback)()));
22452		#[cfg(feature = "diagnose")]
22453		if let Ok(ret) = ret {
22454			return to_result("glEndTransformFeedback", ret, (self.version_3_0.geterror)());
22455		} else {
22456			return ret
22457		}
22458		#[cfg(not(feature = "diagnose"))]
22459		return ret;
22460	}
22461	#[inline(always)]
22462	fn glBindBufferRange(&self, target: GLenum, index: GLuint, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()> {
22463		let ret = process_catch("glBindBufferRange", catch_unwind(||(self.version_3_0.bindbufferrange)(target, index, buffer, offset, size)));
22464		#[cfg(feature = "diagnose")]
22465		if let Ok(ret) = ret {
22466			return to_result("glBindBufferRange", ret, (self.version_3_0.geterror)());
22467		} else {
22468			return ret
22469		}
22470		#[cfg(not(feature = "diagnose"))]
22471		return ret;
22472	}
22473	#[inline(always)]
22474	fn glBindBufferBase(&self, target: GLenum, index: GLuint, buffer: GLuint) -> Result<()> {
22475		let ret = process_catch("glBindBufferBase", catch_unwind(||(self.version_3_0.bindbufferbase)(target, index, buffer)));
22476		#[cfg(feature = "diagnose")]
22477		if let Ok(ret) = ret {
22478			return to_result("glBindBufferBase", ret, (self.version_3_0.geterror)());
22479		} else {
22480			return ret
22481		}
22482		#[cfg(not(feature = "diagnose"))]
22483		return ret;
22484	}
22485	#[inline(always)]
22486	fn glTransformFeedbackVaryings(&self, program: GLuint, count: GLsizei, varyings: *const *const GLchar, bufferMode: GLenum) -> Result<()> {
22487		let ret = process_catch("glTransformFeedbackVaryings", catch_unwind(||(self.version_3_0.transformfeedbackvaryings)(program, count, varyings, bufferMode)));
22488		#[cfg(feature = "diagnose")]
22489		if let Ok(ret) = ret {
22490			return to_result("glTransformFeedbackVaryings", ret, (self.version_3_0.geterror)());
22491		} else {
22492			return ret
22493		}
22494		#[cfg(not(feature = "diagnose"))]
22495		return ret;
22496	}
22497	#[inline(always)]
22498	fn glGetTransformFeedbackVarying(&self, program: GLuint, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, size: *mut GLsizei, type_: *mut GLenum, name: *mut GLchar) -> Result<()> {
22499		let ret = process_catch("glGetTransformFeedbackVarying", catch_unwind(||(self.version_3_0.gettransformfeedbackvarying)(program, index, bufSize, length, size, type_, name)));
22500		#[cfg(feature = "diagnose")]
22501		if let Ok(ret) = ret {
22502			return to_result("glGetTransformFeedbackVarying", ret, (self.version_3_0.geterror)());
22503		} else {
22504			return ret
22505		}
22506		#[cfg(not(feature = "diagnose"))]
22507		return ret;
22508	}
22509	#[inline(always)]
22510	fn glClampColor(&self, target: GLenum, clamp: GLenum) -> Result<()> {
22511		let ret = process_catch("glClampColor", catch_unwind(||(self.version_3_0.clampcolor)(target, clamp)));
22512		#[cfg(feature = "diagnose")]
22513		if let Ok(ret) = ret {
22514			return to_result("glClampColor", ret, (self.version_3_0.geterror)());
22515		} else {
22516			return ret
22517		}
22518		#[cfg(not(feature = "diagnose"))]
22519		return ret;
22520	}
22521	#[inline(always)]
22522	fn glBeginConditionalRender(&self, id: GLuint, mode: GLenum) -> Result<()> {
22523		let ret = process_catch("glBeginConditionalRender", catch_unwind(||(self.version_3_0.beginconditionalrender)(id, mode)));
22524		#[cfg(feature = "diagnose")]
22525		if let Ok(ret) = ret {
22526			return to_result("glBeginConditionalRender", ret, (self.version_3_0.geterror)());
22527		} else {
22528			return ret
22529		}
22530		#[cfg(not(feature = "diagnose"))]
22531		return ret;
22532	}
22533	#[inline(always)]
22534	fn glEndConditionalRender(&self) -> Result<()> {
22535		let ret = process_catch("glEndConditionalRender", catch_unwind(||(self.version_3_0.endconditionalrender)()));
22536		#[cfg(feature = "diagnose")]
22537		if let Ok(ret) = ret {
22538			return to_result("glEndConditionalRender", ret, (self.version_3_0.geterror)());
22539		} else {
22540			return ret
22541		}
22542		#[cfg(not(feature = "diagnose"))]
22543		return ret;
22544	}
22545	#[inline(always)]
22546	fn glVertexAttribIPointer(&self, index: GLuint, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()> {
22547		let ret = process_catch("glVertexAttribIPointer", catch_unwind(||(self.version_3_0.vertexattribipointer)(index, size, type_, stride, pointer)));
22548		#[cfg(feature = "diagnose")]
22549		if let Ok(ret) = ret {
22550			return to_result("glVertexAttribIPointer", ret, (self.version_3_0.geterror)());
22551		} else {
22552			return ret
22553		}
22554		#[cfg(not(feature = "diagnose"))]
22555		return ret;
22556	}
22557	#[inline(always)]
22558	fn glGetVertexAttribIiv(&self, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
22559		let ret = process_catch("glGetVertexAttribIiv", catch_unwind(||(self.version_3_0.getvertexattribiiv)(index, pname, params)));
22560		#[cfg(feature = "diagnose")]
22561		if let Ok(ret) = ret {
22562			return to_result("glGetVertexAttribIiv", ret, (self.version_3_0.geterror)());
22563		} else {
22564			return ret
22565		}
22566		#[cfg(not(feature = "diagnose"))]
22567		return ret;
22568	}
22569	#[inline(always)]
22570	fn glGetVertexAttribIuiv(&self, index: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()> {
22571		let ret = process_catch("glGetVertexAttribIuiv", catch_unwind(||(self.version_3_0.getvertexattribiuiv)(index, pname, params)));
22572		#[cfg(feature = "diagnose")]
22573		if let Ok(ret) = ret {
22574			return to_result("glGetVertexAttribIuiv", ret, (self.version_3_0.geterror)());
22575		} else {
22576			return ret
22577		}
22578		#[cfg(not(feature = "diagnose"))]
22579		return ret;
22580	}
22581	#[inline(always)]
22582	fn glVertexAttribI1i(&self, index: GLuint, x: GLint) -> Result<()> {
22583		let ret = process_catch("glVertexAttribI1i", catch_unwind(||(self.version_3_0.vertexattribi1i)(index, x)));
22584		#[cfg(feature = "diagnose")]
22585		if let Ok(ret) = ret {
22586			return to_result("glVertexAttribI1i", ret, (self.version_3_0.geterror)());
22587		} else {
22588			return ret
22589		}
22590		#[cfg(not(feature = "diagnose"))]
22591		return ret;
22592	}
22593	#[inline(always)]
22594	fn glVertexAttribI2i(&self, index: GLuint, x: GLint, y: GLint) -> Result<()> {
22595		let ret = process_catch("glVertexAttribI2i", catch_unwind(||(self.version_3_0.vertexattribi2i)(index, x, y)));
22596		#[cfg(feature = "diagnose")]
22597		if let Ok(ret) = ret {
22598			return to_result("glVertexAttribI2i", ret, (self.version_3_0.geterror)());
22599		} else {
22600			return ret
22601		}
22602		#[cfg(not(feature = "diagnose"))]
22603		return ret;
22604	}
22605	#[inline(always)]
22606	fn glVertexAttribI3i(&self, index: GLuint, x: GLint, y: GLint, z: GLint) -> Result<()> {
22607		let ret = process_catch("glVertexAttribI3i", catch_unwind(||(self.version_3_0.vertexattribi3i)(index, x, y, z)));
22608		#[cfg(feature = "diagnose")]
22609		if let Ok(ret) = ret {
22610			return to_result("glVertexAttribI3i", ret, (self.version_3_0.geterror)());
22611		} else {
22612			return ret
22613		}
22614		#[cfg(not(feature = "diagnose"))]
22615		return ret;
22616	}
22617	#[inline(always)]
22618	fn glVertexAttribI4i(&self, index: GLuint, x: GLint, y: GLint, z: GLint, w: GLint) -> Result<()> {
22619		let ret = process_catch("glVertexAttribI4i", catch_unwind(||(self.version_3_0.vertexattribi4i)(index, x, y, z, w)));
22620		#[cfg(feature = "diagnose")]
22621		if let Ok(ret) = ret {
22622			return to_result("glVertexAttribI4i", ret, (self.version_3_0.geterror)());
22623		} else {
22624			return ret
22625		}
22626		#[cfg(not(feature = "diagnose"))]
22627		return ret;
22628	}
22629	#[inline(always)]
22630	fn glVertexAttribI1ui(&self, index: GLuint, x: GLuint) -> Result<()> {
22631		let ret = process_catch("glVertexAttribI1ui", catch_unwind(||(self.version_3_0.vertexattribi1ui)(index, x)));
22632		#[cfg(feature = "diagnose")]
22633		if let Ok(ret) = ret {
22634			return to_result("glVertexAttribI1ui", ret, (self.version_3_0.geterror)());
22635		} else {
22636			return ret
22637		}
22638		#[cfg(not(feature = "diagnose"))]
22639		return ret;
22640	}
22641	#[inline(always)]
22642	fn glVertexAttribI2ui(&self, index: GLuint, x: GLuint, y: GLuint) -> Result<()> {
22643		let ret = process_catch("glVertexAttribI2ui", catch_unwind(||(self.version_3_0.vertexattribi2ui)(index, x, y)));
22644		#[cfg(feature = "diagnose")]
22645		if let Ok(ret) = ret {
22646			return to_result("glVertexAttribI2ui", ret, (self.version_3_0.geterror)());
22647		} else {
22648			return ret
22649		}
22650		#[cfg(not(feature = "diagnose"))]
22651		return ret;
22652	}
22653	#[inline(always)]
22654	fn glVertexAttribI3ui(&self, index: GLuint, x: GLuint, y: GLuint, z: GLuint) -> Result<()> {
22655		let ret = process_catch("glVertexAttribI3ui", catch_unwind(||(self.version_3_0.vertexattribi3ui)(index, x, y, z)));
22656		#[cfg(feature = "diagnose")]
22657		if let Ok(ret) = ret {
22658			return to_result("glVertexAttribI3ui", ret, (self.version_3_0.geterror)());
22659		} else {
22660			return ret
22661		}
22662		#[cfg(not(feature = "diagnose"))]
22663		return ret;
22664	}
22665	#[inline(always)]
22666	fn glVertexAttribI4ui(&self, index: GLuint, x: GLuint, y: GLuint, z: GLuint, w: GLuint) -> Result<()> {
22667		let ret = process_catch("glVertexAttribI4ui", catch_unwind(||(self.version_3_0.vertexattribi4ui)(index, x, y, z, w)));
22668		#[cfg(feature = "diagnose")]
22669		if let Ok(ret) = ret {
22670			return to_result("glVertexAttribI4ui", ret, (self.version_3_0.geterror)());
22671		} else {
22672			return ret
22673		}
22674		#[cfg(not(feature = "diagnose"))]
22675		return ret;
22676	}
22677	#[inline(always)]
22678	fn glVertexAttribI1iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
22679		let ret = process_catch("glVertexAttribI1iv", catch_unwind(||(self.version_3_0.vertexattribi1iv)(index, v)));
22680		#[cfg(feature = "diagnose")]
22681		if let Ok(ret) = ret {
22682			return to_result("glVertexAttribI1iv", ret, (self.version_3_0.geterror)());
22683		} else {
22684			return ret
22685		}
22686		#[cfg(not(feature = "diagnose"))]
22687		return ret;
22688	}
22689	#[inline(always)]
22690	fn glVertexAttribI2iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
22691		let ret = process_catch("glVertexAttribI2iv", catch_unwind(||(self.version_3_0.vertexattribi2iv)(index, v)));
22692		#[cfg(feature = "diagnose")]
22693		if let Ok(ret) = ret {
22694			return to_result("glVertexAttribI2iv", ret, (self.version_3_0.geterror)());
22695		} else {
22696			return ret
22697		}
22698		#[cfg(not(feature = "diagnose"))]
22699		return ret;
22700	}
22701	#[inline(always)]
22702	fn glVertexAttribI3iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
22703		let ret = process_catch("glVertexAttribI3iv", catch_unwind(||(self.version_3_0.vertexattribi3iv)(index, v)));
22704		#[cfg(feature = "diagnose")]
22705		if let Ok(ret) = ret {
22706			return to_result("glVertexAttribI3iv", ret, (self.version_3_0.geterror)());
22707		} else {
22708			return ret
22709		}
22710		#[cfg(not(feature = "diagnose"))]
22711		return ret;
22712	}
22713	#[inline(always)]
22714	fn glVertexAttribI4iv(&self, index: GLuint, v: *const GLint) -> Result<()> {
22715		let ret = process_catch("glVertexAttribI4iv", catch_unwind(||(self.version_3_0.vertexattribi4iv)(index, v)));
22716		#[cfg(feature = "diagnose")]
22717		if let Ok(ret) = ret {
22718			return to_result("glVertexAttribI4iv", ret, (self.version_3_0.geterror)());
22719		} else {
22720			return ret
22721		}
22722		#[cfg(not(feature = "diagnose"))]
22723		return ret;
22724	}
22725	#[inline(always)]
22726	fn glVertexAttribI1uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
22727		let ret = process_catch("glVertexAttribI1uiv", catch_unwind(||(self.version_3_0.vertexattribi1uiv)(index, v)));
22728		#[cfg(feature = "diagnose")]
22729		if let Ok(ret) = ret {
22730			return to_result("glVertexAttribI1uiv", ret, (self.version_3_0.geterror)());
22731		} else {
22732			return ret
22733		}
22734		#[cfg(not(feature = "diagnose"))]
22735		return ret;
22736	}
22737	#[inline(always)]
22738	fn glVertexAttribI2uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
22739		let ret = process_catch("glVertexAttribI2uiv", catch_unwind(||(self.version_3_0.vertexattribi2uiv)(index, v)));
22740		#[cfg(feature = "diagnose")]
22741		if let Ok(ret) = ret {
22742			return to_result("glVertexAttribI2uiv", ret, (self.version_3_0.geterror)());
22743		} else {
22744			return ret
22745		}
22746		#[cfg(not(feature = "diagnose"))]
22747		return ret;
22748	}
22749	#[inline(always)]
22750	fn glVertexAttribI3uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
22751		let ret = process_catch("glVertexAttribI3uiv", catch_unwind(||(self.version_3_0.vertexattribi3uiv)(index, v)));
22752		#[cfg(feature = "diagnose")]
22753		if let Ok(ret) = ret {
22754			return to_result("glVertexAttribI3uiv", ret, (self.version_3_0.geterror)());
22755		} else {
22756			return ret
22757		}
22758		#[cfg(not(feature = "diagnose"))]
22759		return ret;
22760	}
22761	#[inline(always)]
22762	fn glVertexAttribI4uiv(&self, index: GLuint, v: *const GLuint) -> Result<()> {
22763		let ret = process_catch("glVertexAttribI4uiv", catch_unwind(||(self.version_3_0.vertexattribi4uiv)(index, v)));
22764		#[cfg(feature = "diagnose")]
22765		if let Ok(ret) = ret {
22766			return to_result("glVertexAttribI4uiv", ret, (self.version_3_0.geterror)());
22767		} else {
22768			return ret
22769		}
22770		#[cfg(not(feature = "diagnose"))]
22771		return ret;
22772	}
22773	#[inline(always)]
22774	fn glVertexAttribI4bv(&self, index: GLuint, v: *const GLbyte) -> Result<()> {
22775		let ret = process_catch("glVertexAttribI4bv", catch_unwind(||(self.version_3_0.vertexattribi4bv)(index, v)));
22776		#[cfg(feature = "diagnose")]
22777		if let Ok(ret) = ret {
22778			return to_result("glVertexAttribI4bv", ret, (self.version_3_0.geterror)());
22779		} else {
22780			return ret
22781		}
22782		#[cfg(not(feature = "diagnose"))]
22783		return ret;
22784	}
22785	#[inline(always)]
22786	fn glVertexAttribI4sv(&self, index: GLuint, v: *const GLshort) -> Result<()> {
22787		let ret = process_catch("glVertexAttribI4sv", catch_unwind(||(self.version_3_0.vertexattribi4sv)(index, v)));
22788		#[cfg(feature = "diagnose")]
22789		if let Ok(ret) = ret {
22790			return to_result("glVertexAttribI4sv", ret, (self.version_3_0.geterror)());
22791		} else {
22792			return ret
22793		}
22794		#[cfg(not(feature = "diagnose"))]
22795		return ret;
22796	}
22797	#[inline(always)]
22798	fn glVertexAttribI4ubv(&self, index: GLuint, v: *const GLubyte) -> Result<()> {
22799		let ret = process_catch("glVertexAttribI4ubv", catch_unwind(||(self.version_3_0.vertexattribi4ubv)(index, v)));
22800		#[cfg(feature = "diagnose")]
22801		if let Ok(ret) = ret {
22802			return to_result("glVertexAttribI4ubv", ret, (self.version_3_0.geterror)());
22803		} else {
22804			return ret
22805		}
22806		#[cfg(not(feature = "diagnose"))]
22807		return ret;
22808	}
22809	#[inline(always)]
22810	fn glVertexAttribI4usv(&self, index: GLuint, v: *const GLushort) -> Result<()> {
22811		let ret = process_catch("glVertexAttribI4usv", catch_unwind(||(self.version_3_0.vertexattribi4usv)(index, v)));
22812		#[cfg(feature = "diagnose")]
22813		if let Ok(ret) = ret {
22814			return to_result("glVertexAttribI4usv", ret, (self.version_3_0.geterror)());
22815		} else {
22816			return ret
22817		}
22818		#[cfg(not(feature = "diagnose"))]
22819		return ret;
22820	}
22821	#[inline(always)]
22822	fn glGetUniformuiv(&self, program: GLuint, location: GLint, params: *mut GLuint) -> Result<()> {
22823		let ret = process_catch("glGetUniformuiv", catch_unwind(||(self.version_3_0.getuniformuiv)(program, location, params)));
22824		#[cfg(feature = "diagnose")]
22825		if let Ok(ret) = ret {
22826			return to_result("glGetUniformuiv", ret, (self.version_3_0.geterror)());
22827		} else {
22828			return ret
22829		}
22830		#[cfg(not(feature = "diagnose"))]
22831		return ret;
22832	}
22833	#[inline(always)]
22834	fn glBindFragDataLocation(&self, program: GLuint, color: GLuint, name: *const GLchar) -> Result<()> {
22835		let ret = process_catch("glBindFragDataLocation", catch_unwind(||(self.version_3_0.bindfragdatalocation)(program, color, name)));
22836		#[cfg(feature = "diagnose")]
22837		if let Ok(ret) = ret {
22838			return to_result("glBindFragDataLocation", ret, (self.version_3_0.geterror)());
22839		} else {
22840			return ret
22841		}
22842		#[cfg(not(feature = "diagnose"))]
22843		return ret;
22844	}
22845	#[inline(always)]
22846	fn glGetFragDataLocation(&self, program: GLuint, name: *const GLchar) -> Result<GLint> {
22847		let ret = process_catch("glGetFragDataLocation", catch_unwind(||(self.version_3_0.getfragdatalocation)(program, name)));
22848		#[cfg(feature = "diagnose")]
22849		if let Ok(ret) = ret {
22850			return to_result("glGetFragDataLocation", ret, (self.version_3_0.geterror)());
22851		} else {
22852			return ret
22853		}
22854		#[cfg(not(feature = "diagnose"))]
22855		return ret;
22856	}
22857	#[inline(always)]
22858	fn glUniform1ui(&self, location: GLint, v0: GLuint) -> Result<()> {
22859		let ret = process_catch("glUniform1ui", catch_unwind(||(self.version_3_0.uniform1ui)(location, v0)));
22860		#[cfg(feature = "diagnose")]
22861		if let Ok(ret) = ret {
22862			return to_result("glUniform1ui", ret, (self.version_3_0.geterror)());
22863		} else {
22864			return ret
22865		}
22866		#[cfg(not(feature = "diagnose"))]
22867		return ret;
22868	}
22869	#[inline(always)]
22870	fn glUniform2ui(&self, location: GLint, v0: GLuint, v1: GLuint) -> Result<()> {
22871		let ret = process_catch("glUniform2ui", catch_unwind(||(self.version_3_0.uniform2ui)(location, v0, v1)));
22872		#[cfg(feature = "diagnose")]
22873		if let Ok(ret) = ret {
22874			return to_result("glUniform2ui", ret, (self.version_3_0.geterror)());
22875		} else {
22876			return ret
22877		}
22878		#[cfg(not(feature = "diagnose"))]
22879		return ret;
22880	}
22881	#[inline(always)]
22882	fn glUniform3ui(&self, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint) -> Result<()> {
22883		let ret = process_catch("glUniform3ui", catch_unwind(||(self.version_3_0.uniform3ui)(location, v0, v1, v2)));
22884		#[cfg(feature = "diagnose")]
22885		if let Ok(ret) = ret {
22886			return to_result("glUniform3ui", ret, (self.version_3_0.geterror)());
22887		} else {
22888			return ret
22889		}
22890		#[cfg(not(feature = "diagnose"))]
22891		return ret;
22892	}
22893	#[inline(always)]
22894	fn glUniform4ui(&self, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint) -> Result<()> {
22895		let ret = process_catch("glUniform4ui", catch_unwind(||(self.version_3_0.uniform4ui)(location, v0, v1, v2, v3)));
22896		#[cfg(feature = "diagnose")]
22897		if let Ok(ret) = ret {
22898			return to_result("glUniform4ui", ret, (self.version_3_0.geterror)());
22899		} else {
22900			return ret
22901		}
22902		#[cfg(not(feature = "diagnose"))]
22903		return ret;
22904	}
22905	#[inline(always)]
22906	fn glUniform1uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
22907		let ret = process_catch("glUniform1uiv", catch_unwind(||(self.version_3_0.uniform1uiv)(location, count, value)));
22908		#[cfg(feature = "diagnose")]
22909		if let Ok(ret) = ret {
22910			return to_result("glUniform1uiv", ret, (self.version_3_0.geterror)());
22911		} else {
22912			return ret
22913		}
22914		#[cfg(not(feature = "diagnose"))]
22915		return ret;
22916	}
22917	#[inline(always)]
22918	fn glUniform2uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
22919		let ret = process_catch("glUniform2uiv", catch_unwind(||(self.version_3_0.uniform2uiv)(location, count, value)));
22920		#[cfg(feature = "diagnose")]
22921		if let Ok(ret) = ret {
22922			return to_result("glUniform2uiv", ret, (self.version_3_0.geterror)());
22923		} else {
22924			return ret
22925		}
22926		#[cfg(not(feature = "diagnose"))]
22927		return ret;
22928	}
22929	#[inline(always)]
22930	fn glUniform3uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
22931		let ret = process_catch("glUniform3uiv", catch_unwind(||(self.version_3_0.uniform3uiv)(location, count, value)));
22932		#[cfg(feature = "diagnose")]
22933		if let Ok(ret) = ret {
22934			return to_result("glUniform3uiv", ret, (self.version_3_0.geterror)());
22935		} else {
22936			return ret
22937		}
22938		#[cfg(not(feature = "diagnose"))]
22939		return ret;
22940	}
22941	#[inline(always)]
22942	fn glUniform4uiv(&self, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
22943		let ret = process_catch("glUniform4uiv", catch_unwind(||(self.version_3_0.uniform4uiv)(location, count, value)));
22944		#[cfg(feature = "diagnose")]
22945		if let Ok(ret) = ret {
22946			return to_result("glUniform4uiv", ret, (self.version_3_0.geterror)());
22947		} else {
22948			return ret
22949		}
22950		#[cfg(not(feature = "diagnose"))]
22951		return ret;
22952	}
22953	#[inline(always)]
22954	fn glTexParameterIiv(&self, target: GLenum, pname: GLenum, params: *const GLint) -> Result<()> {
22955		let ret = process_catch("glTexParameterIiv", catch_unwind(||(self.version_3_0.texparameteriiv)(target, pname, params)));
22956		#[cfg(feature = "diagnose")]
22957		if let Ok(ret) = ret {
22958			return to_result("glTexParameterIiv", ret, (self.version_3_0.geterror)());
22959		} else {
22960			return ret
22961		}
22962		#[cfg(not(feature = "diagnose"))]
22963		return ret;
22964	}
22965	#[inline(always)]
22966	fn glTexParameterIuiv(&self, target: GLenum, pname: GLenum, params: *const GLuint) -> Result<()> {
22967		let ret = process_catch("glTexParameterIuiv", catch_unwind(||(self.version_3_0.texparameteriuiv)(target, pname, params)));
22968		#[cfg(feature = "diagnose")]
22969		if let Ok(ret) = ret {
22970			return to_result("glTexParameterIuiv", ret, (self.version_3_0.geterror)());
22971		} else {
22972			return ret
22973		}
22974		#[cfg(not(feature = "diagnose"))]
22975		return ret;
22976	}
22977	#[inline(always)]
22978	fn glGetTexParameterIiv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
22979		let ret = process_catch("glGetTexParameterIiv", catch_unwind(||(self.version_3_0.gettexparameteriiv)(target, pname, params)));
22980		#[cfg(feature = "diagnose")]
22981		if let Ok(ret) = ret {
22982			return to_result("glGetTexParameterIiv", ret, (self.version_3_0.geterror)());
22983		} else {
22984			return ret
22985		}
22986		#[cfg(not(feature = "diagnose"))]
22987		return ret;
22988	}
22989	#[inline(always)]
22990	fn glGetTexParameterIuiv(&self, target: GLenum, pname: GLenum, params: *mut GLuint) -> Result<()> {
22991		let ret = process_catch("glGetTexParameterIuiv", catch_unwind(||(self.version_3_0.gettexparameteriuiv)(target, pname, params)));
22992		#[cfg(feature = "diagnose")]
22993		if let Ok(ret) = ret {
22994			return to_result("glGetTexParameterIuiv", ret, (self.version_3_0.geterror)());
22995		} else {
22996			return ret
22997		}
22998		#[cfg(not(feature = "diagnose"))]
22999		return ret;
23000	}
23001	#[inline(always)]
23002	fn glClearBufferiv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLint) -> Result<()> {
23003		let ret = process_catch("glClearBufferiv", catch_unwind(||(self.version_3_0.clearbufferiv)(buffer, drawbuffer, value)));
23004		#[cfg(feature = "diagnose")]
23005		if let Ok(ret) = ret {
23006			return to_result("glClearBufferiv", ret, (self.version_3_0.geterror)());
23007		} else {
23008			return ret
23009		}
23010		#[cfg(not(feature = "diagnose"))]
23011		return ret;
23012	}
23013	#[inline(always)]
23014	fn glClearBufferuiv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLuint) -> Result<()> {
23015		let ret = process_catch("glClearBufferuiv", catch_unwind(||(self.version_3_0.clearbufferuiv)(buffer, drawbuffer, value)));
23016		#[cfg(feature = "diagnose")]
23017		if let Ok(ret) = ret {
23018			return to_result("glClearBufferuiv", ret, (self.version_3_0.geterror)());
23019		} else {
23020			return ret
23021		}
23022		#[cfg(not(feature = "diagnose"))]
23023		return ret;
23024	}
23025	#[inline(always)]
23026	fn glClearBufferfv(&self, buffer: GLenum, drawbuffer: GLint, value: *const GLfloat) -> Result<()> {
23027		let ret = process_catch("glClearBufferfv", catch_unwind(||(self.version_3_0.clearbufferfv)(buffer, drawbuffer, value)));
23028		#[cfg(feature = "diagnose")]
23029		if let Ok(ret) = ret {
23030			return to_result("glClearBufferfv", ret, (self.version_3_0.geterror)());
23031		} else {
23032			return ret
23033		}
23034		#[cfg(not(feature = "diagnose"))]
23035		return ret;
23036	}
23037	#[inline(always)]
23038	fn glClearBufferfi(&self, buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint) -> Result<()> {
23039		let ret = process_catch("glClearBufferfi", catch_unwind(||(self.version_3_0.clearbufferfi)(buffer, drawbuffer, depth, stencil)));
23040		#[cfg(feature = "diagnose")]
23041		if let Ok(ret) = ret {
23042			return to_result("glClearBufferfi", ret, (self.version_3_0.geterror)());
23043		} else {
23044			return ret
23045		}
23046		#[cfg(not(feature = "diagnose"))]
23047		return ret;
23048	}
23049	#[inline(always)]
23050	fn glGetStringi(&self, name: GLenum, index: GLuint) -> Result<&'static str> {
23051		let ret = process_catch("glGetStringi", catch_unwind(||unsafe{CStr::from_ptr((self.version_3_0.getstringi)(name, index) as *const i8)}.to_str().unwrap()));
23052		#[cfg(feature = "diagnose")]
23053		if let Ok(ret) = ret {
23054			return to_result("glGetStringi", ret, (self.version_3_0.geterror)());
23055		} else {
23056			return ret
23057		}
23058		#[cfg(not(feature = "diagnose"))]
23059		return ret;
23060	}
23061	#[inline(always)]
23062	fn glIsRenderbuffer(&self, renderbuffer: GLuint) -> Result<GLboolean> {
23063		let ret = process_catch("glIsRenderbuffer", catch_unwind(||(self.version_3_0.isrenderbuffer)(renderbuffer)));
23064		#[cfg(feature = "diagnose")]
23065		if let Ok(ret) = ret {
23066			return to_result("glIsRenderbuffer", ret, (self.version_3_0.geterror)());
23067		} else {
23068			return ret
23069		}
23070		#[cfg(not(feature = "diagnose"))]
23071		return ret;
23072	}
23073	#[inline(always)]
23074	fn glBindRenderbuffer(&self, target: GLenum, renderbuffer: GLuint) -> Result<()> {
23075		let ret = process_catch("glBindRenderbuffer", catch_unwind(||(self.version_3_0.bindrenderbuffer)(target, renderbuffer)));
23076		#[cfg(feature = "diagnose")]
23077		if let Ok(ret) = ret {
23078			return to_result("glBindRenderbuffer", ret, (self.version_3_0.geterror)());
23079		} else {
23080			return ret
23081		}
23082		#[cfg(not(feature = "diagnose"))]
23083		return ret;
23084	}
23085	#[inline(always)]
23086	fn glDeleteRenderbuffers(&self, n: GLsizei, renderbuffers: *const GLuint) -> Result<()> {
23087		let ret = process_catch("glDeleteRenderbuffers", catch_unwind(||(self.version_3_0.deleterenderbuffers)(n, renderbuffers)));
23088		#[cfg(feature = "diagnose")]
23089		if let Ok(ret) = ret {
23090			return to_result("glDeleteRenderbuffers", ret, (self.version_3_0.geterror)());
23091		} else {
23092			return ret
23093		}
23094		#[cfg(not(feature = "diagnose"))]
23095		return ret;
23096	}
23097	#[inline(always)]
23098	fn glGenRenderbuffers(&self, n: GLsizei, renderbuffers: *mut GLuint) -> Result<()> {
23099		let ret = process_catch("glGenRenderbuffers", catch_unwind(||(self.version_3_0.genrenderbuffers)(n, renderbuffers)));
23100		#[cfg(feature = "diagnose")]
23101		if let Ok(ret) = ret {
23102			return to_result("glGenRenderbuffers", ret, (self.version_3_0.geterror)());
23103		} else {
23104			return ret
23105		}
23106		#[cfg(not(feature = "diagnose"))]
23107		return ret;
23108	}
23109	#[inline(always)]
23110	fn glRenderbufferStorage(&self, target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
23111		let ret = process_catch("glRenderbufferStorage", catch_unwind(||(self.version_3_0.renderbufferstorage)(target, internalformat, width, height)));
23112		#[cfg(feature = "diagnose")]
23113		if let Ok(ret) = ret {
23114			return to_result("glRenderbufferStorage", ret, (self.version_3_0.geterror)());
23115		} else {
23116			return ret
23117		}
23118		#[cfg(not(feature = "diagnose"))]
23119		return ret;
23120	}
23121	#[inline(always)]
23122	fn glGetRenderbufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
23123		let ret = process_catch("glGetRenderbufferParameteriv", catch_unwind(||(self.version_3_0.getrenderbufferparameteriv)(target, pname, params)));
23124		#[cfg(feature = "diagnose")]
23125		if let Ok(ret) = ret {
23126			return to_result("glGetRenderbufferParameteriv", ret, (self.version_3_0.geterror)());
23127		} else {
23128			return ret
23129		}
23130		#[cfg(not(feature = "diagnose"))]
23131		return ret;
23132	}
23133	#[inline(always)]
23134	fn glIsFramebuffer(&self, framebuffer: GLuint) -> Result<GLboolean> {
23135		let ret = process_catch("glIsFramebuffer", catch_unwind(||(self.version_3_0.isframebuffer)(framebuffer)));
23136		#[cfg(feature = "diagnose")]
23137		if let Ok(ret) = ret {
23138			return to_result("glIsFramebuffer", ret, (self.version_3_0.geterror)());
23139		} else {
23140			return ret
23141		}
23142		#[cfg(not(feature = "diagnose"))]
23143		return ret;
23144	}
23145	#[inline(always)]
23146	fn glBindFramebuffer(&self, target: GLenum, framebuffer: GLuint) -> Result<()> {
23147		let ret = process_catch("glBindFramebuffer", catch_unwind(||(self.version_3_0.bindframebuffer)(target, framebuffer)));
23148		#[cfg(feature = "diagnose")]
23149		if let Ok(ret) = ret {
23150			return to_result("glBindFramebuffer", ret, (self.version_3_0.geterror)());
23151		} else {
23152			return ret
23153		}
23154		#[cfg(not(feature = "diagnose"))]
23155		return ret;
23156	}
23157	#[inline(always)]
23158	fn glDeleteFramebuffers(&self, n: GLsizei, framebuffers: *const GLuint) -> Result<()> {
23159		let ret = process_catch("glDeleteFramebuffers", catch_unwind(||(self.version_3_0.deleteframebuffers)(n, framebuffers)));
23160		#[cfg(feature = "diagnose")]
23161		if let Ok(ret) = ret {
23162			return to_result("glDeleteFramebuffers", ret, (self.version_3_0.geterror)());
23163		} else {
23164			return ret
23165		}
23166		#[cfg(not(feature = "diagnose"))]
23167		return ret;
23168	}
23169	#[inline(always)]
23170	fn glGenFramebuffers(&self, n: GLsizei, framebuffers: *mut GLuint) -> Result<()> {
23171		let ret = process_catch("glGenFramebuffers", catch_unwind(||(self.version_3_0.genframebuffers)(n, framebuffers)));
23172		#[cfg(feature = "diagnose")]
23173		if let Ok(ret) = ret {
23174			return to_result("glGenFramebuffers", ret, (self.version_3_0.geterror)());
23175		} else {
23176			return ret
23177		}
23178		#[cfg(not(feature = "diagnose"))]
23179		return ret;
23180	}
23181	#[inline(always)]
23182	fn glCheckFramebufferStatus(&self, target: GLenum) -> Result<GLenum> {
23183		let ret = process_catch("glCheckFramebufferStatus", catch_unwind(||(self.version_3_0.checkframebufferstatus)(target)));
23184		#[cfg(feature = "diagnose")]
23185		if let Ok(ret) = ret {
23186			return to_result("glCheckFramebufferStatus", ret, (self.version_3_0.geterror)());
23187		} else {
23188			return ret
23189		}
23190		#[cfg(not(feature = "diagnose"))]
23191		return ret;
23192	}
23193	#[inline(always)]
23194	fn glFramebufferTexture1D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint) -> Result<()> {
23195		let ret = process_catch("glFramebufferTexture1D", catch_unwind(||(self.version_3_0.framebuffertexture1d)(target, attachment, textarget, texture, level)));
23196		#[cfg(feature = "diagnose")]
23197		if let Ok(ret) = ret {
23198			return to_result("glFramebufferTexture1D", ret, (self.version_3_0.geterror)());
23199		} else {
23200			return ret
23201		}
23202		#[cfg(not(feature = "diagnose"))]
23203		return ret;
23204	}
23205	#[inline(always)]
23206	fn glFramebufferTexture2D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint) -> Result<()> {
23207		let ret = process_catch("glFramebufferTexture2D", catch_unwind(||(self.version_3_0.framebuffertexture2d)(target, attachment, textarget, texture, level)));
23208		#[cfg(feature = "diagnose")]
23209		if let Ok(ret) = ret {
23210			return to_result("glFramebufferTexture2D", ret, (self.version_3_0.geterror)());
23211		} else {
23212			return ret
23213		}
23214		#[cfg(not(feature = "diagnose"))]
23215		return ret;
23216	}
23217	#[inline(always)]
23218	fn glFramebufferTexture3D(&self, target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint, zoffset: GLint) -> Result<()> {
23219		let ret = process_catch("glFramebufferTexture3D", catch_unwind(||(self.version_3_0.framebuffertexture3d)(target, attachment, textarget, texture, level, zoffset)));
23220		#[cfg(feature = "diagnose")]
23221		if let Ok(ret) = ret {
23222			return to_result("glFramebufferTexture3D", ret, (self.version_3_0.geterror)());
23223		} else {
23224			return ret
23225		}
23226		#[cfg(not(feature = "diagnose"))]
23227		return ret;
23228	}
23229	#[inline(always)]
23230	fn glFramebufferRenderbuffer(&self, target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: GLuint) -> Result<()> {
23231		let ret = process_catch("glFramebufferRenderbuffer", catch_unwind(||(self.version_3_0.framebufferrenderbuffer)(target, attachment, renderbuffertarget, renderbuffer)));
23232		#[cfg(feature = "diagnose")]
23233		if let Ok(ret) = ret {
23234			return to_result("glFramebufferRenderbuffer", ret, (self.version_3_0.geterror)());
23235		} else {
23236			return ret
23237		}
23238		#[cfg(not(feature = "diagnose"))]
23239		return ret;
23240	}
23241	#[inline(always)]
23242	fn glGetFramebufferAttachmentParameteriv(&self, target: GLenum, attachment: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
23243		let ret = process_catch("glGetFramebufferAttachmentParameteriv", catch_unwind(||(self.version_3_0.getframebufferattachmentparameteriv)(target, attachment, pname, params)));
23244		#[cfg(feature = "diagnose")]
23245		if let Ok(ret) = ret {
23246			return to_result("glGetFramebufferAttachmentParameteriv", ret, (self.version_3_0.geterror)());
23247		} else {
23248			return ret
23249		}
23250		#[cfg(not(feature = "diagnose"))]
23251		return ret;
23252	}
23253	#[inline(always)]
23254	fn glGenerateMipmap(&self, target: GLenum) -> Result<()> {
23255		let ret = process_catch("glGenerateMipmap", catch_unwind(||(self.version_3_0.generatemipmap)(target)));
23256		#[cfg(feature = "diagnose")]
23257		if let Ok(ret) = ret {
23258			return to_result("glGenerateMipmap", ret, (self.version_3_0.geterror)());
23259		} else {
23260			return ret
23261		}
23262		#[cfg(not(feature = "diagnose"))]
23263		return ret;
23264	}
23265	#[inline(always)]
23266	fn glBlitFramebuffer(&self, srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum) -> Result<()> {
23267		let ret = process_catch("glBlitFramebuffer", catch_unwind(||(self.version_3_0.blitframebuffer)(srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)));
23268		#[cfg(feature = "diagnose")]
23269		if let Ok(ret) = ret {
23270			return to_result("glBlitFramebuffer", ret, (self.version_3_0.geterror)());
23271		} else {
23272			return ret
23273		}
23274		#[cfg(not(feature = "diagnose"))]
23275		return ret;
23276	}
23277	#[inline(always)]
23278	fn glRenderbufferStorageMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
23279		let ret = process_catch("glRenderbufferStorageMultisample", catch_unwind(||(self.version_3_0.renderbufferstoragemultisample)(target, samples, internalformat, width, height)));
23280		#[cfg(feature = "diagnose")]
23281		if let Ok(ret) = ret {
23282			return to_result("glRenderbufferStorageMultisample", ret, (self.version_3_0.geterror)());
23283		} else {
23284			return ret
23285		}
23286		#[cfg(not(feature = "diagnose"))]
23287		return ret;
23288	}
23289	#[inline(always)]
23290	fn glFramebufferTextureLayer(&self, target: GLenum, attachment: GLenum, texture: GLuint, level: GLint, layer: GLint) -> Result<()> {
23291		let ret = process_catch("glFramebufferTextureLayer", catch_unwind(||(self.version_3_0.framebuffertexturelayer)(target, attachment, texture, level, layer)));
23292		#[cfg(feature = "diagnose")]
23293		if let Ok(ret) = ret {
23294			return to_result("glFramebufferTextureLayer", ret, (self.version_3_0.geterror)());
23295		} else {
23296			return ret
23297		}
23298		#[cfg(not(feature = "diagnose"))]
23299		return ret;
23300	}
23301	#[inline(always)]
23302	fn glMapBufferRange(&self, target: GLenum, offset: GLintptr, length: GLsizeiptr, access: GLbitfield) -> Result<*mut c_void> {
23303		let ret = process_catch("glMapBufferRange", catch_unwind(||(self.version_3_0.mapbufferrange)(target, offset, length, access)));
23304		#[cfg(feature = "diagnose")]
23305		if let Ok(ret) = ret {
23306			return to_result("glMapBufferRange", ret, (self.version_3_0.geterror)());
23307		} else {
23308			return ret
23309		}
23310		#[cfg(not(feature = "diagnose"))]
23311		return ret;
23312	}
23313	#[inline(always)]
23314	fn glFlushMappedBufferRange(&self, target: GLenum, offset: GLintptr, length: GLsizeiptr) -> Result<()> {
23315		let ret = process_catch("glFlushMappedBufferRange", catch_unwind(||(self.version_3_0.flushmappedbufferrange)(target, offset, length)));
23316		#[cfg(feature = "diagnose")]
23317		if let Ok(ret) = ret {
23318			return to_result("glFlushMappedBufferRange", ret, (self.version_3_0.geterror)());
23319		} else {
23320			return ret
23321		}
23322		#[cfg(not(feature = "diagnose"))]
23323		return ret;
23324	}
23325	#[inline(always)]
23326	fn glBindVertexArray(&self, array: GLuint) -> Result<()> {
23327		let ret = process_catch("glBindVertexArray", catch_unwind(||(self.version_3_0.bindvertexarray)(array)));
23328		#[cfg(feature = "diagnose")]
23329		if let Ok(ret) = ret {
23330			return to_result("glBindVertexArray", ret, (self.version_3_0.geterror)());
23331		} else {
23332			return ret
23333		}
23334		#[cfg(not(feature = "diagnose"))]
23335		return ret;
23336	}
23337	#[inline(always)]
23338	fn glDeleteVertexArrays(&self, n: GLsizei, arrays: *const GLuint) -> Result<()> {
23339		let ret = process_catch("glDeleteVertexArrays", catch_unwind(||(self.version_3_0.deletevertexarrays)(n, arrays)));
23340		#[cfg(feature = "diagnose")]
23341		if let Ok(ret) = ret {
23342			return to_result("glDeleteVertexArrays", ret, (self.version_3_0.geterror)());
23343		} else {
23344			return ret
23345		}
23346		#[cfg(not(feature = "diagnose"))]
23347		return ret;
23348	}
23349	#[inline(always)]
23350	fn glGenVertexArrays(&self, n: GLsizei, arrays: *mut GLuint) -> Result<()> {
23351		let ret = process_catch("glGenVertexArrays", catch_unwind(||(self.version_3_0.genvertexarrays)(n, arrays)));
23352		#[cfg(feature = "diagnose")]
23353		if let Ok(ret) = ret {
23354			return to_result("glGenVertexArrays", ret, (self.version_3_0.geterror)());
23355		} else {
23356			return ret
23357		}
23358		#[cfg(not(feature = "diagnose"))]
23359		return ret;
23360	}
23361	#[inline(always)]
23362	fn glIsVertexArray(&self, array: GLuint) -> Result<GLboolean> {
23363		let ret = process_catch("glIsVertexArray", catch_unwind(||(self.version_3_0.isvertexarray)(array)));
23364		#[cfg(feature = "diagnose")]
23365		if let Ok(ret) = ret {
23366			return to_result("glIsVertexArray", ret, (self.version_3_0.geterror)());
23367		} else {
23368			return ret
23369		}
23370		#[cfg(not(feature = "diagnose"))]
23371		return ret;
23372	}
23373}
23374
23375impl GL_3_1 for GLCore {
23376	#[inline(always)]
23377	fn glGetError(&self) -> GLenum {
23378		(self.version_3_1.geterror)()
23379	}
23380	#[inline(always)]
23381	fn glDrawArraysInstanced(&self, mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei) -> Result<()> {
23382		let ret = process_catch("glDrawArraysInstanced", catch_unwind(||(self.version_3_1.drawarraysinstanced)(mode, first, count, instancecount)));
23383		#[cfg(feature = "diagnose")]
23384		if let Ok(ret) = ret {
23385			return to_result("glDrawArraysInstanced", ret, (self.version_3_1.geterror)());
23386		} else {
23387			return ret
23388		}
23389		#[cfg(not(feature = "diagnose"))]
23390		return ret;
23391	}
23392	#[inline(always)]
23393	fn glDrawElementsInstanced(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei) -> Result<()> {
23394		let ret = process_catch("glDrawElementsInstanced", catch_unwind(||(self.version_3_1.drawelementsinstanced)(mode, count, type_, indices, instancecount)));
23395		#[cfg(feature = "diagnose")]
23396		if let Ok(ret) = ret {
23397			return to_result("glDrawElementsInstanced", ret, (self.version_3_1.geterror)());
23398		} else {
23399			return ret
23400		}
23401		#[cfg(not(feature = "diagnose"))]
23402		return ret;
23403	}
23404	#[inline(always)]
23405	fn glTexBuffer(&self, target: GLenum, internalformat: GLenum, buffer: GLuint) -> Result<()> {
23406		let ret = process_catch("glTexBuffer", catch_unwind(||(self.version_3_1.texbuffer)(target, internalformat, buffer)));
23407		#[cfg(feature = "diagnose")]
23408		if let Ok(ret) = ret {
23409			return to_result("glTexBuffer", ret, (self.version_3_1.geterror)());
23410		} else {
23411			return ret
23412		}
23413		#[cfg(not(feature = "diagnose"))]
23414		return ret;
23415	}
23416	#[inline(always)]
23417	fn glPrimitiveRestartIndex(&self, index: GLuint) -> Result<()> {
23418		let ret = process_catch("glPrimitiveRestartIndex", catch_unwind(||(self.version_3_1.primitiverestartindex)(index)));
23419		#[cfg(feature = "diagnose")]
23420		if let Ok(ret) = ret {
23421			return to_result("glPrimitiveRestartIndex", ret, (self.version_3_1.geterror)());
23422		} else {
23423			return ret
23424		}
23425		#[cfg(not(feature = "diagnose"))]
23426		return ret;
23427	}
23428	#[inline(always)]
23429	fn glCopyBufferSubData(&self, readTarget: GLenum, writeTarget: GLenum, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) -> Result<()> {
23430		let ret = process_catch("glCopyBufferSubData", catch_unwind(||(self.version_3_1.copybuffersubdata)(readTarget, writeTarget, readOffset, writeOffset, size)));
23431		#[cfg(feature = "diagnose")]
23432		if let Ok(ret) = ret {
23433			return to_result("glCopyBufferSubData", ret, (self.version_3_1.geterror)());
23434		} else {
23435			return ret
23436		}
23437		#[cfg(not(feature = "diagnose"))]
23438		return ret;
23439	}
23440	#[inline(always)]
23441	fn glGetUniformIndices(&self, program: GLuint, uniformCount: GLsizei, uniformNames: *const *const GLchar, uniformIndices: *mut GLuint) -> Result<()> {
23442		let ret = process_catch("glGetUniformIndices", catch_unwind(||(self.version_3_1.getuniformindices)(program, uniformCount, uniformNames, uniformIndices)));
23443		#[cfg(feature = "diagnose")]
23444		if let Ok(ret) = ret {
23445			return to_result("glGetUniformIndices", ret, (self.version_3_1.geterror)());
23446		} else {
23447			return ret
23448		}
23449		#[cfg(not(feature = "diagnose"))]
23450		return ret;
23451	}
23452	#[inline(always)]
23453	fn glGetActiveUniformsiv(&self, program: GLuint, uniformCount: GLsizei, uniformIndices: *const GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
23454		let ret = process_catch("glGetActiveUniformsiv", catch_unwind(||(self.version_3_1.getactiveuniformsiv)(program, uniformCount, uniformIndices, pname, params)));
23455		#[cfg(feature = "diagnose")]
23456		if let Ok(ret) = ret {
23457			return to_result("glGetActiveUniformsiv", ret, (self.version_3_1.geterror)());
23458		} else {
23459			return ret
23460		}
23461		#[cfg(not(feature = "diagnose"))]
23462		return ret;
23463	}
23464	#[inline(always)]
23465	fn glGetActiveUniformName(&self, program: GLuint, uniformIndex: GLuint, bufSize: GLsizei, length: *mut GLsizei, uniformName: *mut GLchar) -> Result<()> {
23466		let ret = process_catch("glGetActiveUniformName", catch_unwind(||(self.version_3_1.getactiveuniformname)(program, uniformIndex, bufSize, length, uniformName)));
23467		#[cfg(feature = "diagnose")]
23468		if let Ok(ret) = ret {
23469			return to_result("glGetActiveUniformName", ret, (self.version_3_1.geterror)());
23470		} else {
23471			return ret
23472		}
23473		#[cfg(not(feature = "diagnose"))]
23474		return ret;
23475	}
23476	#[inline(always)]
23477	fn glGetUniformBlockIndex(&self, program: GLuint, uniformBlockName: *const GLchar) -> Result<GLuint> {
23478		let ret = process_catch("glGetUniformBlockIndex", catch_unwind(||(self.version_3_1.getuniformblockindex)(program, uniformBlockName)));
23479		#[cfg(feature = "diagnose")]
23480		if let Ok(ret) = ret {
23481			return to_result("glGetUniformBlockIndex", ret, (self.version_3_1.geterror)());
23482		} else {
23483			return ret
23484		}
23485		#[cfg(not(feature = "diagnose"))]
23486		return ret;
23487	}
23488	#[inline(always)]
23489	fn glGetActiveUniformBlockiv(&self, program: GLuint, uniformBlockIndex: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
23490		let ret = process_catch("glGetActiveUniformBlockiv", catch_unwind(||(self.version_3_1.getactiveuniformblockiv)(program, uniformBlockIndex, pname, params)));
23491		#[cfg(feature = "diagnose")]
23492		if let Ok(ret) = ret {
23493			return to_result("glGetActiveUniformBlockiv", ret, (self.version_3_1.geterror)());
23494		} else {
23495			return ret
23496		}
23497		#[cfg(not(feature = "diagnose"))]
23498		return ret;
23499	}
23500	#[inline(always)]
23501	fn glGetActiveUniformBlockName(&self, program: GLuint, uniformBlockIndex: GLuint, bufSize: GLsizei, length: *mut GLsizei, uniformBlockName: *mut GLchar) -> Result<()> {
23502		let ret = process_catch("glGetActiveUniformBlockName", catch_unwind(||(self.version_3_1.getactiveuniformblockname)(program, uniformBlockIndex, bufSize, length, uniformBlockName)));
23503		#[cfg(feature = "diagnose")]
23504		if let Ok(ret) = ret {
23505			return to_result("glGetActiveUniformBlockName", ret, (self.version_3_1.geterror)());
23506		} else {
23507			return ret
23508		}
23509		#[cfg(not(feature = "diagnose"))]
23510		return ret;
23511	}
23512	#[inline(always)]
23513	fn glUniformBlockBinding(&self, program: GLuint, uniformBlockIndex: GLuint, uniformBlockBinding: GLuint) -> Result<()> {
23514		let ret = process_catch("glUniformBlockBinding", catch_unwind(||(self.version_3_1.uniformblockbinding)(program, uniformBlockIndex, uniformBlockBinding)));
23515		#[cfg(feature = "diagnose")]
23516		if let Ok(ret) = ret {
23517			return to_result("glUniformBlockBinding", ret, (self.version_3_1.geterror)());
23518		} else {
23519			return ret
23520		}
23521		#[cfg(not(feature = "diagnose"))]
23522		return ret;
23523	}
23524}
23525
23526impl GL_3_2 for GLCore {
23527	#[inline(always)]
23528	fn glGetError(&self) -> GLenum {
23529		(self.version_3_2.geterror)()
23530	}
23531	#[inline(always)]
23532	fn glDrawElementsBaseVertex(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, basevertex: GLint) -> Result<()> {
23533		let ret = process_catch("glDrawElementsBaseVertex", catch_unwind(||(self.version_3_2.drawelementsbasevertex)(mode, count, type_, indices, basevertex)));
23534		#[cfg(feature = "diagnose")]
23535		if let Ok(ret) = ret {
23536			return to_result("glDrawElementsBaseVertex", ret, (self.version_3_2.geterror)());
23537		} else {
23538			return ret
23539		}
23540		#[cfg(not(feature = "diagnose"))]
23541		return ret;
23542	}
23543	#[inline(always)]
23544	fn glDrawRangeElementsBaseVertex(&self, mode: GLenum, start: GLuint, end: GLuint, count: GLsizei, type_: GLenum, indices: *const c_void, basevertex: GLint) -> Result<()> {
23545		let ret = process_catch("glDrawRangeElementsBaseVertex", catch_unwind(||(self.version_3_2.drawrangeelementsbasevertex)(mode, start, end, count, type_, indices, basevertex)));
23546		#[cfg(feature = "diagnose")]
23547		if let Ok(ret) = ret {
23548			return to_result("glDrawRangeElementsBaseVertex", ret, (self.version_3_2.geterror)());
23549		} else {
23550			return ret
23551		}
23552		#[cfg(not(feature = "diagnose"))]
23553		return ret;
23554	}
23555	#[inline(always)]
23556	fn glDrawElementsInstancedBaseVertex(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, basevertex: GLint) -> Result<()> {
23557		let ret = process_catch("glDrawElementsInstancedBaseVertex", catch_unwind(||(self.version_3_2.drawelementsinstancedbasevertex)(mode, count, type_, indices, instancecount, basevertex)));
23558		#[cfg(feature = "diagnose")]
23559		if let Ok(ret) = ret {
23560			return to_result("glDrawElementsInstancedBaseVertex", ret, (self.version_3_2.geterror)());
23561		} else {
23562			return ret
23563		}
23564		#[cfg(not(feature = "diagnose"))]
23565		return ret;
23566	}
23567	#[inline(always)]
23568	fn glMultiDrawElementsBaseVertex(&self, mode: GLenum, count: *const GLsizei, type_: GLenum, indices: *const *const c_void, drawcount: GLsizei, basevertex: *const GLint) -> Result<()> {
23569		let ret = process_catch("glMultiDrawElementsBaseVertex", catch_unwind(||(self.version_3_2.multidrawelementsbasevertex)(mode, count, type_, indices, drawcount, basevertex)));
23570		#[cfg(feature = "diagnose")]
23571		if let Ok(ret) = ret {
23572			return to_result("glMultiDrawElementsBaseVertex", ret, (self.version_3_2.geterror)());
23573		} else {
23574			return ret
23575		}
23576		#[cfg(not(feature = "diagnose"))]
23577		return ret;
23578	}
23579	#[inline(always)]
23580	fn glProvokingVertex(&self, mode: GLenum) -> Result<()> {
23581		let ret = process_catch("glProvokingVertex", catch_unwind(||(self.version_3_2.provokingvertex)(mode)));
23582		#[cfg(feature = "diagnose")]
23583		if let Ok(ret) = ret {
23584			return to_result("glProvokingVertex", ret, (self.version_3_2.geterror)());
23585		} else {
23586			return ret
23587		}
23588		#[cfg(not(feature = "diagnose"))]
23589		return ret;
23590	}
23591	#[inline(always)]
23592	fn glFenceSync(&self, condition: GLenum, flags: GLbitfield) -> Result<GLsync> {
23593		let ret = process_catch("glFenceSync", catch_unwind(||(self.version_3_2.fencesync)(condition, flags)));
23594		#[cfg(feature = "diagnose")]
23595		if let Ok(ret) = ret {
23596			return to_result("glFenceSync", ret, (self.version_3_2.geterror)());
23597		} else {
23598			return ret
23599		}
23600		#[cfg(not(feature = "diagnose"))]
23601		return ret;
23602	}
23603	#[inline(always)]
23604	fn glIsSync(&self, sync: GLsync) -> Result<GLboolean> {
23605		let ret = process_catch("glIsSync", catch_unwind(||(self.version_3_2.issync)(sync)));
23606		#[cfg(feature = "diagnose")]
23607		if let Ok(ret) = ret {
23608			return to_result("glIsSync", ret, (self.version_3_2.geterror)());
23609		} else {
23610			return ret
23611		}
23612		#[cfg(not(feature = "diagnose"))]
23613		return ret;
23614	}
23615	#[inline(always)]
23616	fn glDeleteSync(&self, sync: GLsync) -> Result<()> {
23617		let ret = process_catch("glDeleteSync", catch_unwind(||(self.version_3_2.deletesync)(sync)));
23618		#[cfg(feature = "diagnose")]
23619		if let Ok(ret) = ret {
23620			return to_result("glDeleteSync", ret, (self.version_3_2.geterror)());
23621		} else {
23622			return ret
23623		}
23624		#[cfg(not(feature = "diagnose"))]
23625		return ret;
23626	}
23627	#[inline(always)]
23628	fn glClientWaitSync(&self, sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> Result<GLenum> {
23629		let ret = process_catch("glClientWaitSync", catch_unwind(||(self.version_3_2.clientwaitsync)(sync, flags, timeout)));
23630		#[cfg(feature = "diagnose")]
23631		if let Ok(ret) = ret {
23632			return to_result("glClientWaitSync", ret, (self.version_3_2.geterror)());
23633		} else {
23634			return ret
23635		}
23636		#[cfg(not(feature = "diagnose"))]
23637		return ret;
23638	}
23639	#[inline(always)]
23640	fn glWaitSync(&self, sync: GLsync, flags: GLbitfield, timeout: GLuint64) -> Result<()> {
23641		let ret = process_catch("glWaitSync", catch_unwind(||(self.version_3_2.waitsync)(sync, flags, timeout)));
23642		#[cfg(feature = "diagnose")]
23643		if let Ok(ret) = ret {
23644			return to_result("glWaitSync", ret, (self.version_3_2.geterror)());
23645		} else {
23646			return ret
23647		}
23648		#[cfg(not(feature = "diagnose"))]
23649		return ret;
23650	}
23651	#[inline(always)]
23652	fn glGetInteger64v(&self, pname: GLenum, data: *mut GLint64) -> Result<()> {
23653		let ret = process_catch("glGetInteger64v", catch_unwind(||(self.version_3_2.getinteger64v)(pname, data)));
23654		#[cfg(feature = "diagnose")]
23655		if let Ok(ret) = ret {
23656			return to_result("glGetInteger64v", ret, (self.version_3_2.geterror)());
23657		} else {
23658			return ret
23659		}
23660		#[cfg(not(feature = "diagnose"))]
23661		return ret;
23662	}
23663	#[inline(always)]
23664	fn glGetSynciv(&self, sync: GLsync, pname: GLenum, count: GLsizei, length: *mut GLsizei, values: *mut GLint) -> Result<()> {
23665		let ret = process_catch("glGetSynciv", catch_unwind(||(self.version_3_2.getsynciv)(sync, pname, count, length, values)));
23666		#[cfg(feature = "diagnose")]
23667		if let Ok(ret) = ret {
23668			return to_result("glGetSynciv", ret, (self.version_3_2.geterror)());
23669		} else {
23670			return ret
23671		}
23672		#[cfg(not(feature = "diagnose"))]
23673		return ret;
23674	}
23675	#[inline(always)]
23676	fn glGetInteger64i_v(&self, target: GLenum, index: GLuint, data: *mut GLint64) -> Result<()> {
23677		let ret = process_catch("glGetInteger64i_v", catch_unwind(||(self.version_3_2.getinteger64i_v)(target, index, data)));
23678		#[cfg(feature = "diagnose")]
23679		if let Ok(ret) = ret {
23680			return to_result("glGetInteger64i_v", ret, (self.version_3_2.geterror)());
23681		} else {
23682			return ret
23683		}
23684		#[cfg(not(feature = "diagnose"))]
23685		return ret;
23686	}
23687	#[inline(always)]
23688	fn glGetBufferParameteri64v(&self, target: GLenum, pname: GLenum, params: *mut GLint64) -> Result<()> {
23689		let ret = process_catch("glGetBufferParameteri64v", catch_unwind(||(self.version_3_2.getbufferparameteri64v)(target, pname, params)));
23690		#[cfg(feature = "diagnose")]
23691		if let Ok(ret) = ret {
23692			return to_result("glGetBufferParameteri64v", ret, (self.version_3_2.geterror)());
23693		} else {
23694			return ret
23695		}
23696		#[cfg(not(feature = "diagnose"))]
23697		return ret;
23698	}
23699	#[inline(always)]
23700	fn glFramebufferTexture(&self, target: GLenum, attachment: GLenum, texture: GLuint, level: GLint) -> Result<()> {
23701		let ret = process_catch("glFramebufferTexture", catch_unwind(||(self.version_3_2.framebuffertexture)(target, attachment, texture, level)));
23702		#[cfg(feature = "diagnose")]
23703		if let Ok(ret) = ret {
23704			return to_result("glFramebufferTexture", ret, (self.version_3_2.geterror)());
23705		} else {
23706			return ret
23707		}
23708		#[cfg(not(feature = "diagnose"))]
23709		return ret;
23710	}
23711	#[inline(always)]
23712	fn glTexImage2DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
23713		let ret = process_catch("glTexImage2DMultisample", catch_unwind(||(self.version_3_2.teximage2dmultisample)(target, samples, internalformat, width, height, fixedsamplelocations)));
23714		#[cfg(feature = "diagnose")]
23715		if let Ok(ret) = ret {
23716			return to_result("glTexImage2DMultisample", ret, (self.version_3_2.geterror)());
23717		} else {
23718			return ret
23719		}
23720		#[cfg(not(feature = "diagnose"))]
23721		return ret;
23722	}
23723	#[inline(always)]
23724	fn glTexImage3DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
23725		let ret = process_catch("glTexImage3DMultisample", catch_unwind(||(self.version_3_2.teximage3dmultisample)(target, samples, internalformat, width, height, depth, fixedsamplelocations)));
23726		#[cfg(feature = "diagnose")]
23727		if let Ok(ret) = ret {
23728			return to_result("glTexImage3DMultisample", ret, (self.version_3_2.geterror)());
23729		} else {
23730			return ret
23731		}
23732		#[cfg(not(feature = "diagnose"))]
23733		return ret;
23734	}
23735	#[inline(always)]
23736	fn glGetMultisamplefv(&self, pname: GLenum, index: GLuint, val: *mut GLfloat) -> Result<()> {
23737		let ret = process_catch("glGetMultisamplefv", catch_unwind(||(self.version_3_2.getmultisamplefv)(pname, index, val)));
23738		#[cfg(feature = "diagnose")]
23739		if let Ok(ret) = ret {
23740			return to_result("glGetMultisamplefv", ret, (self.version_3_2.geterror)());
23741		} else {
23742			return ret
23743		}
23744		#[cfg(not(feature = "diagnose"))]
23745		return ret;
23746	}
23747	#[inline(always)]
23748	fn glSampleMaski(&self, maskNumber: GLuint, mask: GLbitfield) -> Result<()> {
23749		let ret = process_catch("glSampleMaski", catch_unwind(||(self.version_3_2.samplemaski)(maskNumber, mask)));
23750		#[cfg(feature = "diagnose")]
23751		if let Ok(ret) = ret {
23752			return to_result("glSampleMaski", ret, (self.version_3_2.geterror)());
23753		} else {
23754			return ret
23755		}
23756		#[cfg(not(feature = "diagnose"))]
23757		return ret;
23758	}
23759}
23760
23761impl GL_3_3 for GLCore {
23762	#[inline(always)]
23763	fn glGetError(&self) -> GLenum {
23764		(self.version_3_3.geterror)()
23765	}
23766	#[inline(always)]
23767	fn glBindFragDataLocationIndexed(&self, program: GLuint, colorNumber: GLuint, index: GLuint, name: *const GLchar) -> Result<()> {
23768		let ret = process_catch("glBindFragDataLocationIndexed", catch_unwind(||(self.version_3_3.bindfragdatalocationindexed)(program, colorNumber, index, name)));
23769		#[cfg(feature = "diagnose")]
23770		if let Ok(ret) = ret {
23771			return to_result("glBindFragDataLocationIndexed", ret, (self.version_3_3.geterror)());
23772		} else {
23773			return ret
23774		}
23775		#[cfg(not(feature = "diagnose"))]
23776		return ret;
23777	}
23778	#[inline(always)]
23779	fn glGetFragDataIndex(&self, program: GLuint, name: *const GLchar) -> Result<GLint> {
23780		let ret = process_catch("glGetFragDataIndex", catch_unwind(||(self.version_3_3.getfragdataindex)(program, name)));
23781		#[cfg(feature = "diagnose")]
23782		if let Ok(ret) = ret {
23783			return to_result("glGetFragDataIndex", ret, (self.version_3_3.geterror)());
23784		} else {
23785			return ret
23786		}
23787		#[cfg(not(feature = "diagnose"))]
23788		return ret;
23789	}
23790	#[inline(always)]
23791	fn glGenSamplers(&self, count: GLsizei, samplers: *mut GLuint) -> Result<()> {
23792		let ret = process_catch("glGenSamplers", catch_unwind(||(self.version_3_3.gensamplers)(count, samplers)));
23793		#[cfg(feature = "diagnose")]
23794		if let Ok(ret) = ret {
23795			return to_result("glGenSamplers", ret, (self.version_3_3.geterror)());
23796		} else {
23797			return ret
23798		}
23799		#[cfg(not(feature = "diagnose"))]
23800		return ret;
23801	}
23802	#[inline(always)]
23803	fn glDeleteSamplers(&self, count: GLsizei, samplers: *const GLuint) -> Result<()> {
23804		let ret = process_catch("glDeleteSamplers", catch_unwind(||(self.version_3_3.deletesamplers)(count, samplers)));
23805		#[cfg(feature = "diagnose")]
23806		if let Ok(ret) = ret {
23807			return to_result("glDeleteSamplers", ret, (self.version_3_3.geterror)());
23808		} else {
23809			return ret
23810		}
23811		#[cfg(not(feature = "diagnose"))]
23812		return ret;
23813	}
23814	#[inline(always)]
23815	fn glIsSampler(&self, sampler: GLuint) -> Result<GLboolean> {
23816		let ret = process_catch("glIsSampler", catch_unwind(||(self.version_3_3.issampler)(sampler)));
23817		#[cfg(feature = "diagnose")]
23818		if let Ok(ret) = ret {
23819			return to_result("glIsSampler", ret, (self.version_3_3.geterror)());
23820		} else {
23821			return ret
23822		}
23823		#[cfg(not(feature = "diagnose"))]
23824		return ret;
23825	}
23826	#[inline(always)]
23827	fn glBindSampler(&self, unit: GLuint, sampler: GLuint) -> Result<()> {
23828		let ret = process_catch("glBindSampler", catch_unwind(||(self.version_3_3.bindsampler)(unit, sampler)));
23829		#[cfg(feature = "diagnose")]
23830		if let Ok(ret) = ret {
23831			return to_result("glBindSampler", ret, (self.version_3_3.geterror)());
23832		} else {
23833			return ret
23834		}
23835		#[cfg(not(feature = "diagnose"))]
23836		return ret;
23837	}
23838	#[inline(always)]
23839	fn glSamplerParameteri(&self, sampler: GLuint, pname: GLenum, param: GLint) -> Result<()> {
23840		let ret = process_catch("glSamplerParameteri", catch_unwind(||(self.version_3_3.samplerparameteri)(sampler, pname, param)));
23841		#[cfg(feature = "diagnose")]
23842		if let Ok(ret) = ret {
23843			return to_result("glSamplerParameteri", ret, (self.version_3_3.geterror)());
23844		} else {
23845			return ret
23846		}
23847		#[cfg(not(feature = "diagnose"))]
23848		return ret;
23849	}
23850	#[inline(always)]
23851	fn glSamplerParameteriv(&self, sampler: GLuint, pname: GLenum, param: *const GLint) -> Result<()> {
23852		let ret = process_catch("glSamplerParameteriv", catch_unwind(||(self.version_3_3.samplerparameteriv)(sampler, pname, param)));
23853		#[cfg(feature = "diagnose")]
23854		if let Ok(ret) = ret {
23855			return to_result("glSamplerParameteriv", ret, (self.version_3_3.geterror)());
23856		} else {
23857			return ret
23858		}
23859		#[cfg(not(feature = "diagnose"))]
23860		return ret;
23861	}
23862	#[inline(always)]
23863	fn glSamplerParameterf(&self, sampler: GLuint, pname: GLenum, param: GLfloat) -> Result<()> {
23864		let ret = process_catch("glSamplerParameterf", catch_unwind(||(self.version_3_3.samplerparameterf)(sampler, pname, param)));
23865		#[cfg(feature = "diagnose")]
23866		if let Ok(ret) = ret {
23867			return to_result("glSamplerParameterf", ret, (self.version_3_3.geterror)());
23868		} else {
23869			return ret
23870		}
23871		#[cfg(not(feature = "diagnose"))]
23872		return ret;
23873	}
23874	#[inline(always)]
23875	fn glSamplerParameterfv(&self, sampler: GLuint, pname: GLenum, param: *const GLfloat) -> Result<()> {
23876		let ret = process_catch("glSamplerParameterfv", catch_unwind(||(self.version_3_3.samplerparameterfv)(sampler, pname, param)));
23877		#[cfg(feature = "diagnose")]
23878		if let Ok(ret) = ret {
23879			return to_result("glSamplerParameterfv", ret, (self.version_3_3.geterror)());
23880		} else {
23881			return ret
23882		}
23883		#[cfg(not(feature = "diagnose"))]
23884		return ret;
23885	}
23886	#[inline(always)]
23887	fn glSamplerParameterIiv(&self, sampler: GLuint, pname: GLenum, param: *const GLint) -> Result<()> {
23888		let ret = process_catch("glSamplerParameterIiv", catch_unwind(||(self.version_3_3.samplerparameteriiv)(sampler, pname, param)));
23889		#[cfg(feature = "diagnose")]
23890		if let Ok(ret) = ret {
23891			return to_result("glSamplerParameterIiv", ret, (self.version_3_3.geterror)());
23892		} else {
23893			return ret
23894		}
23895		#[cfg(not(feature = "diagnose"))]
23896		return ret;
23897	}
23898	#[inline(always)]
23899	fn glSamplerParameterIuiv(&self, sampler: GLuint, pname: GLenum, param: *const GLuint) -> Result<()> {
23900		let ret = process_catch("glSamplerParameterIuiv", catch_unwind(||(self.version_3_3.samplerparameteriuiv)(sampler, pname, param)));
23901		#[cfg(feature = "diagnose")]
23902		if let Ok(ret) = ret {
23903			return to_result("glSamplerParameterIuiv", ret, (self.version_3_3.geterror)());
23904		} else {
23905			return ret
23906		}
23907		#[cfg(not(feature = "diagnose"))]
23908		return ret;
23909	}
23910	#[inline(always)]
23911	fn glGetSamplerParameteriv(&self, sampler: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
23912		let ret = process_catch("glGetSamplerParameteriv", catch_unwind(||(self.version_3_3.getsamplerparameteriv)(sampler, pname, params)));
23913		#[cfg(feature = "diagnose")]
23914		if let Ok(ret) = ret {
23915			return to_result("glGetSamplerParameteriv", ret, (self.version_3_3.geterror)());
23916		} else {
23917			return ret
23918		}
23919		#[cfg(not(feature = "diagnose"))]
23920		return ret;
23921	}
23922	#[inline(always)]
23923	fn glGetSamplerParameterIiv(&self, sampler: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
23924		let ret = process_catch("glGetSamplerParameterIiv", catch_unwind(||(self.version_3_3.getsamplerparameteriiv)(sampler, pname, params)));
23925		#[cfg(feature = "diagnose")]
23926		if let Ok(ret) = ret {
23927			return to_result("glGetSamplerParameterIiv", ret, (self.version_3_3.geterror)());
23928		} else {
23929			return ret
23930		}
23931		#[cfg(not(feature = "diagnose"))]
23932		return ret;
23933	}
23934	#[inline(always)]
23935	fn glGetSamplerParameterfv(&self, sampler: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
23936		let ret = process_catch("glGetSamplerParameterfv", catch_unwind(||(self.version_3_3.getsamplerparameterfv)(sampler, pname, params)));
23937		#[cfg(feature = "diagnose")]
23938		if let Ok(ret) = ret {
23939			return to_result("glGetSamplerParameterfv", ret, (self.version_3_3.geterror)());
23940		} else {
23941			return ret
23942		}
23943		#[cfg(not(feature = "diagnose"))]
23944		return ret;
23945	}
23946	#[inline(always)]
23947	fn glGetSamplerParameterIuiv(&self, sampler: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()> {
23948		let ret = process_catch("glGetSamplerParameterIuiv", catch_unwind(||(self.version_3_3.getsamplerparameteriuiv)(sampler, pname, params)));
23949		#[cfg(feature = "diagnose")]
23950		if let Ok(ret) = ret {
23951			return to_result("glGetSamplerParameterIuiv", ret, (self.version_3_3.geterror)());
23952		} else {
23953			return ret
23954		}
23955		#[cfg(not(feature = "diagnose"))]
23956		return ret;
23957	}
23958	#[inline(always)]
23959	fn glQueryCounter(&self, id: GLuint, target: GLenum) -> Result<()> {
23960		let ret = process_catch("glQueryCounter", catch_unwind(||(self.version_3_3.querycounter)(id, target)));
23961		#[cfg(feature = "diagnose")]
23962		if let Ok(ret) = ret {
23963			return to_result("glQueryCounter", ret, (self.version_3_3.geterror)());
23964		} else {
23965			return ret
23966		}
23967		#[cfg(not(feature = "diagnose"))]
23968		return ret;
23969	}
23970	#[inline(always)]
23971	fn glGetQueryObjecti64v(&self, id: GLuint, pname: GLenum, params: *mut GLint64) -> Result<()> {
23972		let ret = process_catch("glGetQueryObjecti64v", catch_unwind(||(self.version_3_3.getqueryobjecti64v)(id, pname, params)));
23973		#[cfg(feature = "diagnose")]
23974		if let Ok(ret) = ret {
23975			return to_result("glGetQueryObjecti64v", ret, (self.version_3_3.geterror)());
23976		} else {
23977			return ret
23978		}
23979		#[cfg(not(feature = "diagnose"))]
23980		return ret;
23981	}
23982	#[inline(always)]
23983	fn glGetQueryObjectui64v(&self, id: GLuint, pname: GLenum, params: *mut GLuint64) -> Result<()> {
23984		let ret = process_catch("glGetQueryObjectui64v", catch_unwind(||(self.version_3_3.getqueryobjectui64v)(id, pname, params)));
23985		#[cfg(feature = "diagnose")]
23986		if let Ok(ret) = ret {
23987			return to_result("glGetQueryObjectui64v", ret, (self.version_3_3.geterror)());
23988		} else {
23989			return ret
23990		}
23991		#[cfg(not(feature = "diagnose"))]
23992		return ret;
23993	}
23994	#[inline(always)]
23995	fn glVertexAttribDivisor(&self, index: GLuint, divisor: GLuint) -> Result<()> {
23996		let ret = process_catch("glVertexAttribDivisor", catch_unwind(||(self.version_3_3.vertexattribdivisor)(index, divisor)));
23997		#[cfg(feature = "diagnose")]
23998		if let Ok(ret) = ret {
23999			return to_result("glVertexAttribDivisor", ret, (self.version_3_3.geterror)());
24000		} else {
24001			return ret
24002		}
24003		#[cfg(not(feature = "diagnose"))]
24004		return ret;
24005	}
24006	#[inline(always)]
24007	fn glVertexAttribP1ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()> {
24008		let ret = process_catch("glVertexAttribP1ui", catch_unwind(||(self.version_3_3.vertexattribp1ui)(index, type_, normalized, value)));
24009		#[cfg(feature = "diagnose")]
24010		if let Ok(ret) = ret {
24011			return to_result("glVertexAttribP1ui", ret, (self.version_3_3.geterror)());
24012		} else {
24013			return ret
24014		}
24015		#[cfg(not(feature = "diagnose"))]
24016		return ret;
24017	}
24018	#[inline(always)]
24019	fn glVertexAttribP1uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()> {
24020		let ret = process_catch("glVertexAttribP1uiv", catch_unwind(||(self.version_3_3.vertexattribp1uiv)(index, type_, normalized, value)));
24021		#[cfg(feature = "diagnose")]
24022		if let Ok(ret) = ret {
24023			return to_result("glVertexAttribP1uiv", ret, (self.version_3_3.geterror)());
24024		} else {
24025			return ret
24026		}
24027		#[cfg(not(feature = "diagnose"))]
24028		return ret;
24029	}
24030	#[inline(always)]
24031	fn glVertexAttribP2ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()> {
24032		let ret = process_catch("glVertexAttribP2ui", catch_unwind(||(self.version_3_3.vertexattribp2ui)(index, type_, normalized, value)));
24033		#[cfg(feature = "diagnose")]
24034		if let Ok(ret) = ret {
24035			return to_result("glVertexAttribP2ui", ret, (self.version_3_3.geterror)());
24036		} else {
24037			return ret
24038		}
24039		#[cfg(not(feature = "diagnose"))]
24040		return ret;
24041	}
24042	#[inline(always)]
24043	fn glVertexAttribP2uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()> {
24044		let ret = process_catch("glVertexAttribP2uiv", catch_unwind(||(self.version_3_3.vertexattribp2uiv)(index, type_, normalized, value)));
24045		#[cfg(feature = "diagnose")]
24046		if let Ok(ret) = ret {
24047			return to_result("glVertexAttribP2uiv", ret, (self.version_3_3.geterror)());
24048		} else {
24049			return ret
24050		}
24051		#[cfg(not(feature = "diagnose"))]
24052		return ret;
24053	}
24054	#[inline(always)]
24055	fn glVertexAttribP3ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()> {
24056		let ret = process_catch("glVertexAttribP3ui", catch_unwind(||(self.version_3_3.vertexattribp3ui)(index, type_, normalized, value)));
24057		#[cfg(feature = "diagnose")]
24058		if let Ok(ret) = ret {
24059			return to_result("glVertexAttribP3ui", ret, (self.version_3_3.geterror)());
24060		} else {
24061			return ret
24062		}
24063		#[cfg(not(feature = "diagnose"))]
24064		return ret;
24065	}
24066	#[inline(always)]
24067	fn glVertexAttribP3uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()> {
24068		let ret = process_catch("glVertexAttribP3uiv", catch_unwind(||(self.version_3_3.vertexattribp3uiv)(index, type_, normalized, value)));
24069		#[cfg(feature = "diagnose")]
24070		if let Ok(ret) = ret {
24071			return to_result("glVertexAttribP3uiv", ret, (self.version_3_3.geterror)());
24072		} else {
24073			return ret
24074		}
24075		#[cfg(not(feature = "diagnose"))]
24076		return ret;
24077	}
24078	#[inline(always)]
24079	fn glVertexAttribP4ui(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: GLuint) -> Result<()> {
24080		let ret = process_catch("glVertexAttribP4ui", catch_unwind(||(self.version_3_3.vertexattribp4ui)(index, type_, normalized, value)));
24081		#[cfg(feature = "diagnose")]
24082		if let Ok(ret) = ret {
24083			return to_result("glVertexAttribP4ui", ret, (self.version_3_3.geterror)());
24084		} else {
24085			return ret
24086		}
24087		#[cfg(not(feature = "diagnose"))]
24088		return ret;
24089	}
24090	#[inline(always)]
24091	fn glVertexAttribP4uiv(&self, index: GLuint, type_: GLenum, normalized: GLboolean, value: *const GLuint) -> Result<()> {
24092		let ret = process_catch("glVertexAttribP4uiv", catch_unwind(||(self.version_3_3.vertexattribp4uiv)(index, type_, normalized, value)));
24093		#[cfg(feature = "diagnose")]
24094		if let Ok(ret) = ret {
24095			return to_result("glVertexAttribP4uiv", ret, (self.version_3_3.geterror)());
24096		} else {
24097			return ret
24098		}
24099		#[cfg(not(feature = "diagnose"))]
24100		return ret;
24101	}
24102	#[inline(always)]
24103	fn glVertexP2ui(&self, type_: GLenum, value: GLuint) -> Result<()> {
24104		let ret = process_catch("glVertexP2ui", catch_unwind(||(self.version_3_3.vertexp2ui)(type_, value)));
24105		#[cfg(feature = "diagnose")]
24106		if let Ok(ret) = ret {
24107			return to_result("glVertexP2ui", ret, (self.version_3_3.geterror)());
24108		} else {
24109			return ret
24110		}
24111		#[cfg(not(feature = "diagnose"))]
24112		return ret;
24113	}
24114	#[inline(always)]
24115	fn glVertexP2uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()> {
24116		let ret = process_catch("glVertexP2uiv", catch_unwind(||(self.version_3_3.vertexp2uiv)(type_, value)));
24117		#[cfg(feature = "diagnose")]
24118		if let Ok(ret) = ret {
24119			return to_result("glVertexP2uiv", ret, (self.version_3_3.geterror)());
24120		} else {
24121			return ret
24122		}
24123		#[cfg(not(feature = "diagnose"))]
24124		return ret;
24125	}
24126	#[inline(always)]
24127	fn glVertexP3ui(&self, type_: GLenum, value: GLuint) -> Result<()> {
24128		let ret = process_catch("glVertexP3ui", catch_unwind(||(self.version_3_3.vertexp3ui)(type_, value)));
24129		#[cfg(feature = "diagnose")]
24130		if let Ok(ret) = ret {
24131			return to_result("glVertexP3ui", ret, (self.version_3_3.geterror)());
24132		} else {
24133			return ret
24134		}
24135		#[cfg(not(feature = "diagnose"))]
24136		return ret;
24137	}
24138	#[inline(always)]
24139	fn glVertexP3uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()> {
24140		let ret = process_catch("glVertexP3uiv", catch_unwind(||(self.version_3_3.vertexp3uiv)(type_, value)));
24141		#[cfg(feature = "diagnose")]
24142		if let Ok(ret) = ret {
24143			return to_result("glVertexP3uiv", ret, (self.version_3_3.geterror)());
24144		} else {
24145			return ret
24146		}
24147		#[cfg(not(feature = "diagnose"))]
24148		return ret;
24149	}
24150	#[inline(always)]
24151	fn glVertexP4ui(&self, type_: GLenum, value: GLuint) -> Result<()> {
24152		let ret = process_catch("glVertexP4ui", catch_unwind(||(self.version_3_3.vertexp4ui)(type_, value)));
24153		#[cfg(feature = "diagnose")]
24154		if let Ok(ret) = ret {
24155			return to_result("glVertexP4ui", ret, (self.version_3_3.geterror)());
24156		} else {
24157			return ret
24158		}
24159		#[cfg(not(feature = "diagnose"))]
24160		return ret;
24161	}
24162	#[inline(always)]
24163	fn glVertexP4uiv(&self, type_: GLenum, value: *const GLuint) -> Result<()> {
24164		let ret = process_catch("glVertexP4uiv", catch_unwind(||(self.version_3_3.vertexp4uiv)(type_, value)));
24165		#[cfg(feature = "diagnose")]
24166		if let Ok(ret) = ret {
24167			return to_result("glVertexP4uiv", ret, (self.version_3_3.geterror)());
24168		} else {
24169			return ret
24170		}
24171		#[cfg(not(feature = "diagnose"))]
24172		return ret;
24173	}
24174	#[inline(always)]
24175	fn glTexCoordP1ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
24176		let ret = process_catch("glTexCoordP1ui", catch_unwind(||(self.version_3_3.texcoordp1ui)(type_, coords)));
24177		#[cfg(feature = "diagnose")]
24178		if let Ok(ret) = ret {
24179			return to_result("glTexCoordP1ui", ret, (self.version_3_3.geterror)());
24180		} else {
24181			return ret
24182		}
24183		#[cfg(not(feature = "diagnose"))]
24184		return ret;
24185	}
24186	#[inline(always)]
24187	fn glTexCoordP1uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
24188		let ret = process_catch("glTexCoordP1uiv", catch_unwind(||(self.version_3_3.texcoordp1uiv)(type_, coords)));
24189		#[cfg(feature = "diagnose")]
24190		if let Ok(ret) = ret {
24191			return to_result("glTexCoordP1uiv", ret, (self.version_3_3.geterror)());
24192		} else {
24193			return ret
24194		}
24195		#[cfg(not(feature = "diagnose"))]
24196		return ret;
24197	}
24198	#[inline(always)]
24199	fn glTexCoordP2ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
24200		let ret = process_catch("glTexCoordP2ui", catch_unwind(||(self.version_3_3.texcoordp2ui)(type_, coords)));
24201		#[cfg(feature = "diagnose")]
24202		if let Ok(ret) = ret {
24203			return to_result("glTexCoordP2ui", ret, (self.version_3_3.geterror)());
24204		} else {
24205			return ret
24206		}
24207		#[cfg(not(feature = "diagnose"))]
24208		return ret;
24209	}
24210	#[inline(always)]
24211	fn glTexCoordP2uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
24212		let ret = process_catch("glTexCoordP2uiv", catch_unwind(||(self.version_3_3.texcoordp2uiv)(type_, coords)));
24213		#[cfg(feature = "diagnose")]
24214		if let Ok(ret) = ret {
24215			return to_result("glTexCoordP2uiv", ret, (self.version_3_3.geterror)());
24216		} else {
24217			return ret
24218		}
24219		#[cfg(not(feature = "diagnose"))]
24220		return ret;
24221	}
24222	#[inline(always)]
24223	fn glTexCoordP3ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
24224		let ret = process_catch("glTexCoordP3ui", catch_unwind(||(self.version_3_3.texcoordp3ui)(type_, coords)));
24225		#[cfg(feature = "diagnose")]
24226		if let Ok(ret) = ret {
24227			return to_result("glTexCoordP3ui", ret, (self.version_3_3.geterror)());
24228		} else {
24229			return ret
24230		}
24231		#[cfg(not(feature = "diagnose"))]
24232		return ret;
24233	}
24234	#[inline(always)]
24235	fn glTexCoordP3uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
24236		let ret = process_catch("glTexCoordP3uiv", catch_unwind(||(self.version_3_3.texcoordp3uiv)(type_, coords)));
24237		#[cfg(feature = "diagnose")]
24238		if let Ok(ret) = ret {
24239			return to_result("glTexCoordP3uiv", ret, (self.version_3_3.geterror)());
24240		} else {
24241			return ret
24242		}
24243		#[cfg(not(feature = "diagnose"))]
24244		return ret;
24245	}
24246	#[inline(always)]
24247	fn glTexCoordP4ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
24248		let ret = process_catch("glTexCoordP4ui", catch_unwind(||(self.version_3_3.texcoordp4ui)(type_, coords)));
24249		#[cfg(feature = "diagnose")]
24250		if let Ok(ret) = ret {
24251			return to_result("glTexCoordP4ui", ret, (self.version_3_3.geterror)());
24252		} else {
24253			return ret
24254		}
24255		#[cfg(not(feature = "diagnose"))]
24256		return ret;
24257	}
24258	#[inline(always)]
24259	fn glTexCoordP4uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
24260		let ret = process_catch("glTexCoordP4uiv", catch_unwind(||(self.version_3_3.texcoordp4uiv)(type_, coords)));
24261		#[cfg(feature = "diagnose")]
24262		if let Ok(ret) = ret {
24263			return to_result("glTexCoordP4uiv", ret, (self.version_3_3.geterror)());
24264		} else {
24265			return ret
24266		}
24267		#[cfg(not(feature = "diagnose"))]
24268		return ret;
24269	}
24270	#[inline(always)]
24271	fn glMultiTexCoordP1ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()> {
24272		let ret = process_catch("glMultiTexCoordP1ui", catch_unwind(||(self.version_3_3.multitexcoordp1ui)(texture, type_, coords)));
24273		#[cfg(feature = "diagnose")]
24274		if let Ok(ret) = ret {
24275			return to_result("glMultiTexCoordP1ui", ret, (self.version_3_3.geterror)());
24276		} else {
24277			return ret
24278		}
24279		#[cfg(not(feature = "diagnose"))]
24280		return ret;
24281	}
24282	#[inline(always)]
24283	fn glMultiTexCoordP1uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()> {
24284		let ret = process_catch("glMultiTexCoordP1uiv", catch_unwind(||(self.version_3_3.multitexcoordp1uiv)(texture, type_, coords)));
24285		#[cfg(feature = "diagnose")]
24286		if let Ok(ret) = ret {
24287			return to_result("glMultiTexCoordP1uiv", ret, (self.version_3_3.geterror)());
24288		} else {
24289			return ret
24290		}
24291		#[cfg(not(feature = "diagnose"))]
24292		return ret;
24293	}
24294	#[inline(always)]
24295	fn glMultiTexCoordP2ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()> {
24296		let ret = process_catch("glMultiTexCoordP2ui", catch_unwind(||(self.version_3_3.multitexcoordp2ui)(texture, type_, coords)));
24297		#[cfg(feature = "diagnose")]
24298		if let Ok(ret) = ret {
24299			return to_result("glMultiTexCoordP2ui", ret, (self.version_3_3.geterror)());
24300		} else {
24301			return ret
24302		}
24303		#[cfg(not(feature = "diagnose"))]
24304		return ret;
24305	}
24306	#[inline(always)]
24307	fn glMultiTexCoordP2uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()> {
24308		let ret = process_catch("glMultiTexCoordP2uiv", catch_unwind(||(self.version_3_3.multitexcoordp2uiv)(texture, type_, coords)));
24309		#[cfg(feature = "diagnose")]
24310		if let Ok(ret) = ret {
24311			return to_result("glMultiTexCoordP2uiv", ret, (self.version_3_3.geterror)());
24312		} else {
24313			return ret
24314		}
24315		#[cfg(not(feature = "diagnose"))]
24316		return ret;
24317	}
24318	#[inline(always)]
24319	fn glMultiTexCoordP3ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()> {
24320		let ret = process_catch("glMultiTexCoordP3ui", catch_unwind(||(self.version_3_3.multitexcoordp3ui)(texture, type_, coords)));
24321		#[cfg(feature = "diagnose")]
24322		if let Ok(ret) = ret {
24323			return to_result("glMultiTexCoordP3ui", ret, (self.version_3_3.geterror)());
24324		} else {
24325			return ret
24326		}
24327		#[cfg(not(feature = "diagnose"))]
24328		return ret;
24329	}
24330	#[inline(always)]
24331	fn glMultiTexCoordP3uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()> {
24332		let ret = process_catch("glMultiTexCoordP3uiv", catch_unwind(||(self.version_3_3.multitexcoordp3uiv)(texture, type_, coords)));
24333		#[cfg(feature = "diagnose")]
24334		if let Ok(ret) = ret {
24335			return to_result("glMultiTexCoordP3uiv", ret, (self.version_3_3.geterror)());
24336		} else {
24337			return ret
24338		}
24339		#[cfg(not(feature = "diagnose"))]
24340		return ret;
24341	}
24342	#[inline(always)]
24343	fn glMultiTexCoordP4ui(&self, texture: GLenum, type_: GLenum, coords: GLuint) -> Result<()> {
24344		let ret = process_catch("glMultiTexCoordP4ui", catch_unwind(||(self.version_3_3.multitexcoordp4ui)(texture, type_, coords)));
24345		#[cfg(feature = "diagnose")]
24346		if let Ok(ret) = ret {
24347			return to_result("glMultiTexCoordP4ui", ret, (self.version_3_3.geterror)());
24348		} else {
24349			return ret
24350		}
24351		#[cfg(not(feature = "diagnose"))]
24352		return ret;
24353	}
24354	#[inline(always)]
24355	fn glMultiTexCoordP4uiv(&self, texture: GLenum, type_: GLenum, coords: *const GLuint) -> Result<()> {
24356		let ret = process_catch("glMultiTexCoordP4uiv", catch_unwind(||(self.version_3_3.multitexcoordp4uiv)(texture, type_, coords)));
24357		#[cfg(feature = "diagnose")]
24358		if let Ok(ret) = ret {
24359			return to_result("glMultiTexCoordP4uiv", ret, (self.version_3_3.geterror)());
24360		} else {
24361			return ret
24362		}
24363		#[cfg(not(feature = "diagnose"))]
24364		return ret;
24365	}
24366	#[inline(always)]
24367	fn glNormalP3ui(&self, type_: GLenum, coords: GLuint) -> Result<()> {
24368		let ret = process_catch("glNormalP3ui", catch_unwind(||(self.version_3_3.normalp3ui)(type_, coords)));
24369		#[cfg(feature = "diagnose")]
24370		if let Ok(ret) = ret {
24371			return to_result("glNormalP3ui", ret, (self.version_3_3.geterror)());
24372		} else {
24373			return ret
24374		}
24375		#[cfg(not(feature = "diagnose"))]
24376		return ret;
24377	}
24378	#[inline(always)]
24379	fn glNormalP3uiv(&self, type_: GLenum, coords: *const GLuint) -> Result<()> {
24380		let ret = process_catch("glNormalP3uiv", catch_unwind(||(self.version_3_3.normalp3uiv)(type_, coords)));
24381		#[cfg(feature = "diagnose")]
24382		if let Ok(ret) = ret {
24383			return to_result("glNormalP3uiv", ret, (self.version_3_3.geterror)());
24384		} else {
24385			return ret
24386		}
24387		#[cfg(not(feature = "diagnose"))]
24388		return ret;
24389	}
24390	#[inline(always)]
24391	fn glColorP3ui(&self, type_: GLenum, color: GLuint) -> Result<()> {
24392		let ret = process_catch("glColorP3ui", catch_unwind(||(self.version_3_3.colorp3ui)(type_, color)));
24393		#[cfg(feature = "diagnose")]
24394		if let Ok(ret) = ret {
24395			return to_result("glColorP3ui", ret, (self.version_3_3.geterror)());
24396		} else {
24397			return ret
24398		}
24399		#[cfg(not(feature = "diagnose"))]
24400		return ret;
24401	}
24402	#[inline(always)]
24403	fn glColorP3uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()> {
24404		let ret = process_catch("glColorP3uiv", catch_unwind(||(self.version_3_3.colorp3uiv)(type_, color)));
24405		#[cfg(feature = "diagnose")]
24406		if let Ok(ret) = ret {
24407			return to_result("glColorP3uiv", ret, (self.version_3_3.geterror)());
24408		} else {
24409			return ret
24410		}
24411		#[cfg(not(feature = "diagnose"))]
24412		return ret;
24413	}
24414	#[inline(always)]
24415	fn glColorP4ui(&self, type_: GLenum, color: GLuint) -> Result<()> {
24416		let ret = process_catch("glColorP4ui", catch_unwind(||(self.version_3_3.colorp4ui)(type_, color)));
24417		#[cfg(feature = "diagnose")]
24418		if let Ok(ret) = ret {
24419			return to_result("glColorP4ui", ret, (self.version_3_3.geterror)());
24420		} else {
24421			return ret
24422		}
24423		#[cfg(not(feature = "diagnose"))]
24424		return ret;
24425	}
24426	#[inline(always)]
24427	fn glColorP4uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()> {
24428		let ret = process_catch("glColorP4uiv", catch_unwind(||(self.version_3_3.colorp4uiv)(type_, color)));
24429		#[cfg(feature = "diagnose")]
24430		if let Ok(ret) = ret {
24431			return to_result("glColorP4uiv", ret, (self.version_3_3.geterror)());
24432		} else {
24433			return ret
24434		}
24435		#[cfg(not(feature = "diagnose"))]
24436		return ret;
24437	}
24438	#[inline(always)]
24439	fn glSecondaryColorP3ui(&self, type_: GLenum, color: GLuint) -> Result<()> {
24440		let ret = process_catch("glSecondaryColorP3ui", catch_unwind(||(self.version_3_3.secondarycolorp3ui)(type_, color)));
24441		#[cfg(feature = "diagnose")]
24442		if let Ok(ret) = ret {
24443			return to_result("glSecondaryColorP3ui", ret, (self.version_3_3.geterror)());
24444		} else {
24445			return ret
24446		}
24447		#[cfg(not(feature = "diagnose"))]
24448		return ret;
24449	}
24450	#[inline(always)]
24451	fn glSecondaryColorP3uiv(&self, type_: GLenum, color: *const GLuint) -> Result<()> {
24452		let ret = process_catch("glSecondaryColorP3uiv", catch_unwind(||(self.version_3_3.secondarycolorp3uiv)(type_, color)));
24453		#[cfg(feature = "diagnose")]
24454		if let Ok(ret) = ret {
24455			return to_result("glSecondaryColorP3uiv", ret, (self.version_3_3.geterror)());
24456		} else {
24457			return ret
24458		}
24459		#[cfg(not(feature = "diagnose"))]
24460		return ret;
24461	}
24462}
24463
24464impl GL_4_0 for GLCore {
24465	#[inline(always)]
24466	fn glGetError(&self) -> GLenum {
24467		(self.version_4_0.geterror)()
24468	}
24469	#[inline(always)]
24470	fn glMinSampleShading(&self, value: GLfloat) -> Result<()> {
24471		let ret = process_catch("glMinSampleShading", catch_unwind(||(self.version_4_0.minsampleshading)(value)));
24472		#[cfg(feature = "diagnose")]
24473		if let Ok(ret) = ret {
24474			return to_result("glMinSampleShading", ret, (self.version_4_0.geterror)());
24475		} else {
24476			return ret
24477		}
24478		#[cfg(not(feature = "diagnose"))]
24479		return ret;
24480	}
24481	#[inline(always)]
24482	fn glBlendEquationi(&self, buf: GLuint, mode: GLenum) -> Result<()> {
24483		let ret = process_catch("glBlendEquationi", catch_unwind(||(self.version_4_0.blendequationi)(buf, mode)));
24484		#[cfg(feature = "diagnose")]
24485		if let Ok(ret) = ret {
24486			return to_result("glBlendEquationi", ret, (self.version_4_0.geterror)());
24487		} else {
24488			return ret
24489		}
24490		#[cfg(not(feature = "diagnose"))]
24491		return ret;
24492	}
24493	#[inline(always)]
24494	fn glBlendEquationSeparatei(&self, buf: GLuint, modeRGB: GLenum, modeAlpha: GLenum) -> Result<()> {
24495		let ret = process_catch("glBlendEquationSeparatei", catch_unwind(||(self.version_4_0.blendequationseparatei)(buf, modeRGB, modeAlpha)));
24496		#[cfg(feature = "diagnose")]
24497		if let Ok(ret) = ret {
24498			return to_result("glBlendEquationSeparatei", ret, (self.version_4_0.geterror)());
24499		} else {
24500			return ret
24501		}
24502		#[cfg(not(feature = "diagnose"))]
24503		return ret;
24504	}
24505	#[inline(always)]
24506	fn glBlendFunci(&self, buf: GLuint, src: GLenum, dst: GLenum) -> Result<()> {
24507		let ret = process_catch("glBlendFunci", catch_unwind(||(self.version_4_0.blendfunci)(buf, src, dst)));
24508		#[cfg(feature = "diagnose")]
24509		if let Ok(ret) = ret {
24510			return to_result("glBlendFunci", ret, (self.version_4_0.geterror)());
24511		} else {
24512			return ret
24513		}
24514		#[cfg(not(feature = "diagnose"))]
24515		return ret;
24516	}
24517	#[inline(always)]
24518	fn glBlendFuncSeparatei(&self, buf: GLuint, srcRGB: GLenum, dstRGB: GLenum, srcAlpha: GLenum, dstAlpha: GLenum) -> Result<()> {
24519		let ret = process_catch("glBlendFuncSeparatei", catch_unwind(||(self.version_4_0.blendfuncseparatei)(buf, srcRGB, dstRGB, srcAlpha, dstAlpha)));
24520		#[cfg(feature = "diagnose")]
24521		if let Ok(ret) = ret {
24522			return to_result("glBlendFuncSeparatei", ret, (self.version_4_0.geterror)());
24523		} else {
24524			return ret
24525		}
24526		#[cfg(not(feature = "diagnose"))]
24527		return ret;
24528	}
24529	#[inline(always)]
24530	fn glDrawArraysIndirect(&self, mode: GLenum, indirect: *const c_void) -> Result<()> {
24531		let ret = process_catch("glDrawArraysIndirect", catch_unwind(||(self.version_4_0.drawarraysindirect)(mode, indirect)));
24532		#[cfg(feature = "diagnose")]
24533		if let Ok(ret) = ret {
24534			return to_result("glDrawArraysIndirect", ret, (self.version_4_0.geterror)());
24535		} else {
24536			return ret
24537		}
24538		#[cfg(not(feature = "diagnose"))]
24539		return ret;
24540	}
24541	#[inline(always)]
24542	fn glDrawElementsIndirect(&self, mode: GLenum, type_: GLenum, indirect: *const c_void) -> Result<()> {
24543		let ret = process_catch("glDrawElementsIndirect", catch_unwind(||(self.version_4_0.drawelementsindirect)(mode, type_, indirect)));
24544		#[cfg(feature = "diagnose")]
24545		if let Ok(ret) = ret {
24546			return to_result("glDrawElementsIndirect", ret, (self.version_4_0.geterror)());
24547		} else {
24548			return ret
24549		}
24550		#[cfg(not(feature = "diagnose"))]
24551		return ret;
24552	}
24553	#[inline(always)]
24554	fn glUniform1d(&self, location: GLint, x: GLdouble) -> Result<()> {
24555		let ret = process_catch("glUniform1d", catch_unwind(||(self.version_4_0.uniform1d)(location, x)));
24556		#[cfg(feature = "diagnose")]
24557		if let Ok(ret) = ret {
24558			return to_result("glUniform1d", ret, (self.version_4_0.geterror)());
24559		} else {
24560			return ret
24561		}
24562		#[cfg(not(feature = "diagnose"))]
24563		return ret;
24564	}
24565	#[inline(always)]
24566	fn glUniform2d(&self, location: GLint, x: GLdouble, y: GLdouble) -> Result<()> {
24567		let ret = process_catch("glUniform2d", catch_unwind(||(self.version_4_0.uniform2d)(location, x, y)));
24568		#[cfg(feature = "diagnose")]
24569		if let Ok(ret) = ret {
24570			return to_result("glUniform2d", ret, (self.version_4_0.geterror)());
24571		} else {
24572			return ret
24573		}
24574		#[cfg(not(feature = "diagnose"))]
24575		return ret;
24576	}
24577	#[inline(always)]
24578	fn glUniform3d(&self, location: GLint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()> {
24579		let ret = process_catch("glUniform3d", catch_unwind(||(self.version_4_0.uniform3d)(location, x, y, z)));
24580		#[cfg(feature = "diagnose")]
24581		if let Ok(ret) = ret {
24582			return to_result("glUniform3d", ret, (self.version_4_0.geterror)());
24583		} else {
24584			return ret
24585		}
24586		#[cfg(not(feature = "diagnose"))]
24587		return ret;
24588	}
24589	#[inline(always)]
24590	fn glUniform4d(&self, location: GLint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()> {
24591		let ret = process_catch("glUniform4d", catch_unwind(||(self.version_4_0.uniform4d)(location, x, y, z, w)));
24592		#[cfg(feature = "diagnose")]
24593		if let Ok(ret) = ret {
24594			return to_result("glUniform4d", ret, (self.version_4_0.geterror)());
24595		} else {
24596			return ret
24597		}
24598		#[cfg(not(feature = "diagnose"))]
24599		return ret;
24600	}
24601	#[inline(always)]
24602	fn glUniform1dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
24603		let ret = process_catch("glUniform1dv", catch_unwind(||(self.version_4_0.uniform1dv)(location, count, value)));
24604		#[cfg(feature = "diagnose")]
24605		if let Ok(ret) = ret {
24606			return to_result("glUniform1dv", ret, (self.version_4_0.geterror)());
24607		} else {
24608			return ret
24609		}
24610		#[cfg(not(feature = "diagnose"))]
24611		return ret;
24612	}
24613	#[inline(always)]
24614	fn glUniform2dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
24615		let ret = process_catch("glUniform2dv", catch_unwind(||(self.version_4_0.uniform2dv)(location, count, value)));
24616		#[cfg(feature = "diagnose")]
24617		if let Ok(ret) = ret {
24618			return to_result("glUniform2dv", ret, (self.version_4_0.geterror)());
24619		} else {
24620			return ret
24621		}
24622		#[cfg(not(feature = "diagnose"))]
24623		return ret;
24624	}
24625	#[inline(always)]
24626	fn glUniform3dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
24627		let ret = process_catch("glUniform3dv", catch_unwind(||(self.version_4_0.uniform3dv)(location, count, value)));
24628		#[cfg(feature = "diagnose")]
24629		if let Ok(ret) = ret {
24630			return to_result("glUniform3dv", ret, (self.version_4_0.geterror)());
24631		} else {
24632			return ret
24633		}
24634		#[cfg(not(feature = "diagnose"))]
24635		return ret;
24636	}
24637	#[inline(always)]
24638	fn glUniform4dv(&self, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
24639		let ret = process_catch("glUniform4dv", catch_unwind(||(self.version_4_0.uniform4dv)(location, count, value)));
24640		#[cfg(feature = "diagnose")]
24641		if let Ok(ret) = ret {
24642			return to_result("glUniform4dv", ret, (self.version_4_0.geterror)());
24643		} else {
24644			return ret
24645		}
24646		#[cfg(not(feature = "diagnose"))]
24647		return ret;
24648	}
24649	#[inline(always)]
24650	fn glUniformMatrix2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24651		let ret = process_catch("glUniformMatrix2dv", catch_unwind(||(self.version_4_0.uniformmatrix2dv)(location, count, transpose, value)));
24652		#[cfg(feature = "diagnose")]
24653		if let Ok(ret) = ret {
24654			return to_result("glUniformMatrix2dv", ret, (self.version_4_0.geterror)());
24655		} else {
24656			return ret
24657		}
24658		#[cfg(not(feature = "diagnose"))]
24659		return ret;
24660	}
24661	#[inline(always)]
24662	fn glUniformMatrix3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24663		let ret = process_catch("glUniformMatrix3dv", catch_unwind(||(self.version_4_0.uniformmatrix3dv)(location, count, transpose, value)));
24664		#[cfg(feature = "diagnose")]
24665		if let Ok(ret) = ret {
24666			return to_result("glUniformMatrix3dv", ret, (self.version_4_0.geterror)());
24667		} else {
24668			return ret
24669		}
24670		#[cfg(not(feature = "diagnose"))]
24671		return ret;
24672	}
24673	#[inline(always)]
24674	fn glUniformMatrix4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24675		let ret = process_catch("glUniformMatrix4dv", catch_unwind(||(self.version_4_0.uniformmatrix4dv)(location, count, transpose, value)));
24676		#[cfg(feature = "diagnose")]
24677		if let Ok(ret) = ret {
24678			return to_result("glUniformMatrix4dv", ret, (self.version_4_0.geterror)());
24679		} else {
24680			return ret
24681		}
24682		#[cfg(not(feature = "diagnose"))]
24683		return ret;
24684	}
24685	#[inline(always)]
24686	fn glUniformMatrix2x3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24687		let ret = process_catch("glUniformMatrix2x3dv", catch_unwind(||(self.version_4_0.uniformmatrix2x3dv)(location, count, transpose, value)));
24688		#[cfg(feature = "diagnose")]
24689		if let Ok(ret) = ret {
24690			return to_result("glUniformMatrix2x3dv", ret, (self.version_4_0.geterror)());
24691		} else {
24692			return ret
24693		}
24694		#[cfg(not(feature = "diagnose"))]
24695		return ret;
24696	}
24697	#[inline(always)]
24698	fn glUniformMatrix2x4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24699		let ret = process_catch("glUniformMatrix2x4dv", catch_unwind(||(self.version_4_0.uniformmatrix2x4dv)(location, count, transpose, value)));
24700		#[cfg(feature = "diagnose")]
24701		if let Ok(ret) = ret {
24702			return to_result("glUniformMatrix2x4dv", ret, (self.version_4_0.geterror)());
24703		} else {
24704			return ret
24705		}
24706		#[cfg(not(feature = "diagnose"))]
24707		return ret;
24708	}
24709	#[inline(always)]
24710	fn glUniformMatrix3x2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24711		let ret = process_catch("glUniformMatrix3x2dv", catch_unwind(||(self.version_4_0.uniformmatrix3x2dv)(location, count, transpose, value)));
24712		#[cfg(feature = "diagnose")]
24713		if let Ok(ret) = ret {
24714			return to_result("glUniformMatrix3x2dv", ret, (self.version_4_0.geterror)());
24715		} else {
24716			return ret
24717		}
24718		#[cfg(not(feature = "diagnose"))]
24719		return ret;
24720	}
24721	#[inline(always)]
24722	fn glUniformMatrix3x4dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24723		let ret = process_catch("glUniformMatrix3x4dv", catch_unwind(||(self.version_4_0.uniformmatrix3x4dv)(location, count, transpose, value)));
24724		#[cfg(feature = "diagnose")]
24725		if let Ok(ret) = ret {
24726			return to_result("glUniformMatrix3x4dv", ret, (self.version_4_0.geterror)());
24727		} else {
24728			return ret
24729		}
24730		#[cfg(not(feature = "diagnose"))]
24731		return ret;
24732	}
24733	#[inline(always)]
24734	fn glUniformMatrix4x2dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24735		let ret = process_catch("glUniformMatrix4x2dv", catch_unwind(||(self.version_4_0.uniformmatrix4x2dv)(location, count, transpose, value)));
24736		#[cfg(feature = "diagnose")]
24737		if let Ok(ret) = ret {
24738			return to_result("glUniformMatrix4x2dv", ret, (self.version_4_0.geterror)());
24739		} else {
24740			return ret
24741		}
24742		#[cfg(not(feature = "diagnose"))]
24743		return ret;
24744	}
24745	#[inline(always)]
24746	fn glUniformMatrix4x3dv(&self, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
24747		let ret = process_catch("glUniformMatrix4x3dv", catch_unwind(||(self.version_4_0.uniformmatrix4x3dv)(location, count, transpose, value)));
24748		#[cfg(feature = "diagnose")]
24749		if let Ok(ret) = ret {
24750			return to_result("glUniformMatrix4x3dv", ret, (self.version_4_0.geterror)());
24751		} else {
24752			return ret
24753		}
24754		#[cfg(not(feature = "diagnose"))]
24755		return ret;
24756	}
24757	#[inline(always)]
24758	fn glGetUniformdv(&self, program: GLuint, location: GLint, params: *mut GLdouble) -> Result<()> {
24759		let ret = process_catch("glGetUniformdv", catch_unwind(||(self.version_4_0.getuniformdv)(program, location, params)));
24760		#[cfg(feature = "diagnose")]
24761		if let Ok(ret) = ret {
24762			return to_result("glGetUniformdv", ret, (self.version_4_0.geterror)());
24763		} else {
24764			return ret
24765		}
24766		#[cfg(not(feature = "diagnose"))]
24767		return ret;
24768	}
24769	#[inline(always)]
24770	fn glGetSubroutineUniformLocation(&self, program: GLuint, shadertype: GLenum, name: *const GLchar) -> Result<GLint> {
24771		let ret = process_catch("glGetSubroutineUniformLocation", catch_unwind(||(self.version_4_0.getsubroutineuniformlocation)(program, shadertype, name)));
24772		#[cfg(feature = "diagnose")]
24773		if let Ok(ret) = ret {
24774			return to_result("glGetSubroutineUniformLocation", ret, (self.version_4_0.geterror)());
24775		} else {
24776			return ret
24777		}
24778		#[cfg(not(feature = "diagnose"))]
24779		return ret;
24780	}
24781	#[inline(always)]
24782	fn glGetSubroutineIndex(&self, program: GLuint, shadertype: GLenum, name: *const GLchar) -> Result<GLuint> {
24783		let ret = process_catch("glGetSubroutineIndex", catch_unwind(||(self.version_4_0.getsubroutineindex)(program, shadertype, name)));
24784		#[cfg(feature = "diagnose")]
24785		if let Ok(ret) = ret {
24786			return to_result("glGetSubroutineIndex", ret, (self.version_4_0.geterror)());
24787		} else {
24788			return ret
24789		}
24790		#[cfg(not(feature = "diagnose"))]
24791		return ret;
24792	}
24793	#[inline(always)]
24794	fn glGetActiveSubroutineUniformiv(&self, program: GLuint, shadertype: GLenum, index: GLuint, pname: GLenum, values: *mut GLint) -> Result<()> {
24795		let ret = process_catch("glGetActiveSubroutineUniformiv", catch_unwind(||(self.version_4_0.getactivesubroutineuniformiv)(program, shadertype, index, pname, values)));
24796		#[cfg(feature = "diagnose")]
24797		if let Ok(ret) = ret {
24798			return to_result("glGetActiveSubroutineUniformiv", ret, (self.version_4_0.geterror)());
24799		} else {
24800			return ret
24801		}
24802		#[cfg(not(feature = "diagnose"))]
24803		return ret;
24804	}
24805	#[inline(always)]
24806	fn glGetActiveSubroutineUniformName(&self, program: GLuint, shadertype: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()> {
24807		let ret = process_catch("glGetActiveSubroutineUniformName", catch_unwind(||(self.version_4_0.getactivesubroutineuniformname)(program, shadertype, index, bufSize, length, name)));
24808		#[cfg(feature = "diagnose")]
24809		if let Ok(ret) = ret {
24810			return to_result("glGetActiveSubroutineUniformName", ret, (self.version_4_0.geterror)());
24811		} else {
24812			return ret
24813		}
24814		#[cfg(not(feature = "diagnose"))]
24815		return ret;
24816	}
24817	#[inline(always)]
24818	fn glGetActiveSubroutineName(&self, program: GLuint, shadertype: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()> {
24819		let ret = process_catch("glGetActiveSubroutineName", catch_unwind(||(self.version_4_0.getactivesubroutinename)(program, shadertype, index, bufSize, length, name)));
24820		#[cfg(feature = "diagnose")]
24821		if let Ok(ret) = ret {
24822			return to_result("glGetActiveSubroutineName", ret, (self.version_4_0.geterror)());
24823		} else {
24824			return ret
24825		}
24826		#[cfg(not(feature = "diagnose"))]
24827		return ret;
24828	}
24829	#[inline(always)]
24830	fn glUniformSubroutinesuiv(&self, shadertype: GLenum, count: GLsizei, indices: *const GLuint) -> Result<()> {
24831		let ret = process_catch("glUniformSubroutinesuiv", catch_unwind(||(self.version_4_0.uniformsubroutinesuiv)(shadertype, count, indices)));
24832		#[cfg(feature = "diagnose")]
24833		if let Ok(ret) = ret {
24834			return to_result("glUniformSubroutinesuiv", ret, (self.version_4_0.geterror)());
24835		} else {
24836			return ret
24837		}
24838		#[cfg(not(feature = "diagnose"))]
24839		return ret;
24840	}
24841	#[inline(always)]
24842	fn glGetUniformSubroutineuiv(&self, shadertype: GLenum, location: GLint, params: *mut GLuint) -> Result<()> {
24843		let ret = process_catch("glGetUniformSubroutineuiv", catch_unwind(||(self.version_4_0.getuniformsubroutineuiv)(shadertype, location, params)));
24844		#[cfg(feature = "diagnose")]
24845		if let Ok(ret) = ret {
24846			return to_result("glGetUniformSubroutineuiv", ret, (self.version_4_0.geterror)());
24847		} else {
24848			return ret
24849		}
24850		#[cfg(not(feature = "diagnose"))]
24851		return ret;
24852	}
24853	#[inline(always)]
24854	fn glGetProgramStageiv(&self, program: GLuint, shadertype: GLenum, pname: GLenum, values: *mut GLint) -> Result<()> {
24855		let ret = process_catch("glGetProgramStageiv", catch_unwind(||(self.version_4_0.getprogramstageiv)(program, shadertype, pname, values)));
24856		#[cfg(feature = "diagnose")]
24857		if let Ok(ret) = ret {
24858			return to_result("glGetProgramStageiv", ret, (self.version_4_0.geterror)());
24859		} else {
24860			return ret
24861		}
24862		#[cfg(not(feature = "diagnose"))]
24863		return ret;
24864	}
24865	#[inline(always)]
24866	fn glPatchParameteri(&self, pname: GLenum, value: GLint) -> Result<()> {
24867		let ret = process_catch("glPatchParameteri", catch_unwind(||(self.version_4_0.patchparameteri)(pname, value)));
24868		#[cfg(feature = "diagnose")]
24869		if let Ok(ret) = ret {
24870			return to_result("glPatchParameteri", ret, (self.version_4_0.geterror)());
24871		} else {
24872			return ret
24873		}
24874		#[cfg(not(feature = "diagnose"))]
24875		return ret;
24876	}
24877	#[inline(always)]
24878	fn glPatchParameterfv(&self, pname: GLenum, values: *const GLfloat) -> Result<()> {
24879		let ret = process_catch("glPatchParameterfv", catch_unwind(||(self.version_4_0.patchparameterfv)(pname, values)));
24880		#[cfg(feature = "diagnose")]
24881		if let Ok(ret) = ret {
24882			return to_result("glPatchParameterfv", ret, (self.version_4_0.geterror)());
24883		} else {
24884			return ret
24885		}
24886		#[cfg(not(feature = "diagnose"))]
24887		return ret;
24888	}
24889	#[inline(always)]
24890	fn glBindTransformFeedback(&self, target: GLenum, id: GLuint) -> Result<()> {
24891		let ret = process_catch("glBindTransformFeedback", catch_unwind(||(self.version_4_0.bindtransformfeedback)(target, id)));
24892		#[cfg(feature = "diagnose")]
24893		if let Ok(ret) = ret {
24894			return to_result("glBindTransformFeedback", ret, (self.version_4_0.geterror)());
24895		} else {
24896			return ret
24897		}
24898		#[cfg(not(feature = "diagnose"))]
24899		return ret;
24900	}
24901	#[inline(always)]
24902	fn glDeleteTransformFeedbacks(&self, n: GLsizei, ids: *const GLuint) -> Result<()> {
24903		let ret = process_catch("glDeleteTransformFeedbacks", catch_unwind(||(self.version_4_0.deletetransformfeedbacks)(n, ids)));
24904		#[cfg(feature = "diagnose")]
24905		if let Ok(ret) = ret {
24906			return to_result("glDeleteTransformFeedbacks", ret, (self.version_4_0.geterror)());
24907		} else {
24908			return ret
24909		}
24910		#[cfg(not(feature = "diagnose"))]
24911		return ret;
24912	}
24913	#[inline(always)]
24914	fn glGenTransformFeedbacks(&self, n: GLsizei, ids: *mut GLuint) -> Result<()> {
24915		let ret = process_catch("glGenTransformFeedbacks", catch_unwind(||(self.version_4_0.gentransformfeedbacks)(n, ids)));
24916		#[cfg(feature = "diagnose")]
24917		if let Ok(ret) = ret {
24918			return to_result("glGenTransformFeedbacks", ret, (self.version_4_0.geterror)());
24919		} else {
24920			return ret
24921		}
24922		#[cfg(not(feature = "diagnose"))]
24923		return ret;
24924	}
24925	#[inline(always)]
24926	fn glIsTransformFeedback(&self, id: GLuint) -> Result<GLboolean> {
24927		let ret = process_catch("glIsTransformFeedback", catch_unwind(||(self.version_4_0.istransformfeedback)(id)));
24928		#[cfg(feature = "diagnose")]
24929		if let Ok(ret) = ret {
24930			return to_result("glIsTransformFeedback", ret, (self.version_4_0.geterror)());
24931		} else {
24932			return ret
24933		}
24934		#[cfg(not(feature = "diagnose"))]
24935		return ret;
24936	}
24937	#[inline(always)]
24938	fn glPauseTransformFeedback(&self) -> Result<()> {
24939		let ret = process_catch("glPauseTransformFeedback", catch_unwind(||(self.version_4_0.pausetransformfeedback)()));
24940		#[cfg(feature = "diagnose")]
24941		if let Ok(ret) = ret {
24942			return to_result("glPauseTransformFeedback", ret, (self.version_4_0.geterror)());
24943		} else {
24944			return ret
24945		}
24946		#[cfg(not(feature = "diagnose"))]
24947		return ret;
24948	}
24949	#[inline(always)]
24950	fn glResumeTransformFeedback(&self) -> Result<()> {
24951		let ret = process_catch("glResumeTransformFeedback", catch_unwind(||(self.version_4_0.resumetransformfeedback)()));
24952		#[cfg(feature = "diagnose")]
24953		if let Ok(ret) = ret {
24954			return to_result("glResumeTransformFeedback", ret, (self.version_4_0.geterror)());
24955		} else {
24956			return ret
24957		}
24958		#[cfg(not(feature = "diagnose"))]
24959		return ret;
24960	}
24961	#[inline(always)]
24962	fn glDrawTransformFeedback(&self, mode: GLenum, id: GLuint) -> Result<()> {
24963		let ret = process_catch("glDrawTransformFeedback", catch_unwind(||(self.version_4_0.drawtransformfeedback)(mode, id)));
24964		#[cfg(feature = "diagnose")]
24965		if let Ok(ret) = ret {
24966			return to_result("glDrawTransformFeedback", ret, (self.version_4_0.geterror)());
24967		} else {
24968			return ret
24969		}
24970		#[cfg(not(feature = "diagnose"))]
24971		return ret;
24972	}
24973	#[inline(always)]
24974	fn glDrawTransformFeedbackStream(&self, mode: GLenum, id: GLuint, stream: GLuint) -> Result<()> {
24975		let ret = process_catch("glDrawTransformFeedbackStream", catch_unwind(||(self.version_4_0.drawtransformfeedbackstream)(mode, id, stream)));
24976		#[cfg(feature = "diagnose")]
24977		if let Ok(ret) = ret {
24978			return to_result("glDrawTransformFeedbackStream", ret, (self.version_4_0.geterror)());
24979		} else {
24980			return ret
24981		}
24982		#[cfg(not(feature = "diagnose"))]
24983		return ret;
24984	}
24985	#[inline(always)]
24986	fn glBeginQueryIndexed(&self, target: GLenum, index: GLuint, id: GLuint) -> Result<()> {
24987		let ret = process_catch("glBeginQueryIndexed", catch_unwind(||(self.version_4_0.beginqueryindexed)(target, index, id)));
24988		#[cfg(feature = "diagnose")]
24989		if let Ok(ret) = ret {
24990			return to_result("glBeginQueryIndexed", ret, (self.version_4_0.geterror)());
24991		} else {
24992			return ret
24993		}
24994		#[cfg(not(feature = "diagnose"))]
24995		return ret;
24996	}
24997	#[inline(always)]
24998	fn glEndQueryIndexed(&self, target: GLenum, index: GLuint) -> Result<()> {
24999		let ret = process_catch("glEndQueryIndexed", catch_unwind(||(self.version_4_0.endqueryindexed)(target, index)));
25000		#[cfg(feature = "diagnose")]
25001		if let Ok(ret) = ret {
25002			return to_result("glEndQueryIndexed", ret, (self.version_4_0.geterror)());
25003		} else {
25004			return ret
25005		}
25006		#[cfg(not(feature = "diagnose"))]
25007		return ret;
25008	}
25009	#[inline(always)]
25010	fn glGetQueryIndexediv(&self, target: GLenum, index: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
25011		let ret = process_catch("glGetQueryIndexediv", catch_unwind(||(self.version_4_0.getqueryindexediv)(target, index, pname, params)));
25012		#[cfg(feature = "diagnose")]
25013		if let Ok(ret) = ret {
25014			return to_result("glGetQueryIndexediv", ret, (self.version_4_0.geterror)());
25015		} else {
25016			return ret
25017		}
25018		#[cfg(not(feature = "diagnose"))]
25019		return ret;
25020	}
25021}
25022
25023impl GL_4_1 for GLCore {
25024	#[inline(always)]
25025	fn glGetError(&self) -> GLenum {
25026		(self.version_4_1.geterror)()
25027	}
25028	#[inline(always)]
25029	fn glReleaseShaderCompiler(&self) -> Result<()> {
25030		let ret = process_catch("glReleaseShaderCompiler", catch_unwind(||(self.version_4_1.releaseshadercompiler)()));
25031		#[cfg(feature = "diagnose")]
25032		if let Ok(ret) = ret {
25033			return to_result("glReleaseShaderCompiler", ret, (self.version_4_1.geterror)());
25034		} else {
25035			return ret
25036		}
25037		#[cfg(not(feature = "diagnose"))]
25038		return ret;
25039	}
25040	#[inline(always)]
25041	fn glShaderBinary(&self, count: GLsizei, shaders: *const GLuint, binaryFormat: GLenum, binary: *const c_void, length: GLsizei) -> Result<()> {
25042		let ret = process_catch("glShaderBinary", catch_unwind(||(self.version_4_1.shaderbinary)(count, shaders, binaryFormat, binary, length)));
25043		#[cfg(feature = "diagnose")]
25044		if let Ok(ret) = ret {
25045			return to_result("glShaderBinary", ret, (self.version_4_1.geterror)());
25046		} else {
25047			return ret
25048		}
25049		#[cfg(not(feature = "diagnose"))]
25050		return ret;
25051	}
25052	#[inline(always)]
25053	fn glGetShaderPrecisionFormat(&self, shadertype: GLenum, precisiontype: GLenum, range: *mut GLint, precision: *mut GLint) -> Result<()> {
25054		let ret = process_catch("glGetShaderPrecisionFormat", catch_unwind(||(self.version_4_1.getshaderprecisionformat)(shadertype, precisiontype, range, precision)));
25055		#[cfg(feature = "diagnose")]
25056		if let Ok(ret) = ret {
25057			return to_result("glGetShaderPrecisionFormat", ret, (self.version_4_1.geterror)());
25058		} else {
25059			return ret
25060		}
25061		#[cfg(not(feature = "diagnose"))]
25062		return ret;
25063	}
25064	#[inline(always)]
25065	fn glDepthRangef(&self, n: GLfloat, f: GLfloat) -> Result<()> {
25066		let ret = process_catch("glDepthRangef", catch_unwind(||(self.version_4_1.depthrangef)(n, f)));
25067		#[cfg(feature = "diagnose")]
25068		if let Ok(ret) = ret {
25069			return to_result("glDepthRangef", ret, (self.version_4_1.geterror)());
25070		} else {
25071			return ret
25072		}
25073		#[cfg(not(feature = "diagnose"))]
25074		return ret;
25075	}
25076	#[inline(always)]
25077	fn glClearDepthf(&self, d: GLfloat) -> Result<()> {
25078		let ret = process_catch("glClearDepthf", catch_unwind(||(self.version_4_1.cleardepthf)(d)));
25079		#[cfg(feature = "diagnose")]
25080		if let Ok(ret) = ret {
25081			return to_result("glClearDepthf", ret, (self.version_4_1.geterror)());
25082		} else {
25083			return ret
25084		}
25085		#[cfg(not(feature = "diagnose"))]
25086		return ret;
25087	}
25088	#[inline(always)]
25089	fn glGetProgramBinary(&self, program: GLuint, bufSize: GLsizei, length: *mut GLsizei, binaryFormat: *mut GLenum, binary: *mut c_void) -> Result<()> {
25090		let ret = process_catch("glGetProgramBinary", catch_unwind(||(self.version_4_1.getprogrambinary)(program, bufSize, length, binaryFormat, binary)));
25091		#[cfg(feature = "diagnose")]
25092		if let Ok(ret) = ret {
25093			return to_result("glGetProgramBinary", ret, (self.version_4_1.geterror)());
25094		} else {
25095			return ret
25096		}
25097		#[cfg(not(feature = "diagnose"))]
25098		return ret;
25099	}
25100	#[inline(always)]
25101	fn glProgramBinary(&self, program: GLuint, binaryFormat: GLenum, binary: *const c_void, length: GLsizei) -> Result<()> {
25102		let ret = process_catch("glProgramBinary", catch_unwind(||(self.version_4_1.programbinary)(program, binaryFormat, binary, length)));
25103		#[cfg(feature = "diagnose")]
25104		if let Ok(ret) = ret {
25105			return to_result("glProgramBinary", ret, (self.version_4_1.geterror)());
25106		} else {
25107			return ret
25108		}
25109		#[cfg(not(feature = "diagnose"))]
25110		return ret;
25111	}
25112	#[inline(always)]
25113	fn glProgramParameteri(&self, program: GLuint, pname: GLenum, value: GLint) -> Result<()> {
25114		let ret = process_catch("glProgramParameteri", catch_unwind(||(self.version_4_1.programparameteri)(program, pname, value)));
25115		#[cfg(feature = "diagnose")]
25116		if let Ok(ret) = ret {
25117			return to_result("glProgramParameteri", ret, (self.version_4_1.geterror)());
25118		} else {
25119			return ret
25120		}
25121		#[cfg(not(feature = "diagnose"))]
25122		return ret;
25123	}
25124	#[inline(always)]
25125	fn glUseProgramStages(&self, pipeline: GLuint, stages: GLbitfield, program: GLuint) -> Result<()> {
25126		let ret = process_catch("glUseProgramStages", catch_unwind(||(self.version_4_1.useprogramstages)(pipeline, stages, program)));
25127		#[cfg(feature = "diagnose")]
25128		if let Ok(ret) = ret {
25129			return to_result("glUseProgramStages", ret, (self.version_4_1.geterror)());
25130		} else {
25131			return ret
25132		}
25133		#[cfg(not(feature = "diagnose"))]
25134		return ret;
25135	}
25136	#[inline(always)]
25137	fn glActiveShaderProgram(&self, pipeline: GLuint, program: GLuint) -> Result<()> {
25138		let ret = process_catch("glActiveShaderProgram", catch_unwind(||(self.version_4_1.activeshaderprogram)(pipeline, program)));
25139		#[cfg(feature = "diagnose")]
25140		if let Ok(ret) = ret {
25141			return to_result("glActiveShaderProgram", ret, (self.version_4_1.geterror)());
25142		} else {
25143			return ret
25144		}
25145		#[cfg(not(feature = "diagnose"))]
25146		return ret;
25147	}
25148	#[inline(always)]
25149	fn glCreateShaderProgramv(&self, type_: GLenum, count: GLsizei, strings: *const *const GLchar) -> Result<GLuint> {
25150		let ret = process_catch("glCreateShaderProgramv", catch_unwind(||(self.version_4_1.createshaderprogramv)(type_, count, strings)));
25151		#[cfg(feature = "diagnose")]
25152		if let Ok(ret) = ret {
25153			return to_result("glCreateShaderProgramv", ret, (self.version_4_1.geterror)());
25154		} else {
25155			return ret
25156		}
25157		#[cfg(not(feature = "diagnose"))]
25158		return ret;
25159	}
25160	#[inline(always)]
25161	fn glBindProgramPipeline(&self, pipeline: GLuint) -> Result<()> {
25162		let ret = process_catch("glBindProgramPipeline", catch_unwind(||(self.version_4_1.bindprogrampipeline)(pipeline)));
25163		#[cfg(feature = "diagnose")]
25164		if let Ok(ret) = ret {
25165			return to_result("glBindProgramPipeline", ret, (self.version_4_1.geterror)());
25166		} else {
25167			return ret
25168		}
25169		#[cfg(not(feature = "diagnose"))]
25170		return ret;
25171	}
25172	#[inline(always)]
25173	fn glDeleteProgramPipelines(&self, n: GLsizei, pipelines: *const GLuint) -> Result<()> {
25174		let ret = process_catch("glDeleteProgramPipelines", catch_unwind(||(self.version_4_1.deleteprogrampipelines)(n, pipelines)));
25175		#[cfg(feature = "diagnose")]
25176		if let Ok(ret) = ret {
25177			return to_result("glDeleteProgramPipelines", ret, (self.version_4_1.geterror)());
25178		} else {
25179			return ret
25180		}
25181		#[cfg(not(feature = "diagnose"))]
25182		return ret;
25183	}
25184	#[inline(always)]
25185	fn glGenProgramPipelines(&self, n: GLsizei, pipelines: *mut GLuint) -> Result<()> {
25186		let ret = process_catch("glGenProgramPipelines", catch_unwind(||(self.version_4_1.genprogrampipelines)(n, pipelines)));
25187		#[cfg(feature = "diagnose")]
25188		if let Ok(ret) = ret {
25189			return to_result("glGenProgramPipelines", ret, (self.version_4_1.geterror)());
25190		} else {
25191			return ret
25192		}
25193		#[cfg(not(feature = "diagnose"))]
25194		return ret;
25195	}
25196	#[inline(always)]
25197	fn glIsProgramPipeline(&self, pipeline: GLuint) -> Result<GLboolean> {
25198		let ret = process_catch("glIsProgramPipeline", catch_unwind(||(self.version_4_1.isprogrampipeline)(pipeline)));
25199		#[cfg(feature = "diagnose")]
25200		if let Ok(ret) = ret {
25201			return to_result("glIsProgramPipeline", ret, (self.version_4_1.geterror)());
25202		} else {
25203			return ret
25204		}
25205		#[cfg(not(feature = "diagnose"))]
25206		return ret;
25207	}
25208	#[inline(always)]
25209	fn glGetProgramPipelineiv(&self, pipeline: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
25210		let ret = process_catch("glGetProgramPipelineiv", catch_unwind(||(self.version_4_1.getprogrampipelineiv)(pipeline, pname, params)));
25211		#[cfg(feature = "diagnose")]
25212		if let Ok(ret) = ret {
25213			return to_result("glGetProgramPipelineiv", ret, (self.version_4_1.geterror)());
25214		} else {
25215			return ret
25216		}
25217		#[cfg(not(feature = "diagnose"))]
25218		return ret;
25219	}
25220	#[inline(always)]
25221	fn glProgramUniform1i(&self, program: GLuint, location: GLint, v0: GLint) -> Result<()> {
25222		let ret = process_catch("glProgramUniform1i", catch_unwind(||(self.version_4_1.programuniform1i)(program, location, v0)));
25223		#[cfg(feature = "diagnose")]
25224		if let Ok(ret) = ret {
25225			return to_result("glProgramUniform1i", ret, (self.version_4_1.geterror)());
25226		} else {
25227			return ret
25228		}
25229		#[cfg(not(feature = "diagnose"))]
25230		return ret;
25231	}
25232	#[inline(always)]
25233	fn glProgramUniform1iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
25234		let ret = process_catch("glProgramUniform1iv", catch_unwind(||(self.version_4_1.programuniform1iv)(program, location, count, value)));
25235		#[cfg(feature = "diagnose")]
25236		if let Ok(ret) = ret {
25237			return to_result("glProgramUniform1iv", ret, (self.version_4_1.geterror)());
25238		} else {
25239			return ret
25240		}
25241		#[cfg(not(feature = "diagnose"))]
25242		return ret;
25243	}
25244	#[inline(always)]
25245	fn glProgramUniform1f(&self, program: GLuint, location: GLint, v0: GLfloat) -> Result<()> {
25246		let ret = process_catch("glProgramUniform1f", catch_unwind(||(self.version_4_1.programuniform1f)(program, location, v0)));
25247		#[cfg(feature = "diagnose")]
25248		if let Ok(ret) = ret {
25249			return to_result("glProgramUniform1f", ret, (self.version_4_1.geterror)());
25250		} else {
25251			return ret
25252		}
25253		#[cfg(not(feature = "diagnose"))]
25254		return ret;
25255	}
25256	#[inline(always)]
25257	fn glProgramUniform1fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
25258		let ret = process_catch("glProgramUniform1fv", catch_unwind(||(self.version_4_1.programuniform1fv)(program, location, count, value)));
25259		#[cfg(feature = "diagnose")]
25260		if let Ok(ret) = ret {
25261			return to_result("glProgramUniform1fv", ret, (self.version_4_1.geterror)());
25262		} else {
25263			return ret
25264		}
25265		#[cfg(not(feature = "diagnose"))]
25266		return ret;
25267	}
25268	#[inline(always)]
25269	fn glProgramUniform1d(&self, program: GLuint, location: GLint, v0: GLdouble) -> Result<()> {
25270		let ret = process_catch("glProgramUniform1d", catch_unwind(||(self.version_4_1.programuniform1d)(program, location, v0)));
25271		#[cfg(feature = "diagnose")]
25272		if let Ok(ret) = ret {
25273			return to_result("glProgramUniform1d", ret, (self.version_4_1.geterror)());
25274		} else {
25275			return ret
25276		}
25277		#[cfg(not(feature = "diagnose"))]
25278		return ret;
25279	}
25280	#[inline(always)]
25281	fn glProgramUniform1dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
25282		let ret = process_catch("glProgramUniform1dv", catch_unwind(||(self.version_4_1.programuniform1dv)(program, location, count, value)));
25283		#[cfg(feature = "diagnose")]
25284		if let Ok(ret) = ret {
25285			return to_result("glProgramUniform1dv", ret, (self.version_4_1.geterror)());
25286		} else {
25287			return ret
25288		}
25289		#[cfg(not(feature = "diagnose"))]
25290		return ret;
25291	}
25292	#[inline(always)]
25293	fn glProgramUniform1ui(&self, program: GLuint, location: GLint, v0: GLuint) -> Result<()> {
25294		let ret = process_catch("glProgramUniform1ui", catch_unwind(||(self.version_4_1.programuniform1ui)(program, location, v0)));
25295		#[cfg(feature = "diagnose")]
25296		if let Ok(ret) = ret {
25297			return to_result("glProgramUniform1ui", ret, (self.version_4_1.geterror)());
25298		} else {
25299			return ret
25300		}
25301		#[cfg(not(feature = "diagnose"))]
25302		return ret;
25303	}
25304	#[inline(always)]
25305	fn glProgramUniform1uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
25306		let ret = process_catch("glProgramUniform1uiv", catch_unwind(||(self.version_4_1.programuniform1uiv)(program, location, count, value)));
25307		#[cfg(feature = "diagnose")]
25308		if let Ok(ret) = ret {
25309			return to_result("glProgramUniform1uiv", ret, (self.version_4_1.geterror)());
25310		} else {
25311			return ret
25312		}
25313		#[cfg(not(feature = "diagnose"))]
25314		return ret;
25315	}
25316	#[inline(always)]
25317	fn glProgramUniform2i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint) -> Result<()> {
25318		let ret = process_catch("glProgramUniform2i", catch_unwind(||(self.version_4_1.programuniform2i)(program, location, v0, v1)));
25319		#[cfg(feature = "diagnose")]
25320		if let Ok(ret) = ret {
25321			return to_result("glProgramUniform2i", ret, (self.version_4_1.geterror)());
25322		} else {
25323			return ret
25324		}
25325		#[cfg(not(feature = "diagnose"))]
25326		return ret;
25327	}
25328	#[inline(always)]
25329	fn glProgramUniform2iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
25330		let ret = process_catch("glProgramUniform2iv", catch_unwind(||(self.version_4_1.programuniform2iv)(program, location, count, value)));
25331		#[cfg(feature = "diagnose")]
25332		if let Ok(ret) = ret {
25333			return to_result("glProgramUniform2iv", ret, (self.version_4_1.geterror)());
25334		} else {
25335			return ret
25336		}
25337		#[cfg(not(feature = "diagnose"))]
25338		return ret;
25339	}
25340	#[inline(always)]
25341	fn glProgramUniform2f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat) -> Result<()> {
25342		let ret = process_catch("glProgramUniform2f", catch_unwind(||(self.version_4_1.programuniform2f)(program, location, v0, v1)));
25343		#[cfg(feature = "diagnose")]
25344		if let Ok(ret) = ret {
25345			return to_result("glProgramUniform2f", ret, (self.version_4_1.geterror)());
25346		} else {
25347			return ret
25348		}
25349		#[cfg(not(feature = "diagnose"))]
25350		return ret;
25351	}
25352	#[inline(always)]
25353	fn glProgramUniform2fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
25354		let ret = process_catch("glProgramUniform2fv", catch_unwind(||(self.version_4_1.programuniform2fv)(program, location, count, value)));
25355		#[cfg(feature = "diagnose")]
25356		if let Ok(ret) = ret {
25357			return to_result("glProgramUniform2fv", ret, (self.version_4_1.geterror)());
25358		} else {
25359			return ret
25360		}
25361		#[cfg(not(feature = "diagnose"))]
25362		return ret;
25363	}
25364	#[inline(always)]
25365	fn glProgramUniform2d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble) -> Result<()> {
25366		let ret = process_catch("glProgramUniform2d", catch_unwind(||(self.version_4_1.programuniform2d)(program, location, v0, v1)));
25367		#[cfg(feature = "diagnose")]
25368		if let Ok(ret) = ret {
25369			return to_result("glProgramUniform2d", ret, (self.version_4_1.geterror)());
25370		} else {
25371			return ret
25372		}
25373		#[cfg(not(feature = "diagnose"))]
25374		return ret;
25375	}
25376	#[inline(always)]
25377	fn glProgramUniform2dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
25378		let ret = process_catch("glProgramUniform2dv", catch_unwind(||(self.version_4_1.programuniform2dv)(program, location, count, value)));
25379		#[cfg(feature = "diagnose")]
25380		if let Ok(ret) = ret {
25381			return to_result("glProgramUniform2dv", ret, (self.version_4_1.geterror)());
25382		} else {
25383			return ret
25384		}
25385		#[cfg(not(feature = "diagnose"))]
25386		return ret;
25387	}
25388	#[inline(always)]
25389	fn glProgramUniform2ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint) -> Result<()> {
25390		let ret = process_catch("glProgramUniform2ui", catch_unwind(||(self.version_4_1.programuniform2ui)(program, location, v0, v1)));
25391		#[cfg(feature = "diagnose")]
25392		if let Ok(ret) = ret {
25393			return to_result("glProgramUniform2ui", ret, (self.version_4_1.geterror)());
25394		} else {
25395			return ret
25396		}
25397		#[cfg(not(feature = "diagnose"))]
25398		return ret;
25399	}
25400	#[inline(always)]
25401	fn glProgramUniform2uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
25402		let ret = process_catch("glProgramUniform2uiv", catch_unwind(||(self.version_4_1.programuniform2uiv)(program, location, count, value)));
25403		#[cfg(feature = "diagnose")]
25404		if let Ok(ret) = ret {
25405			return to_result("glProgramUniform2uiv", ret, (self.version_4_1.geterror)());
25406		} else {
25407			return ret
25408		}
25409		#[cfg(not(feature = "diagnose"))]
25410		return ret;
25411	}
25412	#[inline(always)]
25413	fn glProgramUniform3i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint, v2: GLint) -> Result<()> {
25414		let ret = process_catch("glProgramUniform3i", catch_unwind(||(self.version_4_1.programuniform3i)(program, location, v0, v1, v2)));
25415		#[cfg(feature = "diagnose")]
25416		if let Ok(ret) = ret {
25417			return to_result("glProgramUniform3i", ret, (self.version_4_1.geterror)());
25418		} else {
25419			return ret
25420		}
25421		#[cfg(not(feature = "diagnose"))]
25422		return ret;
25423	}
25424	#[inline(always)]
25425	fn glProgramUniform3iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
25426		let ret = process_catch("glProgramUniform3iv", catch_unwind(||(self.version_4_1.programuniform3iv)(program, location, count, value)));
25427		#[cfg(feature = "diagnose")]
25428		if let Ok(ret) = ret {
25429			return to_result("glProgramUniform3iv", ret, (self.version_4_1.geterror)());
25430		} else {
25431			return ret
25432		}
25433		#[cfg(not(feature = "diagnose"))]
25434		return ret;
25435	}
25436	#[inline(always)]
25437	fn glProgramUniform3f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat) -> Result<()> {
25438		let ret = process_catch("glProgramUniform3f", catch_unwind(||(self.version_4_1.programuniform3f)(program, location, v0, v1, v2)));
25439		#[cfg(feature = "diagnose")]
25440		if let Ok(ret) = ret {
25441			return to_result("glProgramUniform3f", ret, (self.version_4_1.geterror)());
25442		} else {
25443			return ret
25444		}
25445		#[cfg(not(feature = "diagnose"))]
25446		return ret;
25447	}
25448	#[inline(always)]
25449	fn glProgramUniform3fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
25450		let ret = process_catch("glProgramUniform3fv", catch_unwind(||(self.version_4_1.programuniform3fv)(program, location, count, value)));
25451		#[cfg(feature = "diagnose")]
25452		if let Ok(ret) = ret {
25453			return to_result("glProgramUniform3fv", ret, (self.version_4_1.geterror)());
25454		} else {
25455			return ret
25456		}
25457		#[cfg(not(feature = "diagnose"))]
25458		return ret;
25459	}
25460	#[inline(always)]
25461	fn glProgramUniform3d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble, v2: GLdouble) -> Result<()> {
25462		let ret = process_catch("glProgramUniform3d", catch_unwind(||(self.version_4_1.programuniform3d)(program, location, v0, v1, v2)));
25463		#[cfg(feature = "diagnose")]
25464		if let Ok(ret) = ret {
25465			return to_result("glProgramUniform3d", ret, (self.version_4_1.geterror)());
25466		} else {
25467			return ret
25468		}
25469		#[cfg(not(feature = "diagnose"))]
25470		return ret;
25471	}
25472	#[inline(always)]
25473	fn glProgramUniform3dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
25474		let ret = process_catch("glProgramUniform3dv", catch_unwind(||(self.version_4_1.programuniform3dv)(program, location, count, value)));
25475		#[cfg(feature = "diagnose")]
25476		if let Ok(ret) = ret {
25477			return to_result("glProgramUniform3dv", ret, (self.version_4_1.geterror)());
25478		} else {
25479			return ret
25480		}
25481		#[cfg(not(feature = "diagnose"))]
25482		return ret;
25483	}
25484	#[inline(always)]
25485	fn glProgramUniform3ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint) -> Result<()> {
25486		let ret = process_catch("glProgramUniform3ui", catch_unwind(||(self.version_4_1.programuniform3ui)(program, location, v0, v1, v2)));
25487		#[cfg(feature = "diagnose")]
25488		if let Ok(ret) = ret {
25489			return to_result("glProgramUniform3ui", ret, (self.version_4_1.geterror)());
25490		} else {
25491			return ret
25492		}
25493		#[cfg(not(feature = "diagnose"))]
25494		return ret;
25495	}
25496	#[inline(always)]
25497	fn glProgramUniform3uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
25498		let ret = process_catch("glProgramUniform3uiv", catch_unwind(||(self.version_4_1.programuniform3uiv)(program, location, count, value)));
25499		#[cfg(feature = "diagnose")]
25500		if let Ok(ret) = ret {
25501			return to_result("glProgramUniform3uiv", ret, (self.version_4_1.geterror)());
25502		} else {
25503			return ret
25504		}
25505		#[cfg(not(feature = "diagnose"))]
25506		return ret;
25507	}
25508	#[inline(always)]
25509	fn glProgramUniform4i(&self, program: GLuint, location: GLint, v0: GLint, v1: GLint, v2: GLint, v3: GLint) -> Result<()> {
25510		let ret = process_catch("glProgramUniform4i", catch_unwind(||(self.version_4_1.programuniform4i)(program, location, v0, v1, v2, v3)));
25511		#[cfg(feature = "diagnose")]
25512		if let Ok(ret) = ret {
25513			return to_result("glProgramUniform4i", ret, (self.version_4_1.geterror)());
25514		} else {
25515			return ret
25516		}
25517		#[cfg(not(feature = "diagnose"))]
25518		return ret;
25519	}
25520	#[inline(always)]
25521	fn glProgramUniform4iv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLint) -> Result<()> {
25522		let ret = process_catch("glProgramUniform4iv", catch_unwind(||(self.version_4_1.programuniform4iv)(program, location, count, value)));
25523		#[cfg(feature = "diagnose")]
25524		if let Ok(ret) = ret {
25525			return to_result("glProgramUniform4iv", ret, (self.version_4_1.geterror)());
25526		} else {
25527			return ret
25528		}
25529		#[cfg(not(feature = "diagnose"))]
25530		return ret;
25531	}
25532	#[inline(always)]
25533	fn glProgramUniform4f(&self, program: GLuint, location: GLint, v0: GLfloat, v1: GLfloat, v2: GLfloat, v3: GLfloat) -> Result<()> {
25534		let ret = process_catch("glProgramUniform4f", catch_unwind(||(self.version_4_1.programuniform4f)(program, location, v0, v1, v2, v3)));
25535		#[cfg(feature = "diagnose")]
25536		if let Ok(ret) = ret {
25537			return to_result("glProgramUniform4f", ret, (self.version_4_1.geterror)());
25538		} else {
25539			return ret
25540		}
25541		#[cfg(not(feature = "diagnose"))]
25542		return ret;
25543	}
25544	#[inline(always)]
25545	fn glProgramUniform4fv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLfloat) -> Result<()> {
25546		let ret = process_catch("glProgramUniform4fv", catch_unwind(||(self.version_4_1.programuniform4fv)(program, location, count, value)));
25547		#[cfg(feature = "diagnose")]
25548		if let Ok(ret) = ret {
25549			return to_result("glProgramUniform4fv", ret, (self.version_4_1.geterror)());
25550		} else {
25551			return ret
25552		}
25553		#[cfg(not(feature = "diagnose"))]
25554		return ret;
25555	}
25556	#[inline(always)]
25557	fn glProgramUniform4d(&self, program: GLuint, location: GLint, v0: GLdouble, v1: GLdouble, v2: GLdouble, v3: GLdouble) -> Result<()> {
25558		let ret = process_catch("glProgramUniform4d", catch_unwind(||(self.version_4_1.programuniform4d)(program, location, v0, v1, v2, v3)));
25559		#[cfg(feature = "diagnose")]
25560		if let Ok(ret) = ret {
25561			return to_result("glProgramUniform4d", ret, (self.version_4_1.geterror)());
25562		} else {
25563			return ret
25564		}
25565		#[cfg(not(feature = "diagnose"))]
25566		return ret;
25567	}
25568	#[inline(always)]
25569	fn glProgramUniform4dv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLdouble) -> Result<()> {
25570		let ret = process_catch("glProgramUniform4dv", catch_unwind(||(self.version_4_1.programuniform4dv)(program, location, count, value)));
25571		#[cfg(feature = "diagnose")]
25572		if let Ok(ret) = ret {
25573			return to_result("glProgramUniform4dv", ret, (self.version_4_1.geterror)());
25574		} else {
25575			return ret
25576		}
25577		#[cfg(not(feature = "diagnose"))]
25578		return ret;
25579	}
25580	#[inline(always)]
25581	fn glProgramUniform4ui(&self, program: GLuint, location: GLint, v0: GLuint, v1: GLuint, v2: GLuint, v3: GLuint) -> Result<()> {
25582		let ret = process_catch("glProgramUniform4ui", catch_unwind(||(self.version_4_1.programuniform4ui)(program, location, v0, v1, v2, v3)));
25583		#[cfg(feature = "diagnose")]
25584		if let Ok(ret) = ret {
25585			return to_result("glProgramUniform4ui", ret, (self.version_4_1.geterror)());
25586		} else {
25587			return ret
25588		}
25589		#[cfg(not(feature = "diagnose"))]
25590		return ret;
25591	}
25592	#[inline(always)]
25593	fn glProgramUniform4uiv(&self, program: GLuint, location: GLint, count: GLsizei, value: *const GLuint) -> Result<()> {
25594		let ret = process_catch("glProgramUniform4uiv", catch_unwind(||(self.version_4_1.programuniform4uiv)(program, location, count, value)));
25595		#[cfg(feature = "diagnose")]
25596		if let Ok(ret) = ret {
25597			return to_result("glProgramUniform4uiv", ret, (self.version_4_1.geterror)());
25598		} else {
25599			return ret
25600		}
25601		#[cfg(not(feature = "diagnose"))]
25602		return ret;
25603	}
25604	#[inline(always)]
25605	fn glProgramUniformMatrix2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25606		let ret = process_catch("glProgramUniformMatrix2fv", catch_unwind(||(self.version_4_1.programuniformmatrix2fv)(program, location, count, transpose, value)));
25607		#[cfg(feature = "diagnose")]
25608		if let Ok(ret) = ret {
25609			return to_result("glProgramUniformMatrix2fv", ret, (self.version_4_1.geterror)());
25610		} else {
25611			return ret
25612		}
25613		#[cfg(not(feature = "diagnose"))]
25614		return ret;
25615	}
25616	#[inline(always)]
25617	fn glProgramUniformMatrix3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25618		let ret = process_catch("glProgramUniformMatrix3fv", catch_unwind(||(self.version_4_1.programuniformmatrix3fv)(program, location, count, transpose, value)));
25619		#[cfg(feature = "diagnose")]
25620		if let Ok(ret) = ret {
25621			return to_result("glProgramUniformMatrix3fv", ret, (self.version_4_1.geterror)());
25622		} else {
25623			return ret
25624		}
25625		#[cfg(not(feature = "diagnose"))]
25626		return ret;
25627	}
25628	#[inline(always)]
25629	fn glProgramUniformMatrix4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25630		let ret = process_catch("glProgramUniformMatrix4fv", catch_unwind(||(self.version_4_1.programuniformmatrix4fv)(program, location, count, transpose, value)));
25631		#[cfg(feature = "diagnose")]
25632		if let Ok(ret) = ret {
25633			return to_result("glProgramUniformMatrix4fv", ret, (self.version_4_1.geterror)());
25634		} else {
25635			return ret
25636		}
25637		#[cfg(not(feature = "diagnose"))]
25638		return ret;
25639	}
25640	#[inline(always)]
25641	fn glProgramUniformMatrix2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25642		let ret = process_catch("glProgramUniformMatrix2dv", catch_unwind(||(self.version_4_1.programuniformmatrix2dv)(program, location, count, transpose, value)));
25643		#[cfg(feature = "diagnose")]
25644		if let Ok(ret) = ret {
25645			return to_result("glProgramUniformMatrix2dv", ret, (self.version_4_1.geterror)());
25646		} else {
25647			return ret
25648		}
25649		#[cfg(not(feature = "diagnose"))]
25650		return ret;
25651	}
25652	#[inline(always)]
25653	fn glProgramUniformMatrix3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25654		let ret = process_catch("glProgramUniformMatrix3dv", catch_unwind(||(self.version_4_1.programuniformmatrix3dv)(program, location, count, transpose, value)));
25655		#[cfg(feature = "diagnose")]
25656		if let Ok(ret) = ret {
25657			return to_result("glProgramUniformMatrix3dv", ret, (self.version_4_1.geterror)());
25658		} else {
25659			return ret
25660		}
25661		#[cfg(not(feature = "diagnose"))]
25662		return ret;
25663	}
25664	#[inline(always)]
25665	fn glProgramUniformMatrix4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25666		let ret = process_catch("glProgramUniformMatrix4dv", catch_unwind(||(self.version_4_1.programuniformmatrix4dv)(program, location, count, transpose, value)));
25667		#[cfg(feature = "diagnose")]
25668		if let Ok(ret) = ret {
25669			return to_result("glProgramUniformMatrix4dv", ret, (self.version_4_1.geterror)());
25670		} else {
25671			return ret
25672		}
25673		#[cfg(not(feature = "diagnose"))]
25674		return ret;
25675	}
25676	#[inline(always)]
25677	fn glProgramUniformMatrix2x3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25678		let ret = process_catch("glProgramUniformMatrix2x3fv", catch_unwind(||(self.version_4_1.programuniformmatrix2x3fv)(program, location, count, transpose, value)));
25679		#[cfg(feature = "diagnose")]
25680		if let Ok(ret) = ret {
25681			return to_result("glProgramUniformMatrix2x3fv", ret, (self.version_4_1.geterror)());
25682		} else {
25683			return ret
25684		}
25685		#[cfg(not(feature = "diagnose"))]
25686		return ret;
25687	}
25688	#[inline(always)]
25689	fn glProgramUniformMatrix3x2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25690		let ret = process_catch("glProgramUniformMatrix3x2fv", catch_unwind(||(self.version_4_1.programuniformmatrix3x2fv)(program, location, count, transpose, value)));
25691		#[cfg(feature = "diagnose")]
25692		if let Ok(ret) = ret {
25693			return to_result("glProgramUniformMatrix3x2fv", ret, (self.version_4_1.geterror)());
25694		} else {
25695			return ret
25696		}
25697		#[cfg(not(feature = "diagnose"))]
25698		return ret;
25699	}
25700	#[inline(always)]
25701	fn glProgramUniformMatrix2x4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25702		let ret = process_catch("glProgramUniformMatrix2x4fv", catch_unwind(||(self.version_4_1.programuniformmatrix2x4fv)(program, location, count, transpose, value)));
25703		#[cfg(feature = "diagnose")]
25704		if let Ok(ret) = ret {
25705			return to_result("glProgramUniformMatrix2x4fv", ret, (self.version_4_1.geterror)());
25706		} else {
25707			return ret
25708		}
25709		#[cfg(not(feature = "diagnose"))]
25710		return ret;
25711	}
25712	#[inline(always)]
25713	fn glProgramUniformMatrix4x2fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25714		let ret = process_catch("glProgramUniformMatrix4x2fv", catch_unwind(||(self.version_4_1.programuniformmatrix4x2fv)(program, location, count, transpose, value)));
25715		#[cfg(feature = "diagnose")]
25716		if let Ok(ret) = ret {
25717			return to_result("glProgramUniformMatrix4x2fv", ret, (self.version_4_1.geterror)());
25718		} else {
25719			return ret
25720		}
25721		#[cfg(not(feature = "diagnose"))]
25722		return ret;
25723	}
25724	#[inline(always)]
25725	fn glProgramUniformMatrix3x4fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25726		let ret = process_catch("glProgramUniformMatrix3x4fv", catch_unwind(||(self.version_4_1.programuniformmatrix3x4fv)(program, location, count, transpose, value)));
25727		#[cfg(feature = "diagnose")]
25728		if let Ok(ret) = ret {
25729			return to_result("glProgramUniformMatrix3x4fv", ret, (self.version_4_1.geterror)());
25730		} else {
25731			return ret
25732		}
25733		#[cfg(not(feature = "diagnose"))]
25734		return ret;
25735	}
25736	#[inline(always)]
25737	fn glProgramUniformMatrix4x3fv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLfloat) -> Result<()> {
25738		let ret = process_catch("glProgramUniformMatrix4x3fv", catch_unwind(||(self.version_4_1.programuniformmatrix4x3fv)(program, location, count, transpose, value)));
25739		#[cfg(feature = "diagnose")]
25740		if let Ok(ret) = ret {
25741			return to_result("glProgramUniformMatrix4x3fv", ret, (self.version_4_1.geterror)());
25742		} else {
25743			return ret
25744		}
25745		#[cfg(not(feature = "diagnose"))]
25746		return ret;
25747	}
25748	#[inline(always)]
25749	fn glProgramUniformMatrix2x3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25750		let ret = process_catch("glProgramUniformMatrix2x3dv", catch_unwind(||(self.version_4_1.programuniformmatrix2x3dv)(program, location, count, transpose, value)));
25751		#[cfg(feature = "diagnose")]
25752		if let Ok(ret) = ret {
25753			return to_result("glProgramUniformMatrix2x3dv", ret, (self.version_4_1.geterror)());
25754		} else {
25755			return ret
25756		}
25757		#[cfg(not(feature = "diagnose"))]
25758		return ret;
25759	}
25760	#[inline(always)]
25761	fn glProgramUniformMatrix3x2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25762		let ret = process_catch("glProgramUniformMatrix3x2dv", catch_unwind(||(self.version_4_1.programuniformmatrix3x2dv)(program, location, count, transpose, value)));
25763		#[cfg(feature = "diagnose")]
25764		if let Ok(ret) = ret {
25765			return to_result("glProgramUniformMatrix3x2dv", ret, (self.version_4_1.geterror)());
25766		} else {
25767			return ret
25768		}
25769		#[cfg(not(feature = "diagnose"))]
25770		return ret;
25771	}
25772	#[inline(always)]
25773	fn glProgramUniformMatrix2x4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25774		let ret = process_catch("glProgramUniformMatrix2x4dv", catch_unwind(||(self.version_4_1.programuniformmatrix2x4dv)(program, location, count, transpose, value)));
25775		#[cfg(feature = "diagnose")]
25776		if let Ok(ret) = ret {
25777			return to_result("glProgramUniformMatrix2x4dv", ret, (self.version_4_1.geterror)());
25778		} else {
25779			return ret
25780		}
25781		#[cfg(not(feature = "diagnose"))]
25782		return ret;
25783	}
25784	#[inline(always)]
25785	fn glProgramUniformMatrix4x2dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25786		let ret = process_catch("glProgramUniformMatrix4x2dv", catch_unwind(||(self.version_4_1.programuniformmatrix4x2dv)(program, location, count, transpose, value)));
25787		#[cfg(feature = "diagnose")]
25788		if let Ok(ret) = ret {
25789			return to_result("glProgramUniformMatrix4x2dv", ret, (self.version_4_1.geterror)());
25790		} else {
25791			return ret
25792		}
25793		#[cfg(not(feature = "diagnose"))]
25794		return ret;
25795	}
25796	#[inline(always)]
25797	fn glProgramUniformMatrix3x4dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25798		let ret = process_catch("glProgramUniformMatrix3x4dv", catch_unwind(||(self.version_4_1.programuniformmatrix3x4dv)(program, location, count, transpose, value)));
25799		#[cfg(feature = "diagnose")]
25800		if let Ok(ret) = ret {
25801			return to_result("glProgramUniformMatrix3x4dv", ret, (self.version_4_1.geterror)());
25802		} else {
25803			return ret
25804		}
25805		#[cfg(not(feature = "diagnose"))]
25806		return ret;
25807	}
25808	#[inline(always)]
25809	fn glProgramUniformMatrix4x3dv(&self, program: GLuint, location: GLint, count: GLsizei, transpose: GLboolean, value: *const GLdouble) -> Result<()> {
25810		let ret = process_catch("glProgramUniformMatrix4x3dv", catch_unwind(||(self.version_4_1.programuniformmatrix4x3dv)(program, location, count, transpose, value)));
25811		#[cfg(feature = "diagnose")]
25812		if let Ok(ret) = ret {
25813			return to_result("glProgramUniformMatrix4x3dv", ret, (self.version_4_1.geterror)());
25814		} else {
25815			return ret
25816		}
25817		#[cfg(not(feature = "diagnose"))]
25818		return ret;
25819	}
25820	#[inline(always)]
25821	fn glValidateProgramPipeline(&self, pipeline: GLuint) -> Result<()> {
25822		let ret = process_catch("glValidateProgramPipeline", catch_unwind(||(self.version_4_1.validateprogrampipeline)(pipeline)));
25823		#[cfg(feature = "diagnose")]
25824		if let Ok(ret) = ret {
25825			return to_result("glValidateProgramPipeline", ret, (self.version_4_1.geterror)());
25826		} else {
25827			return ret
25828		}
25829		#[cfg(not(feature = "diagnose"))]
25830		return ret;
25831	}
25832	#[inline(always)]
25833	fn glGetProgramPipelineInfoLog(&self, pipeline: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> Result<()> {
25834		let ret = process_catch("glGetProgramPipelineInfoLog", catch_unwind(||(self.version_4_1.getprogrampipelineinfolog)(pipeline, bufSize, length, infoLog)));
25835		#[cfg(feature = "diagnose")]
25836		if let Ok(ret) = ret {
25837			return to_result("glGetProgramPipelineInfoLog", ret, (self.version_4_1.geterror)());
25838		} else {
25839			return ret
25840		}
25841		#[cfg(not(feature = "diagnose"))]
25842		return ret;
25843	}
25844	#[inline(always)]
25845	fn glVertexAttribL1d(&self, index: GLuint, x: GLdouble) -> Result<()> {
25846		let ret = process_catch("glVertexAttribL1d", catch_unwind(||(self.version_4_1.vertexattribl1d)(index, x)));
25847		#[cfg(feature = "diagnose")]
25848		if let Ok(ret) = ret {
25849			return to_result("glVertexAttribL1d", ret, (self.version_4_1.geterror)());
25850		} else {
25851			return ret
25852		}
25853		#[cfg(not(feature = "diagnose"))]
25854		return ret;
25855	}
25856	#[inline(always)]
25857	fn glVertexAttribL2d(&self, index: GLuint, x: GLdouble, y: GLdouble) -> Result<()> {
25858		let ret = process_catch("glVertexAttribL2d", catch_unwind(||(self.version_4_1.vertexattribl2d)(index, x, y)));
25859		#[cfg(feature = "diagnose")]
25860		if let Ok(ret) = ret {
25861			return to_result("glVertexAttribL2d", ret, (self.version_4_1.geterror)());
25862		} else {
25863			return ret
25864		}
25865		#[cfg(not(feature = "diagnose"))]
25866		return ret;
25867	}
25868	#[inline(always)]
25869	fn glVertexAttribL3d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble) -> Result<()> {
25870		let ret = process_catch("glVertexAttribL3d", catch_unwind(||(self.version_4_1.vertexattribl3d)(index, x, y, z)));
25871		#[cfg(feature = "diagnose")]
25872		if let Ok(ret) = ret {
25873			return to_result("glVertexAttribL3d", ret, (self.version_4_1.geterror)());
25874		} else {
25875			return ret
25876		}
25877		#[cfg(not(feature = "diagnose"))]
25878		return ret;
25879	}
25880	#[inline(always)]
25881	fn glVertexAttribL4d(&self, index: GLuint, x: GLdouble, y: GLdouble, z: GLdouble, w: GLdouble) -> Result<()> {
25882		let ret = process_catch("glVertexAttribL4d", catch_unwind(||(self.version_4_1.vertexattribl4d)(index, x, y, z, w)));
25883		#[cfg(feature = "diagnose")]
25884		if let Ok(ret) = ret {
25885			return to_result("glVertexAttribL4d", ret, (self.version_4_1.geterror)());
25886		} else {
25887			return ret
25888		}
25889		#[cfg(not(feature = "diagnose"))]
25890		return ret;
25891	}
25892	#[inline(always)]
25893	fn glVertexAttribL1dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
25894		let ret = process_catch("glVertexAttribL1dv", catch_unwind(||(self.version_4_1.vertexattribl1dv)(index, v)));
25895		#[cfg(feature = "diagnose")]
25896		if let Ok(ret) = ret {
25897			return to_result("glVertexAttribL1dv", ret, (self.version_4_1.geterror)());
25898		} else {
25899			return ret
25900		}
25901		#[cfg(not(feature = "diagnose"))]
25902		return ret;
25903	}
25904	#[inline(always)]
25905	fn glVertexAttribL2dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
25906		let ret = process_catch("glVertexAttribL2dv", catch_unwind(||(self.version_4_1.vertexattribl2dv)(index, v)));
25907		#[cfg(feature = "diagnose")]
25908		if let Ok(ret) = ret {
25909			return to_result("glVertexAttribL2dv", ret, (self.version_4_1.geterror)());
25910		} else {
25911			return ret
25912		}
25913		#[cfg(not(feature = "diagnose"))]
25914		return ret;
25915	}
25916	#[inline(always)]
25917	fn glVertexAttribL3dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
25918		let ret = process_catch("glVertexAttribL3dv", catch_unwind(||(self.version_4_1.vertexattribl3dv)(index, v)));
25919		#[cfg(feature = "diagnose")]
25920		if let Ok(ret) = ret {
25921			return to_result("glVertexAttribL3dv", ret, (self.version_4_1.geterror)());
25922		} else {
25923			return ret
25924		}
25925		#[cfg(not(feature = "diagnose"))]
25926		return ret;
25927	}
25928	#[inline(always)]
25929	fn glVertexAttribL4dv(&self, index: GLuint, v: *const GLdouble) -> Result<()> {
25930		let ret = process_catch("glVertexAttribL4dv", catch_unwind(||(self.version_4_1.vertexattribl4dv)(index, v)));
25931		#[cfg(feature = "diagnose")]
25932		if let Ok(ret) = ret {
25933			return to_result("glVertexAttribL4dv", ret, (self.version_4_1.geterror)());
25934		} else {
25935			return ret
25936		}
25937		#[cfg(not(feature = "diagnose"))]
25938		return ret;
25939	}
25940	#[inline(always)]
25941	fn glVertexAttribLPointer(&self, index: GLuint, size: GLint, type_: GLenum, stride: GLsizei, pointer: *const c_void) -> Result<()> {
25942		let ret = process_catch("glVertexAttribLPointer", catch_unwind(||(self.version_4_1.vertexattriblpointer)(index, size, type_, stride, pointer)));
25943		#[cfg(feature = "diagnose")]
25944		if let Ok(ret) = ret {
25945			return to_result("glVertexAttribLPointer", ret, (self.version_4_1.geterror)());
25946		} else {
25947			return ret
25948		}
25949		#[cfg(not(feature = "diagnose"))]
25950		return ret;
25951	}
25952	#[inline(always)]
25953	fn glGetVertexAttribLdv(&self, index: GLuint, pname: GLenum, params: *mut GLdouble) -> Result<()> {
25954		let ret = process_catch("glGetVertexAttribLdv", catch_unwind(||(self.version_4_1.getvertexattribldv)(index, pname, params)));
25955		#[cfg(feature = "diagnose")]
25956		if let Ok(ret) = ret {
25957			return to_result("glGetVertexAttribLdv", ret, (self.version_4_1.geterror)());
25958		} else {
25959			return ret
25960		}
25961		#[cfg(not(feature = "diagnose"))]
25962		return ret;
25963	}
25964	#[inline(always)]
25965	fn glViewportArrayv(&self, first: GLuint, count: GLsizei, v: *const GLfloat) -> Result<()> {
25966		let ret = process_catch("glViewportArrayv", catch_unwind(||(self.version_4_1.viewportarrayv)(first, count, v)));
25967		#[cfg(feature = "diagnose")]
25968		if let Ok(ret) = ret {
25969			return to_result("glViewportArrayv", ret, (self.version_4_1.geterror)());
25970		} else {
25971			return ret
25972		}
25973		#[cfg(not(feature = "diagnose"))]
25974		return ret;
25975	}
25976	#[inline(always)]
25977	fn glViewportIndexedf(&self, index: GLuint, x: GLfloat, y: GLfloat, w: GLfloat, h: GLfloat) -> Result<()> {
25978		let ret = process_catch("glViewportIndexedf", catch_unwind(||(self.version_4_1.viewportindexedf)(index, x, y, w, h)));
25979		#[cfg(feature = "diagnose")]
25980		if let Ok(ret) = ret {
25981			return to_result("glViewportIndexedf", ret, (self.version_4_1.geterror)());
25982		} else {
25983			return ret
25984		}
25985		#[cfg(not(feature = "diagnose"))]
25986		return ret;
25987	}
25988	#[inline(always)]
25989	fn glViewportIndexedfv(&self, index: GLuint, v: *const GLfloat) -> Result<()> {
25990		let ret = process_catch("glViewportIndexedfv", catch_unwind(||(self.version_4_1.viewportindexedfv)(index, v)));
25991		#[cfg(feature = "diagnose")]
25992		if let Ok(ret) = ret {
25993			return to_result("glViewportIndexedfv", ret, (self.version_4_1.geterror)());
25994		} else {
25995			return ret
25996		}
25997		#[cfg(not(feature = "diagnose"))]
25998		return ret;
25999	}
26000	#[inline(always)]
26001	fn glScissorArrayv(&self, first: GLuint, count: GLsizei, v: *const GLint) -> Result<()> {
26002		let ret = process_catch("glScissorArrayv", catch_unwind(||(self.version_4_1.scissorarrayv)(first, count, v)));
26003		#[cfg(feature = "diagnose")]
26004		if let Ok(ret) = ret {
26005			return to_result("glScissorArrayv", ret, (self.version_4_1.geterror)());
26006		} else {
26007			return ret
26008		}
26009		#[cfg(not(feature = "diagnose"))]
26010		return ret;
26011	}
26012	#[inline(always)]
26013	fn glScissorIndexed(&self, index: GLuint, left: GLint, bottom: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
26014		let ret = process_catch("glScissorIndexed", catch_unwind(||(self.version_4_1.scissorindexed)(index, left, bottom, width, height)));
26015		#[cfg(feature = "diagnose")]
26016		if let Ok(ret) = ret {
26017			return to_result("glScissorIndexed", ret, (self.version_4_1.geterror)());
26018		} else {
26019			return ret
26020		}
26021		#[cfg(not(feature = "diagnose"))]
26022		return ret;
26023	}
26024	#[inline(always)]
26025	fn glScissorIndexedv(&self, index: GLuint, v: *const GLint) -> Result<()> {
26026		let ret = process_catch("glScissorIndexedv", catch_unwind(||(self.version_4_1.scissorindexedv)(index, v)));
26027		#[cfg(feature = "diagnose")]
26028		if let Ok(ret) = ret {
26029			return to_result("glScissorIndexedv", ret, (self.version_4_1.geterror)());
26030		} else {
26031			return ret
26032		}
26033		#[cfg(not(feature = "diagnose"))]
26034		return ret;
26035	}
26036	#[inline(always)]
26037	fn glDepthRangeArrayv(&self, first: GLuint, count: GLsizei, v: *const GLdouble) -> Result<()> {
26038		let ret = process_catch("glDepthRangeArrayv", catch_unwind(||(self.version_4_1.depthrangearrayv)(first, count, v)));
26039		#[cfg(feature = "diagnose")]
26040		if let Ok(ret) = ret {
26041			return to_result("glDepthRangeArrayv", ret, (self.version_4_1.geterror)());
26042		} else {
26043			return ret
26044		}
26045		#[cfg(not(feature = "diagnose"))]
26046		return ret;
26047	}
26048	#[inline(always)]
26049	fn glDepthRangeIndexed(&self, index: GLuint, n: GLdouble, f: GLdouble) -> Result<()> {
26050		let ret = process_catch("glDepthRangeIndexed", catch_unwind(||(self.version_4_1.depthrangeindexed)(index, n, f)));
26051		#[cfg(feature = "diagnose")]
26052		if let Ok(ret) = ret {
26053			return to_result("glDepthRangeIndexed", ret, (self.version_4_1.geterror)());
26054		} else {
26055			return ret
26056		}
26057		#[cfg(not(feature = "diagnose"))]
26058		return ret;
26059	}
26060	#[inline(always)]
26061	fn glGetFloati_v(&self, target: GLenum, index: GLuint, data: *mut GLfloat) -> Result<()> {
26062		let ret = process_catch("glGetFloati_v", catch_unwind(||(self.version_4_1.getfloati_v)(target, index, data)));
26063		#[cfg(feature = "diagnose")]
26064		if let Ok(ret) = ret {
26065			return to_result("glGetFloati_v", ret, (self.version_4_1.geterror)());
26066		} else {
26067			return ret
26068		}
26069		#[cfg(not(feature = "diagnose"))]
26070		return ret;
26071	}
26072	#[inline(always)]
26073	fn glGetDoublei_v(&self, target: GLenum, index: GLuint, data: *mut GLdouble) -> Result<()> {
26074		let ret = process_catch("glGetDoublei_v", catch_unwind(||(self.version_4_1.getdoublei_v)(target, index, data)));
26075		#[cfg(feature = "diagnose")]
26076		if let Ok(ret) = ret {
26077			return to_result("glGetDoublei_v", ret, (self.version_4_1.geterror)());
26078		} else {
26079			return ret
26080		}
26081		#[cfg(not(feature = "diagnose"))]
26082		return ret;
26083	}
26084}
26085
26086impl GL_4_2 for GLCore {
26087	#[inline(always)]
26088	fn glGetError(&self) -> GLenum {
26089		(self.version_4_2.geterror)()
26090	}
26091	#[inline(always)]
26092	fn glDrawArraysInstancedBaseInstance(&self, mode: GLenum, first: GLint, count: GLsizei, instancecount: GLsizei, baseinstance: GLuint) -> Result<()> {
26093		let ret = process_catch("glDrawArraysInstancedBaseInstance", catch_unwind(||(self.version_4_2.drawarraysinstancedbaseinstance)(mode, first, count, instancecount, baseinstance)));
26094		#[cfg(feature = "diagnose")]
26095		if let Ok(ret) = ret {
26096			return to_result("glDrawArraysInstancedBaseInstance", ret, (self.version_4_2.geterror)());
26097		} else {
26098			return ret
26099		}
26100		#[cfg(not(feature = "diagnose"))]
26101		return ret;
26102	}
26103	#[inline(always)]
26104	fn glDrawElementsInstancedBaseInstance(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, baseinstance: GLuint) -> Result<()> {
26105		let ret = process_catch("glDrawElementsInstancedBaseInstance", catch_unwind(||(self.version_4_2.drawelementsinstancedbaseinstance)(mode, count, type_, indices, instancecount, baseinstance)));
26106		#[cfg(feature = "diagnose")]
26107		if let Ok(ret) = ret {
26108			return to_result("glDrawElementsInstancedBaseInstance", ret, (self.version_4_2.geterror)());
26109		} else {
26110			return ret
26111		}
26112		#[cfg(not(feature = "diagnose"))]
26113		return ret;
26114	}
26115	#[inline(always)]
26116	fn glDrawElementsInstancedBaseVertexBaseInstance(&self, mode: GLenum, count: GLsizei, type_: GLenum, indices: *const c_void, instancecount: GLsizei, basevertex: GLint, baseinstance: GLuint) -> Result<()> {
26117		let ret = process_catch("glDrawElementsInstancedBaseVertexBaseInstance", catch_unwind(||(self.version_4_2.drawelementsinstancedbasevertexbaseinstance)(mode, count, type_, indices, instancecount, basevertex, baseinstance)));
26118		#[cfg(feature = "diagnose")]
26119		if let Ok(ret) = ret {
26120			return to_result("glDrawElementsInstancedBaseVertexBaseInstance", ret, (self.version_4_2.geterror)());
26121		} else {
26122			return ret
26123		}
26124		#[cfg(not(feature = "diagnose"))]
26125		return ret;
26126	}
26127	#[inline(always)]
26128	fn glGetInternalformativ(&self, target: GLenum, internalformat: GLenum, pname: GLenum, count: GLsizei, params: *mut GLint) -> Result<()> {
26129		let ret = process_catch("glGetInternalformativ", catch_unwind(||(self.version_4_2.getinternalformativ)(target, internalformat, pname, count, params)));
26130		#[cfg(feature = "diagnose")]
26131		if let Ok(ret) = ret {
26132			return to_result("glGetInternalformativ", ret, (self.version_4_2.geterror)());
26133		} else {
26134			return ret
26135		}
26136		#[cfg(not(feature = "diagnose"))]
26137		return ret;
26138	}
26139	#[inline(always)]
26140	fn glGetActiveAtomicCounterBufferiv(&self, program: GLuint, bufferIndex: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
26141		let ret = process_catch("glGetActiveAtomicCounterBufferiv", catch_unwind(||(self.version_4_2.getactiveatomiccounterbufferiv)(program, bufferIndex, pname, params)));
26142		#[cfg(feature = "diagnose")]
26143		if let Ok(ret) = ret {
26144			return to_result("glGetActiveAtomicCounterBufferiv", ret, (self.version_4_2.geterror)());
26145		} else {
26146			return ret
26147		}
26148		#[cfg(not(feature = "diagnose"))]
26149		return ret;
26150	}
26151	#[inline(always)]
26152	fn glBindImageTexture(&self, unit: GLuint, texture: GLuint, level: GLint, layered: GLboolean, layer: GLint, access: GLenum, format: GLenum) -> Result<()> {
26153		let ret = process_catch("glBindImageTexture", catch_unwind(||(self.version_4_2.bindimagetexture)(unit, texture, level, layered, layer, access, format)));
26154		#[cfg(feature = "diagnose")]
26155		if let Ok(ret) = ret {
26156			return to_result("glBindImageTexture", ret, (self.version_4_2.geterror)());
26157		} else {
26158			return ret
26159		}
26160		#[cfg(not(feature = "diagnose"))]
26161		return ret;
26162	}
26163	#[inline(always)]
26164	fn glMemoryBarrier(&self, barriers: GLbitfield) -> Result<()> {
26165		let ret = process_catch("glMemoryBarrier", catch_unwind(||(self.version_4_2.memorybarrier)(barriers)));
26166		#[cfg(feature = "diagnose")]
26167		if let Ok(ret) = ret {
26168			return to_result("glMemoryBarrier", ret, (self.version_4_2.geterror)());
26169		} else {
26170			return ret
26171		}
26172		#[cfg(not(feature = "diagnose"))]
26173		return ret;
26174	}
26175	#[inline(always)]
26176	fn glTexStorage1D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei) -> Result<()> {
26177		let ret = process_catch("glTexStorage1D", catch_unwind(||(self.version_4_2.texstorage1d)(target, levels, internalformat, width)));
26178		#[cfg(feature = "diagnose")]
26179		if let Ok(ret) = ret {
26180			return to_result("glTexStorage1D", ret, (self.version_4_2.geterror)());
26181		} else {
26182			return ret
26183		}
26184		#[cfg(not(feature = "diagnose"))]
26185		return ret;
26186	}
26187	#[inline(always)]
26188	fn glTexStorage2D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
26189		let ret = process_catch("glTexStorage2D", catch_unwind(||(self.version_4_2.texstorage2d)(target, levels, internalformat, width, height)));
26190		#[cfg(feature = "diagnose")]
26191		if let Ok(ret) = ret {
26192			return to_result("glTexStorage2D", ret, (self.version_4_2.geterror)());
26193		} else {
26194			return ret
26195		}
26196		#[cfg(not(feature = "diagnose"))]
26197		return ret;
26198	}
26199	#[inline(always)]
26200	fn glTexStorage3D(&self, target: GLenum, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()> {
26201		let ret = process_catch("glTexStorage3D", catch_unwind(||(self.version_4_2.texstorage3d)(target, levels, internalformat, width, height, depth)));
26202		#[cfg(feature = "diagnose")]
26203		if let Ok(ret) = ret {
26204			return to_result("glTexStorage3D", ret, (self.version_4_2.geterror)());
26205		} else {
26206			return ret
26207		}
26208		#[cfg(not(feature = "diagnose"))]
26209		return ret;
26210	}
26211	#[inline(always)]
26212	fn glDrawTransformFeedbackInstanced(&self, mode: GLenum, id: GLuint, instancecount: GLsizei) -> Result<()> {
26213		let ret = process_catch("glDrawTransformFeedbackInstanced", catch_unwind(||(self.version_4_2.drawtransformfeedbackinstanced)(mode, id, instancecount)));
26214		#[cfg(feature = "diagnose")]
26215		if let Ok(ret) = ret {
26216			return to_result("glDrawTransformFeedbackInstanced", ret, (self.version_4_2.geterror)());
26217		} else {
26218			return ret
26219		}
26220		#[cfg(not(feature = "diagnose"))]
26221		return ret;
26222	}
26223	#[inline(always)]
26224	fn glDrawTransformFeedbackStreamInstanced(&self, mode: GLenum, id: GLuint, stream: GLuint, instancecount: GLsizei) -> Result<()> {
26225		let ret = process_catch("glDrawTransformFeedbackStreamInstanced", catch_unwind(||(self.version_4_2.drawtransformfeedbackstreaminstanced)(mode, id, stream, instancecount)));
26226		#[cfg(feature = "diagnose")]
26227		if let Ok(ret) = ret {
26228			return to_result("glDrawTransformFeedbackStreamInstanced", ret, (self.version_4_2.geterror)());
26229		} else {
26230			return ret
26231		}
26232		#[cfg(not(feature = "diagnose"))]
26233		return ret;
26234	}
26235}
26236
26237impl GL_4_3 for GLCore {
26238	#[inline(always)]
26239	fn glGetError(&self) -> GLenum {
26240		(self.version_4_3.geterror)()
26241	}
26242	#[inline(always)]
26243	fn glClearBufferData(&self, target: GLenum, internalformat: GLenum, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
26244		let ret = process_catch("glClearBufferData", catch_unwind(||(self.version_4_3.clearbufferdata)(target, internalformat, format, type_, data)));
26245		#[cfg(feature = "diagnose")]
26246		if let Ok(ret) = ret {
26247			return to_result("glClearBufferData", ret, (self.version_4_3.geterror)());
26248		} else {
26249			return ret
26250		}
26251		#[cfg(not(feature = "diagnose"))]
26252		return ret;
26253	}
26254	#[inline(always)]
26255	fn glClearBufferSubData(&self, target: GLenum, internalformat: GLenum, offset: GLintptr, size: GLsizeiptr, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
26256		let ret = process_catch("glClearBufferSubData", catch_unwind(||(self.version_4_3.clearbuffersubdata)(target, internalformat, offset, size, format, type_, data)));
26257		#[cfg(feature = "diagnose")]
26258		if let Ok(ret) = ret {
26259			return to_result("glClearBufferSubData", ret, (self.version_4_3.geterror)());
26260		} else {
26261			return ret
26262		}
26263		#[cfg(not(feature = "diagnose"))]
26264		return ret;
26265	}
26266	#[inline(always)]
26267	fn glDispatchCompute(&self, num_groups_x: GLuint, num_groups_y: GLuint, num_groups_z: GLuint) -> Result<()> {
26268		let ret = process_catch("glDispatchCompute", catch_unwind(||(self.version_4_3.dispatchcompute)(num_groups_x, num_groups_y, num_groups_z)));
26269		#[cfg(feature = "diagnose")]
26270		if let Ok(ret) = ret {
26271			return to_result("glDispatchCompute", ret, (self.version_4_3.geterror)());
26272		} else {
26273			return ret
26274		}
26275		#[cfg(not(feature = "diagnose"))]
26276		return ret;
26277	}
26278	#[inline(always)]
26279	fn glDispatchComputeIndirect(&self, indirect: GLintptr) -> Result<()> {
26280		let ret = process_catch("glDispatchComputeIndirect", catch_unwind(||(self.version_4_3.dispatchcomputeindirect)(indirect)));
26281		#[cfg(feature = "diagnose")]
26282		if let Ok(ret) = ret {
26283			return to_result("glDispatchComputeIndirect", ret, (self.version_4_3.geterror)());
26284		} else {
26285			return ret
26286		}
26287		#[cfg(not(feature = "diagnose"))]
26288		return ret;
26289	}
26290	#[inline(always)]
26291	fn glCopyImageSubData(&self, srcName: GLuint, srcTarget: GLenum, srcLevel: GLint, srcX: GLint, srcY: GLint, srcZ: GLint, dstName: GLuint, dstTarget: GLenum, dstLevel: GLint, dstX: GLint, dstY: GLint, dstZ: GLint, srcWidth: GLsizei, srcHeight: GLsizei, srcDepth: GLsizei) -> Result<()> {
26292		let ret = process_catch("glCopyImageSubData", catch_unwind(||(self.version_4_3.copyimagesubdata)(srcName, srcTarget, srcLevel, srcX, srcY, srcZ, dstName, dstTarget, dstLevel, dstX, dstY, dstZ, srcWidth, srcHeight, srcDepth)));
26293		#[cfg(feature = "diagnose")]
26294		if let Ok(ret) = ret {
26295			return to_result("glCopyImageSubData", ret, (self.version_4_3.geterror)());
26296		} else {
26297			return ret
26298		}
26299		#[cfg(not(feature = "diagnose"))]
26300		return ret;
26301	}
26302	#[inline(always)]
26303	fn glFramebufferParameteri(&self, target: GLenum, pname: GLenum, param: GLint) -> Result<()> {
26304		let ret = process_catch("glFramebufferParameteri", catch_unwind(||(self.version_4_3.framebufferparameteri)(target, pname, param)));
26305		#[cfg(feature = "diagnose")]
26306		if let Ok(ret) = ret {
26307			return to_result("glFramebufferParameteri", ret, (self.version_4_3.geterror)());
26308		} else {
26309			return ret
26310		}
26311		#[cfg(not(feature = "diagnose"))]
26312		return ret;
26313	}
26314	#[inline(always)]
26315	fn glGetFramebufferParameteriv(&self, target: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
26316		let ret = process_catch("glGetFramebufferParameteriv", catch_unwind(||(self.version_4_3.getframebufferparameteriv)(target, pname, params)));
26317		#[cfg(feature = "diagnose")]
26318		if let Ok(ret) = ret {
26319			return to_result("glGetFramebufferParameteriv", ret, (self.version_4_3.geterror)());
26320		} else {
26321			return ret
26322		}
26323		#[cfg(not(feature = "diagnose"))]
26324		return ret;
26325	}
26326	#[inline(always)]
26327	fn glGetInternalformati64v(&self, target: GLenum, internalformat: GLenum, pname: GLenum, count: GLsizei, params: *mut GLint64) -> Result<()> {
26328		let ret = process_catch("glGetInternalformati64v", catch_unwind(||(self.version_4_3.getinternalformati64v)(target, internalformat, pname, count, params)));
26329		#[cfg(feature = "diagnose")]
26330		if let Ok(ret) = ret {
26331			return to_result("glGetInternalformati64v", ret, (self.version_4_3.geterror)());
26332		} else {
26333			return ret
26334		}
26335		#[cfg(not(feature = "diagnose"))]
26336		return ret;
26337	}
26338	#[inline(always)]
26339	fn glInvalidateTexSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()> {
26340		let ret = process_catch("glInvalidateTexSubImage", catch_unwind(||(self.version_4_3.invalidatetexsubimage)(texture, level, xoffset, yoffset, zoffset, width, height, depth)));
26341		#[cfg(feature = "diagnose")]
26342		if let Ok(ret) = ret {
26343			return to_result("glInvalidateTexSubImage", ret, (self.version_4_3.geterror)());
26344		} else {
26345			return ret
26346		}
26347		#[cfg(not(feature = "diagnose"))]
26348		return ret;
26349	}
26350	#[inline(always)]
26351	fn glInvalidateTexImage(&self, texture: GLuint, level: GLint) -> Result<()> {
26352		let ret = process_catch("glInvalidateTexImage", catch_unwind(||(self.version_4_3.invalidateteximage)(texture, level)));
26353		#[cfg(feature = "diagnose")]
26354		if let Ok(ret) = ret {
26355			return to_result("glInvalidateTexImage", ret, (self.version_4_3.geterror)());
26356		} else {
26357			return ret
26358		}
26359		#[cfg(not(feature = "diagnose"))]
26360		return ret;
26361	}
26362	#[inline(always)]
26363	fn glInvalidateBufferSubData(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr) -> Result<()> {
26364		let ret = process_catch("glInvalidateBufferSubData", catch_unwind(||(self.version_4_3.invalidatebuffersubdata)(buffer, offset, length)));
26365		#[cfg(feature = "diagnose")]
26366		if let Ok(ret) = ret {
26367			return to_result("glInvalidateBufferSubData", ret, (self.version_4_3.geterror)());
26368		} else {
26369			return ret
26370		}
26371		#[cfg(not(feature = "diagnose"))]
26372		return ret;
26373	}
26374	#[inline(always)]
26375	fn glInvalidateBufferData(&self, buffer: GLuint) -> Result<()> {
26376		let ret = process_catch("glInvalidateBufferData", catch_unwind(||(self.version_4_3.invalidatebufferdata)(buffer)));
26377		#[cfg(feature = "diagnose")]
26378		if let Ok(ret) = ret {
26379			return to_result("glInvalidateBufferData", ret, (self.version_4_3.geterror)());
26380		} else {
26381			return ret
26382		}
26383		#[cfg(not(feature = "diagnose"))]
26384		return ret;
26385	}
26386	#[inline(always)]
26387	fn glInvalidateFramebuffer(&self, target: GLenum, numAttachments: GLsizei, attachments: *const GLenum) -> Result<()> {
26388		let ret = process_catch("glInvalidateFramebuffer", catch_unwind(||(self.version_4_3.invalidateframebuffer)(target, numAttachments, attachments)));
26389		#[cfg(feature = "diagnose")]
26390		if let Ok(ret) = ret {
26391			return to_result("glInvalidateFramebuffer", ret, (self.version_4_3.geterror)());
26392		} else {
26393			return ret
26394		}
26395		#[cfg(not(feature = "diagnose"))]
26396		return ret;
26397	}
26398	#[inline(always)]
26399	fn glInvalidateSubFramebuffer(&self, target: GLenum, numAttachments: GLsizei, attachments: *const GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
26400		let ret = process_catch("glInvalidateSubFramebuffer", catch_unwind(||(self.version_4_3.invalidatesubframebuffer)(target, numAttachments, attachments, x, y, width, height)));
26401		#[cfg(feature = "diagnose")]
26402		if let Ok(ret) = ret {
26403			return to_result("glInvalidateSubFramebuffer", ret, (self.version_4_3.geterror)());
26404		} else {
26405			return ret
26406		}
26407		#[cfg(not(feature = "diagnose"))]
26408		return ret;
26409	}
26410	#[inline(always)]
26411	fn glMultiDrawArraysIndirect(&self, mode: GLenum, indirect: *const c_void, drawcount: GLsizei, stride: GLsizei) -> Result<()> {
26412		let ret = process_catch("glMultiDrawArraysIndirect", catch_unwind(||(self.version_4_3.multidrawarraysindirect)(mode, indirect, drawcount, stride)));
26413		#[cfg(feature = "diagnose")]
26414		if let Ok(ret) = ret {
26415			return to_result("glMultiDrawArraysIndirect", ret, (self.version_4_3.geterror)());
26416		} else {
26417			return ret
26418		}
26419		#[cfg(not(feature = "diagnose"))]
26420		return ret;
26421	}
26422	#[inline(always)]
26423	fn glMultiDrawElementsIndirect(&self, mode: GLenum, type_: GLenum, indirect: *const c_void, drawcount: GLsizei, stride: GLsizei) -> Result<()> {
26424		let ret = process_catch("glMultiDrawElementsIndirect", catch_unwind(||(self.version_4_3.multidrawelementsindirect)(mode, type_, indirect, drawcount, stride)));
26425		#[cfg(feature = "diagnose")]
26426		if let Ok(ret) = ret {
26427			return to_result("glMultiDrawElementsIndirect", ret, (self.version_4_3.geterror)());
26428		} else {
26429			return ret
26430		}
26431		#[cfg(not(feature = "diagnose"))]
26432		return ret;
26433	}
26434	#[inline(always)]
26435	fn glGetProgramInterfaceiv(&self, program: GLuint, programInterface: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
26436		let ret = process_catch("glGetProgramInterfaceiv", catch_unwind(||(self.version_4_3.getprograminterfaceiv)(program, programInterface, pname, params)));
26437		#[cfg(feature = "diagnose")]
26438		if let Ok(ret) = ret {
26439			return to_result("glGetProgramInterfaceiv", ret, (self.version_4_3.geterror)());
26440		} else {
26441			return ret
26442		}
26443		#[cfg(not(feature = "diagnose"))]
26444		return ret;
26445	}
26446	#[inline(always)]
26447	fn glGetProgramResourceIndex(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLuint> {
26448		let ret = process_catch("glGetProgramResourceIndex", catch_unwind(||(self.version_4_3.getprogramresourceindex)(program, programInterface, name)));
26449		#[cfg(feature = "diagnose")]
26450		if let Ok(ret) = ret {
26451			return to_result("glGetProgramResourceIndex", ret, (self.version_4_3.geterror)());
26452		} else {
26453			return ret
26454		}
26455		#[cfg(not(feature = "diagnose"))]
26456		return ret;
26457	}
26458	#[inline(always)]
26459	fn glGetProgramResourceName(&self, program: GLuint, programInterface: GLenum, index: GLuint, bufSize: GLsizei, length: *mut GLsizei, name: *mut GLchar) -> Result<()> {
26460		let ret = process_catch("glGetProgramResourceName", catch_unwind(||(self.version_4_3.getprogramresourcename)(program, programInterface, index, bufSize, length, name)));
26461		#[cfg(feature = "diagnose")]
26462		if let Ok(ret) = ret {
26463			return to_result("glGetProgramResourceName", ret, (self.version_4_3.geterror)());
26464		} else {
26465			return ret
26466		}
26467		#[cfg(not(feature = "diagnose"))]
26468		return ret;
26469	}
26470	#[inline(always)]
26471	fn glGetProgramResourceiv(&self, program: GLuint, programInterface: GLenum, index: GLuint, propCount: GLsizei, props: *const GLenum, count: GLsizei, length: *mut GLsizei, params: *mut GLint) -> Result<()> {
26472		let ret = process_catch("glGetProgramResourceiv", catch_unwind(||(self.version_4_3.getprogramresourceiv)(program, programInterface, index, propCount, props, count, length, params)));
26473		#[cfg(feature = "diagnose")]
26474		if let Ok(ret) = ret {
26475			return to_result("glGetProgramResourceiv", ret, (self.version_4_3.geterror)());
26476		} else {
26477			return ret
26478		}
26479		#[cfg(not(feature = "diagnose"))]
26480		return ret;
26481	}
26482	#[inline(always)]
26483	fn glGetProgramResourceLocation(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLint> {
26484		let ret = process_catch("glGetProgramResourceLocation", catch_unwind(||(self.version_4_3.getprogramresourcelocation)(program, programInterface, name)));
26485		#[cfg(feature = "diagnose")]
26486		if let Ok(ret) = ret {
26487			return to_result("glGetProgramResourceLocation", ret, (self.version_4_3.geterror)());
26488		} else {
26489			return ret
26490		}
26491		#[cfg(not(feature = "diagnose"))]
26492		return ret;
26493	}
26494	#[inline(always)]
26495	fn glGetProgramResourceLocationIndex(&self, program: GLuint, programInterface: GLenum, name: *const GLchar) -> Result<GLint> {
26496		let ret = process_catch("glGetProgramResourceLocationIndex", catch_unwind(||(self.version_4_3.getprogramresourcelocationindex)(program, programInterface, name)));
26497		#[cfg(feature = "diagnose")]
26498		if let Ok(ret) = ret {
26499			return to_result("glGetProgramResourceLocationIndex", ret, (self.version_4_3.geterror)());
26500		} else {
26501			return ret
26502		}
26503		#[cfg(not(feature = "diagnose"))]
26504		return ret;
26505	}
26506	#[inline(always)]
26507	fn glShaderStorageBlockBinding(&self, program: GLuint, storageBlockIndex: GLuint, storageBlockBinding: GLuint) -> Result<()> {
26508		let ret = process_catch("glShaderStorageBlockBinding", catch_unwind(||(self.version_4_3.shaderstorageblockbinding)(program, storageBlockIndex, storageBlockBinding)));
26509		#[cfg(feature = "diagnose")]
26510		if let Ok(ret) = ret {
26511			return to_result("glShaderStorageBlockBinding", ret, (self.version_4_3.geterror)());
26512		} else {
26513			return ret
26514		}
26515		#[cfg(not(feature = "diagnose"))]
26516		return ret;
26517	}
26518	#[inline(always)]
26519	fn glTexBufferRange(&self, target: GLenum, internalformat: GLenum, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()> {
26520		let ret = process_catch("glTexBufferRange", catch_unwind(||(self.version_4_3.texbufferrange)(target, internalformat, buffer, offset, size)));
26521		#[cfg(feature = "diagnose")]
26522		if let Ok(ret) = ret {
26523			return to_result("glTexBufferRange", ret, (self.version_4_3.geterror)());
26524		} else {
26525			return ret
26526		}
26527		#[cfg(not(feature = "diagnose"))]
26528		return ret;
26529	}
26530	#[inline(always)]
26531	fn glTexStorage2DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
26532		let ret = process_catch("glTexStorage2DMultisample", catch_unwind(||(self.version_4_3.texstorage2dmultisample)(target, samples, internalformat, width, height, fixedsamplelocations)));
26533		#[cfg(feature = "diagnose")]
26534		if let Ok(ret) = ret {
26535			return to_result("glTexStorage2DMultisample", ret, (self.version_4_3.geterror)());
26536		} else {
26537			return ret
26538		}
26539		#[cfg(not(feature = "diagnose"))]
26540		return ret;
26541	}
26542	#[inline(always)]
26543	fn glTexStorage3DMultisample(&self, target: GLenum, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
26544		let ret = process_catch("glTexStorage3DMultisample", catch_unwind(||(self.version_4_3.texstorage3dmultisample)(target, samples, internalformat, width, height, depth, fixedsamplelocations)));
26545		#[cfg(feature = "diagnose")]
26546		if let Ok(ret) = ret {
26547			return to_result("glTexStorage3DMultisample", ret, (self.version_4_3.geterror)());
26548		} else {
26549			return ret
26550		}
26551		#[cfg(not(feature = "diagnose"))]
26552		return ret;
26553	}
26554	#[inline(always)]
26555	fn glTextureView(&self, texture: GLuint, target: GLenum, origtexture: GLuint, internalformat: GLenum, minlevel: GLuint, numlevels: GLuint, minlayer: GLuint, numlayers: GLuint) -> Result<()> {
26556		let ret = process_catch("glTextureView", catch_unwind(||(self.version_4_3.textureview)(texture, target, origtexture, internalformat, minlevel, numlevels, minlayer, numlayers)));
26557		#[cfg(feature = "diagnose")]
26558		if let Ok(ret) = ret {
26559			return to_result("glTextureView", ret, (self.version_4_3.geterror)());
26560		} else {
26561			return ret
26562		}
26563		#[cfg(not(feature = "diagnose"))]
26564		return ret;
26565	}
26566	#[inline(always)]
26567	fn glBindVertexBuffer(&self, bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei) -> Result<()> {
26568		let ret = process_catch("glBindVertexBuffer", catch_unwind(||(self.version_4_3.bindvertexbuffer)(bindingindex, buffer, offset, stride)));
26569		#[cfg(feature = "diagnose")]
26570		if let Ok(ret) = ret {
26571			return to_result("glBindVertexBuffer", ret, (self.version_4_3.geterror)());
26572		} else {
26573			return ret
26574		}
26575		#[cfg(not(feature = "diagnose"))]
26576		return ret;
26577	}
26578	#[inline(always)]
26579	fn glVertexAttribFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, relativeoffset: GLuint) -> Result<()> {
26580		let ret = process_catch("glVertexAttribFormat", catch_unwind(||(self.version_4_3.vertexattribformat)(attribindex, size, type_, normalized, relativeoffset)));
26581		#[cfg(feature = "diagnose")]
26582		if let Ok(ret) = ret {
26583			return to_result("glVertexAttribFormat", ret, (self.version_4_3.geterror)());
26584		} else {
26585			return ret
26586		}
26587		#[cfg(not(feature = "diagnose"))]
26588		return ret;
26589	}
26590	#[inline(always)]
26591	fn glVertexAttribIFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()> {
26592		let ret = process_catch("glVertexAttribIFormat", catch_unwind(||(self.version_4_3.vertexattribiformat)(attribindex, size, type_, relativeoffset)));
26593		#[cfg(feature = "diagnose")]
26594		if let Ok(ret) = ret {
26595			return to_result("glVertexAttribIFormat", ret, (self.version_4_3.geterror)());
26596		} else {
26597			return ret
26598		}
26599		#[cfg(not(feature = "diagnose"))]
26600		return ret;
26601	}
26602	#[inline(always)]
26603	fn glVertexAttribLFormat(&self, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()> {
26604		let ret = process_catch("glVertexAttribLFormat", catch_unwind(||(self.version_4_3.vertexattriblformat)(attribindex, size, type_, relativeoffset)));
26605		#[cfg(feature = "diagnose")]
26606		if let Ok(ret) = ret {
26607			return to_result("glVertexAttribLFormat", ret, (self.version_4_3.geterror)());
26608		} else {
26609			return ret
26610		}
26611		#[cfg(not(feature = "diagnose"))]
26612		return ret;
26613	}
26614	#[inline(always)]
26615	fn glVertexAttribBinding(&self, attribindex: GLuint, bindingindex: GLuint) -> Result<()> {
26616		let ret = process_catch("glVertexAttribBinding", catch_unwind(||(self.version_4_3.vertexattribbinding)(attribindex, bindingindex)));
26617		#[cfg(feature = "diagnose")]
26618		if let Ok(ret) = ret {
26619			return to_result("glVertexAttribBinding", ret, (self.version_4_3.geterror)());
26620		} else {
26621			return ret
26622		}
26623		#[cfg(not(feature = "diagnose"))]
26624		return ret;
26625	}
26626	#[inline(always)]
26627	fn glVertexBindingDivisor(&self, bindingindex: GLuint, divisor: GLuint) -> Result<()> {
26628		let ret = process_catch("glVertexBindingDivisor", catch_unwind(||(self.version_4_3.vertexbindingdivisor)(bindingindex, divisor)));
26629		#[cfg(feature = "diagnose")]
26630		if let Ok(ret) = ret {
26631			return to_result("glVertexBindingDivisor", ret, (self.version_4_3.geterror)());
26632		} else {
26633			return ret
26634		}
26635		#[cfg(not(feature = "diagnose"))]
26636		return ret;
26637	}
26638	#[inline(always)]
26639	fn glDebugMessageControl(&self, source: GLenum, type_: GLenum, severity: GLenum, count: GLsizei, ids: *const GLuint, enabled: GLboolean) -> Result<()> {
26640		let ret = process_catch("glDebugMessageControl", catch_unwind(||(self.version_4_3.debugmessagecontrol)(source, type_, severity, count, ids, enabled)));
26641		#[cfg(feature = "diagnose")]
26642		if let Ok(ret) = ret {
26643			return to_result("glDebugMessageControl", ret, (self.version_4_3.geterror)());
26644		} else {
26645			return ret
26646		}
26647		#[cfg(not(feature = "diagnose"))]
26648		return ret;
26649	}
26650	#[inline(always)]
26651	fn glDebugMessageInsert(&self, source: GLenum, type_: GLenum, id: GLuint, severity: GLenum, length: GLsizei, buf: *const GLchar) -> Result<()> {
26652		let ret = process_catch("glDebugMessageInsert", catch_unwind(||(self.version_4_3.debugmessageinsert)(source, type_, id, severity, length, buf)));
26653		#[cfg(feature = "diagnose")]
26654		if let Ok(ret) = ret {
26655			return to_result("glDebugMessageInsert", ret, (self.version_4_3.geterror)());
26656		} else {
26657			return ret
26658		}
26659		#[cfg(not(feature = "diagnose"))]
26660		return ret;
26661	}
26662	#[inline(always)]
26663	fn glDebugMessageCallback(&self, callback: GLDEBUGPROC, userParam: *const c_void) -> Result<()> {
26664		let ret = process_catch("glDebugMessageCallback", catch_unwind(||(self.version_4_3.debugmessagecallback)(callback, userParam)));
26665		#[cfg(feature = "diagnose")]
26666		if let Ok(ret) = ret {
26667			return to_result("glDebugMessageCallback", ret, (self.version_4_3.geterror)());
26668		} else {
26669			return ret
26670		}
26671		#[cfg(not(feature = "diagnose"))]
26672		return ret;
26673	}
26674	#[inline(always)]
26675	fn glGetDebugMessageLog(&self, count: GLuint, bufSize: GLsizei, sources: *mut GLenum, types: *mut GLenum, ids: *mut GLuint, severities: *mut GLenum, lengths: *mut GLsizei, messageLog: *mut GLchar) -> Result<GLuint> {
26676		let ret = process_catch("glGetDebugMessageLog", catch_unwind(||(self.version_4_3.getdebugmessagelog)(count, bufSize, sources, types, ids, severities, lengths, messageLog)));
26677		#[cfg(feature = "diagnose")]
26678		if let Ok(ret) = ret {
26679			return to_result("glGetDebugMessageLog", ret, (self.version_4_3.geterror)());
26680		} else {
26681			return ret
26682		}
26683		#[cfg(not(feature = "diagnose"))]
26684		return ret;
26685	}
26686	#[inline(always)]
26687	fn glPushDebugGroup(&self, source: GLenum, id: GLuint, length: GLsizei, message: *const GLchar) -> Result<()> {
26688		let ret = process_catch("glPushDebugGroup", catch_unwind(||(self.version_4_3.pushdebuggroup)(source, id, length, message)));
26689		#[cfg(feature = "diagnose")]
26690		if let Ok(ret) = ret {
26691			return to_result("glPushDebugGroup", ret, (self.version_4_3.geterror)());
26692		} else {
26693			return ret
26694		}
26695		#[cfg(not(feature = "diagnose"))]
26696		return ret;
26697	}
26698	#[inline(always)]
26699	fn glPopDebugGroup(&self) -> Result<()> {
26700		let ret = process_catch("glPopDebugGroup", catch_unwind(||(self.version_4_3.popdebuggroup)()));
26701		#[cfg(feature = "diagnose")]
26702		if let Ok(ret) = ret {
26703			return to_result("glPopDebugGroup", ret, (self.version_4_3.geterror)());
26704		} else {
26705			return ret
26706		}
26707		#[cfg(not(feature = "diagnose"))]
26708		return ret;
26709	}
26710	#[inline(always)]
26711	fn glObjectLabel(&self, identifier: GLenum, name: GLuint, length: GLsizei, label: *const GLchar) -> Result<()> {
26712		let ret = process_catch("glObjectLabel", catch_unwind(||(self.version_4_3.objectlabel)(identifier, name, length, label)));
26713		#[cfg(feature = "diagnose")]
26714		if let Ok(ret) = ret {
26715			return to_result("glObjectLabel", ret, (self.version_4_3.geterror)());
26716		} else {
26717			return ret
26718		}
26719		#[cfg(not(feature = "diagnose"))]
26720		return ret;
26721	}
26722	#[inline(always)]
26723	fn glGetObjectLabel(&self, identifier: GLenum, name: GLuint, bufSize: GLsizei, length: *mut GLsizei, label: *mut GLchar) -> Result<()> {
26724		let ret = process_catch("glGetObjectLabel", catch_unwind(||(self.version_4_3.getobjectlabel)(identifier, name, bufSize, length, label)));
26725		#[cfg(feature = "diagnose")]
26726		if let Ok(ret) = ret {
26727			return to_result("glGetObjectLabel", ret, (self.version_4_3.geterror)());
26728		} else {
26729			return ret
26730		}
26731		#[cfg(not(feature = "diagnose"))]
26732		return ret;
26733	}
26734	#[inline(always)]
26735	fn glObjectPtrLabel(&self, ptr: *const c_void, length: GLsizei, label: *const GLchar) -> Result<()> {
26736		let ret = process_catch("glObjectPtrLabel", catch_unwind(||(self.version_4_3.objectptrlabel)(ptr, length, label)));
26737		#[cfg(feature = "diagnose")]
26738		if let Ok(ret) = ret {
26739			return to_result("glObjectPtrLabel", ret, (self.version_4_3.geterror)());
26740		} else {
26741			return ret
26742		}
26743		#[cfg(not(feature = "diagnose"))]
26744		return ret;
26745	}
26746	#[inline(always)]
26747	fn glGetObjectPtrLabel(&self, ptr: *const c_void, bufSize: GLsizei, length: *mut GLsizei, label: *mut GLchar) -> Result<()> {
26748		let ret = process_catch("glGetObjectPtrLabel", catch_unwind(||(self.version_4_3.getobjectptrlabel)(ptr, bufSize, length, label)));
26749		#[cfg(feature = "diagnose")]
26750		if let Ok(ret) = ret {
26751			return to_result("glGetObjectPtrLabel", ret, (self.version_4_3.geterror)());
26752		} else {
26753			return ret
26754		}
26755		#[cfg(not(feature = "diagnose"))]
26756		return ret;
26757	}
26758}
26759
26760impl GL_4_4 for GLCore {
26761	#[inline(always)]
26762	fn glGetError(&self) -> GLenum {
26763		(self.version_4_4.geterror)()
26764	}
26765	#[inline(always)]
26766	fn glBufferStorage(&self, target: GLenum, size: GLsizeiptr, data: *const c_void, flags: GLbitfield) -> Result<()> {
26767		let ret = process_catch("glBufferStorage", catch_unwind(||(self.version_4_4.bufferstorage)(target, size, data, flags)));
26768		#[cfg(feature = "diagnose")]
26769		if let Ok(ret) = ret {
26770			return to_result("glBufferStorage", ret, (self.version_4_4.geterror)());
26771		} else {
26772			return ret
26773		}
26774		#[cfg(not(feature = "diagnose"))]
26775		return ret;
26776	}
26777	#[inline(always)]
26778	fn glClearTexImage(&self, texture: GLuint, level: GLint, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
26779		let ret = process_catch("glClearTexImage", catch_unwind(||(self.version_4_4.clearteximage)(texture, level, format, type_, data)));
26780		#[cfg(feature = "diagnose")]
26781		if let Ok(ret) = ret {
26782			return to_result("glClearTexImage", ret, (self.version_4_4.geterror)());
26783		} else {
26784			return ret
26785		}
26786		#[cfg(not(feature = "diagnose"))]
26787		return ret;
26788	}
26789	#[inline(always)]
26790	fn glClearTexSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
26791		let ret = process_catch("glClearTexSubImage", catch_unwind(||(self.version_4_4.cleartexsubimage)(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, data)));
26792		#[cfg(feature = "diagnose")]
26793		if let Ok(ret) = ret {
26794			return to_result("glClearTexSubImage", ret, (self.version_4_4.geterror)());
26795		} else {
26796			return ret
26797		}
26798		#[cfg(not(feature = "diagnose"))]
26799		return ret;
26800	}
26801	#[inline(always)]
26802	fn glBindBuffersBase(&self, target: GLenum, first: GLuint, count: GLsizei, buffers: *const GLuint) -> Result<()> {
26803		let ret = process_catch("glBindBuffersBase", catch_unwind(||(self.version_4_4.bindbuffersbase)(target, first, count, buffers)));
26804		#[cfg(feature = "diagnose")]
26805		if let Ok(ret) = ret {
26806			return to_result("glBindBuffersBase", ret, (self.version_4_4.geterror)());
26807		} else {
26808			return ret
26809		}
26810		#[cfg(not(feature = "diagnose"))]
26811		return ret;
26812	}
26813	#[inline(always)]
26814	fn glBindBuffersRange(&self, target: GLenum, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, sizes: *const GLsizeiptr) -> Result<()> {
26815		let ret = process_catch("glBindBuffersRange", catch_unwind(||(self.version_4_4.bindbuffersrange)(target, first, count, buffers, offsets, sizes)));
26816		#[cfg(feature = "diagnose")]
26817		if let Ok(ret) = ret {
26818			return to_result("glBindBuffersRange", ret, (self.version_4_4.geterror)());
26819		} else {
26820			return ret
26821		}
26822		#[cfg(not(feature = "diagnose"))]
26823		return ret;
26824	}
26825	#[inline(always)]
26826	fn glBindTextures(&self, first: GLuint, count: GLsizei, textures: *const GLuint) -> Result<()> {
26827		let ret = process_catch("glBindTextures", catch_unwind(||(self.version_4_4.bindtextures)(first, count, textures)));
26828		#[cfg(feature = "diagnose")]
26829		if let Ok(ret) = ret {
26830			return to_result("glBindTextures", ret, (self.version_4_4.geterror)());
26831		} else {
26832			return ret
26833		}
26834		#[cfg(not(feature = "diagnose"))]
26835		return ret;
26836	}
26837	#[inline(always)]
26838	fn glBindSamplers(&self, first: GLuint, count: GLsizei, samplers: *const GLuint) -> Result<()> {
26839		let ret = process_catch("glBindSamplers", catch_unwind(||(self.version_4_4.bindsamplers)(first, count, samplers)));
26840		#[cfg(feature = "diagnose")]
26841		if let Ok(ret) = ret {
26842			return to_result("glBindSamplers", ret, (self.version_4_4.geterror)());
26843		} else {
26844			return ret
26845		}
26846		#[cfg(not(feature = "diagnose"))]
26847		return ret;
26848	}
26849	#[inline(always)]
26850	fn glBindImageTextures(&self, first: GLuint, count: GLsizei, textures: *const GLuint) -> Result<()> {
26851		let ret = process_catch("glBindImageTextures", catch_unwind(||(self.version_4_4.bindimagetextures)(first, count, textures)));
26852		#[cfg(feature = "diagnose")]
26853		if let Ok(ret) = ret {
26854			return to_result("glBindImageTextures", ret, (self.version_4_4.geterror)());
26855		} else {
26856			return ret
26857		}
26858		#[cfg(not(feature = "diagnose"))]
26859		return ret;
26860	}
26861	#[inline(always)]
26862	fn glBindVertexBuffers(&self, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, strides: *const GLsizei) -> Result<()> {
26863		let ret = process_catch("glBindVertexBuffers", catch_unwind(||(self.version_4_4.bindvertexbuffers)(first, count, buffers, offsets, strides)));
26864		#[cfg(feature = "diagnose")]
26865		if let Ok(ret) = ret {
26866			return to_result("glBindVertexBuffers", ret, (self.version_4_4.geterror)());
26867		} else {
26868			return ret
26869		}
26870		#[cfg(not(feature = "diagnose"))]
26871		return ret;
26872	}
26873}
26874
26875impl GL_4_5 for GLCore {
26876	#[inline(always)]
26877	fn glGetError(&self) -> GLenum {
26878		(self.version_4_5.geterror)()
26879	}
26880	#[inline(always)]
26881	fn glClipControl(&self, origin: GLenum, depth: GLenum) -> Result<()> {
26882		let ret = process_catch("glClipControl", catch_unwind(||(self.version_4_5.clipcontrol)(origin, depth)));
26883		#[cfg(feature = "diagnose")]
26884		if let Ok(ret) = ret {
26885			return to_result("glClipControl", ret, (self.version_4_5.geterror)());
26886		} else {
26887			return ret
26888		}
26889		#[cfg(not(feature = "diagnose"))]
26890		return ret;
26891	}
26892	#[inline(always)]
26893	fn glCreateTransformFeedbacks(&self, n: GLsizei, ids: *mut GLuint) -> Result<()> {
26894		let ret = process_catch("glCreateTransformFeedbacks", catch_unwind(||(self.version_4_5.createtransformfeedbacks)(n, ids)));
26895		#[cfg(feature = "diagnose")]
26896		if let Ok(ret) = ret {
26897			return to_result("glCreateTransformFeedbacks", ret, (self.version_4_5.geterror)());
26898		} else {
26899			return ret
26900		}
26901		#[cfg(not(feature = "diagnose"))]
26902		return ret;
26903	}
26904	#[inline(always)]
26905	fn glTransformFeedbackBufferBase(&self, xfb: GLuint, index: GLuint, buffer: GLuint) -> Result<()> {
26906		let ret = process_catch("glTransformFeedbackBufferBase", catch_unwind(||(self.version_4_5.transformfeedbackbufferbase)(xfb, index, buffer)));
26907		#[cfg(feature = "diagnose")]
26908		if let Ok(ret) = ret {
26909			return to_result("glTransformFeedbackBufferBase", ret, (self.version_4_5.geterror)());
26910		} else {
26911			return ret
26912		}
26913		#[cfg(not(feature = "diagnose"))]
26914		return ret;
26915	}
26916	#[inline(always)]
26917	fn glTransformFeedbackBufferRange(&self, xfb: GLuint, index: GLuint, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()> {
26918		let ret = process_catch("glTransformFeedbackBufferRange", catch_unwind(||(self.version_4_5.transformfeedbackbufferrange)(xfb, index, buffer, offset, size)));
26919		#[cfg(feature = "diagnose")]
26920		if let Ok(ret) = ret {
26921			return to_result("glTransformFeedbackBufferRange", ret, (self.version_4_5.geterror)());
26922		} else {
26923			return ret
26924		}
26925		#[cfg(not(feature = "diagnose"))]
26926		return ret;
26927	}
26928	#[inline(always)]
26929	fn glGetTransformFeedbackiv(&self, xfb: GLuint, pname: GLenum, param: *mut GLint) -> Result<()> {
26930		let ret = process_catch("glGetTransformFeedbackiv", catch_unwind(||(self.version_4_5.gettransformfeedbackiv)(xfb, pname, param)));
26931		#[cfg(feature = "diagnose")]
26932		if let Ok(ret) = ret {
26933			return to_result("glGetTransformFeedbackiv", ret, (self.version_4_5.geterror)());
26934		} else {
26935			return ret
26936		}
26937		#[cfg(not(feature = "diagnose"))]
26938		return ret;
26939	}
26940	#[inline(always)]
26941	fn glGetTransformFeedbacki_v(&self, xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint) -> Result<()> {
26942		let ret = process_catch("glGetTransformFeedbacki_v", catch_unwind(||(self.version_4_5.gettransformfeedbacki_v)(xfb, pname, index, param)));
26943		#[cfg(feature = "diagnose")]
26944		if let Ok(ret) = ret {
26945			return to_result("glGetTransformFeedbacki_v", ret, (self.version_4_5.geterror)());
26946		} else {
26947			return ret
26948		}
26949		#[cfg(not(feature = "diagnose"))]
26950		return ret;
26951	}
26952	#[inline(always)]
26953	fn glGetTransformFeedbacki64_v(&self, xfb: GLuint, pname: GLenum, index: GLuint, param: *mut GLint64) -> Result<()> {
26954		let ret = process_catch("glGetTransformFeedbacki64_v", catch_unwind(||(self.version_4_5.gettransformfeedbacki64_v)(xfb, pname, index, param)));
26955		#[cfg(feature = "diagnose")]
26956		if let Ok(ret) = ret {
26957			return to_result("glGetTransformFeedbacki64_v", ret, (self.version_4_5.geterror)());
26958		} else {
26959			return ret
26960		}
26961		#[cfg(not(feature = "diagnose"))]
26962		return ret;
26963	}
26964	#[inline(always)]
26965	fn glCreateBuffers(&self, n: GLsizei, buffers: *mut GLuint) -> Result<()> {
26966		let ret = process_catch("glCreateBuffers", catch_unwind(||(self.version_4_5.createbuffers)(n, buffers)));
26967		#[cfg(feature = "diagnose")]
26968		if let Ok(ret) = ret {
26969			return to_result("glCreateBuffers", ret, (self.version_4_5.geterror)());
26970		} else {
26971			return ret
26972		}
26973		#[cfg(not(feature = "diagnose"))]
26974		return ret;
26975	}
26976	#[inline(always)]
26977	fn glNamedBufferStorage(&self, buffer: GLuint, size: GLsizeiptr, data: *const c_void, flags: GLbitfield) -> Result<()> {
26978		let ret = process_catch("glNamedBufferStorage", catch_unwind(||(self.version_4_5.namedbufferstorage)(buffer, size, data, flags)));
26979		#[cfg(feature = "diagnose")]
26980		if let Ok(ret) = ret {
26981			return to_result("glNamedBufferStorage", ret, (self.version_4_5.geterror)());
26982		} else {
26983			return ret
26984		}
26985		#[cfg(not(feature = "diagnose"))]
26986		return ret;
26987	}
26988	#[inline(always)]
26989	fn glNamedBufferData(&self, buffer: GLuint, size: GLsizeiptr, data: *const c_void, usage: GLenum) -> Result<()> {
26990		let ret = process_catch("glNamedBufferData", catch_unwind(||(self.version_4_5.namedbufferdata)(buffer, size, data, usage)));
26991		#[cfg(feature = "diagnose")]
26992		if let Ok(ret) = ret {
26993			return to_result("glNamedBufferData", ret, (self.version_4_5.geterror)());
26994		} else {
26995			return ret
26996		}
26997		#[cfg(not(feature = "diagnose"))]
26998		return ret;
26999	}
27000	#[inline(always)]
27001	fn glNamedBufferSubData(&self, buffer: GLuint, offset: GLintptr, size: GLsizeiptr, data: *const c_void) -> Result<()> {
27002		let ret = process_catch("glNamedBufferSubData", catch_unwind(||(self.version_4_5.namedbuffersubdata)(buffer, offset, size, data)));
27003		#[cfg(feature = "diagnose")]
27004		if let Ok(ret) = ret {
27005			return to_result("glNamedBufferSubData", ret, (self.version_4_5.geterror)());
27006		} else {
27007			return ret
27008		}
27009		#[cfg(not(feature = "diagnose"))]
27010		return ret;
27011	}
27012	#[inline(always)]
27013	fn glCopyNamedBufferSubData(&self, readBuffer: GLuint, writeBuffer: GLuint, readOffset: GLintptr, writeOffset: GLintptr, size: GLsizeiptr) -> Result<()> {
27014		let ret = process_catch("glCopyNamedBufferSubData", catch_unwind(||(self.version_4_5.copynamedbuffersubdata)(readBuffer, writeBuffer, readOffset, writeOffset, size)));
27015		#[cfg(feature = "diagnose")]
27016		if let Ok(ret) = ret {
27017			return to_result("glCopyNamedBufferSubData", ret, (self.version_4_5.geterror)());
27018		} else {
27019			return ret
27020		}
27021		#[cfg(not(feature = "diagnose"))]
27022		return ret;
27023	}
27024	#[inline(always)]
27025	fn glClearNamedBufferData(&self, buffer: GLuint, internalformat: GLenum, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
27026		let ret = process_catch("glClearNamedBufferData", catch_unwind(||(self.version_4_5.clearnamedbufferdata)(buffer, internalformat, format, type_, data)));
27027		#[cfg(feature = "diagnose")]
27028		if let Ok(ret) = ret {
27029			return to_result("glClearNamedBufferData", ret, (self.version_4_5.geterror)());
27030		} else {
27031			return ret
27032		}
27033		#[cfg(not(feature = "diagnose"))]
27034		return ret;
27035	}
27036	#[inline(always)]
27037	fn glClearNamedBufferSubData(&self, buffer: GLuint, internalformat: GLenum, offset: GLintptr, size: GLsizeiptr, format: GLenum, type_: GLenum, data: *const c_void) -> Result<()> {
27038		let ret = process_catch("glClearNamedBufferSubData", catch_unwind(||(self.version_4_5.clearnamedbuffersubdata)(buffer, internalformat, offset, size, format, type_, data)));
27039		#[cfg(feature = "diagnose")]
27040		if let Ok(ret) = ret {
27041			return to_result("glClearNamedBufferSubData", ret, (self.version_4_5.geterror)());
27042		} else {
27043			return ret
27044		}
27045		#[cfg(not(feature = "diagnose"))]
27046		return ret;
27047	}
27048	#[inline(always)]
27049	fn glMapNamedBuffer(&self, buffer: GLuint, access: GLenum) -> Result<*mut c_void> {
27050		let ret = process_catch("glMapNamedBuffer", catch_unwind(||(self.version_4_5.mapnamedbuffer)(buffer, access)));
27051		#[cfg(feature = "diagnose")]
27052		if let Ok(ret) = ret {
27053			return to_result("glMapNamedBuffer", ret, (self.version_4_5.geterror)());
27054		} else {
27055			return ret
27056		}
27057		#[cfg(not(feature = "diagnose"))]
27058		return ret;
27059	}
27060	#[inline(always)]
27061	fn glMapNamedBufferRange(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr, access: GLbitfield) -> Result<*mut c_void> {
27062		let ret = process_catch("glMapNamedBufferRange", catch_unwind(||(self.version_4_5.mapnamedbufferrange)(buffer, offset, length, access)));
27063		#[cfg(feature = "diagnose")]
27064		if let Ok(ret) = ret {
27065			return to_result("glMapNamedBufferRange", ret, (self.version_4_5.geterror)());
27066		} else {
27067			return ret
27068		}
27069		#[cfg(not(feature = "diagnose"))]
27070		return ret;
27071	}
27072	#[inline(always)]
27073	fn glUnmapNamedBuffer(&self, buffer: GLuint) -> Result<GLboolean> {
27074		let ret = process_catch("glUnmapNamedBuffer", catch_unwind(||(self.version_4_5.unmapnamedbuffer)(buffer)));
27075		#[cfg(feature = "diagnose")]
27076		if let Ok(ret) = ret {
27077			return to_result("glUnmapNamedBuffer", ret, (self.version_4_5.geterror)());
27078		} else {
27079			return ret
27080		}
27081		#[cfg(not(feature = "diagnose"))]
27082		return ret;
27083	}
27084	#[inline(always)]
27085	fn glFlushMappedNamedBufferRange(&self, buffer: GLuint, offset: GLintptr, length: GLsizeiptr) -> Result<()> {
27086		let ret = process_catch("glFlushMappedNamedBufferRange", catch_unwind(||(self.version_4_5.flushmappednamedbufferrange)(buffer, offset, length)));
27087		#[cfg(feature = "diagnose")]
27088		if let Ok(ret) = ret {
27089			return to_result("glFlushMappedNamedBufferRange", ret, (self.version_4_5.geterror)());
27090		} else {
27091			return ret
27092		}
27093		#[cfg(not(feature = "diagnose"))]
27094		return ret;
27095	}
27096	#[inline(always)]
27097	fn glGetNamedBufferParameteriv(&self, buffer: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
27098		let ret = process_catch("glGetNamedBufferParameteriv", catch_unwind(||(self.version_4_5.getnamedbufferparameteriv)(buffer, pname, params)));
27099		#[cfg(feature = "diagnose")]
27100		if let Ok(ret) = ret {
27101			return to_result("glGetNamedBufferParameteriv", ret, (self.version_4_5.geterror)());
27102		} else {
27103			return ret
27104		}
27105		#[cfg(not(feature = "diagnose"))]
27106		return ret;
27107	}
27108	#[inline(always)]
27109	fn glGetNamedBufferParameteri64v(&self, buffer: GLuint, pname: GLenum, params: *mut GLint64) -> Result<()> {
27110		let ret = process_catch("glGetNamedBufferParameteri64v", catch_unwind(||(self.version_4_5.getnamedbufferparameteri64v)(buffer, pname, params)));
27111		#[cfg(feature = "diagnose")]
27112		if let Ok(ret) = ret {
27113			return to_result("glGetNamedBufferParameteri64v", ret, (self.version_4_5.geterror)());
27114		} else {
27115			return ret
27116		}
27117		#[cfg(not(feature = "diagnose"))]
27118		return ret;
27119	}
27120	#[inline(always)]
27121	fn glGetNamedBufferPointerv(&self, buffer: GLuint, pname: GLenum, params: *mut *mut c_void) -> Result<()> {
27122		let ret = process_catch("glGetNamedBufferPointerv", catch_unwind(||(self.version_4_5.getnamedbufferpointerv)(buffer, pname, params)));
27123		#[cfg(feature = "diagnose")]
27124		if let Ok(ret) = ret {
27125			return to_result("glGetNamedBufferPointerv", ret, (self.version_4_5.geterror)());
27126		} else {
27127			return ret
27128		}
27129		#[cfg(not(feature = "diagnose"))]
27130		return ret;
27131	}
27132	#[inline(always)]
27133	fn glGetNamedBufferSubData(&self, buffer: GLuint, offset: GLintptr, size: GLsizeiptr, data: *mut c_void) -> Result<()> {
27134		let ret = process_catch("glGetNamedBufferSubData", catch_unwind(||(self.version_4_5.getnamedbuffersubdata)(buffer, offset, size, data)));
27135		#[cfg(feature = "diagnose")]
27136		if let Ok(ret) = ret {
27137			return to_result("glGetNamedBufferSubData", ret, (self.version_4_5.geterror)());
27138		} else {
27139			return ret
27140		}
27141		#[cfg(not(feature = "diagnose"))]
27142		return ret;
27143	}
27144	#[inline(always)]
27145	fn glCreateFramebuffers(&self, n: GLsizei, framebuffers: *mut GLuint) -> Result<()> {
27146		let ret = process_catch("glCreateFramebuffers", catch_unwind(||(self.version_4_5.createframebuffers)(n, framebuffers)));
27147		#[cfg(feature = "diagnose")]
27148		if let Ok(ret) = ret {
27149			return to_result("glCreateFramebuffers", ret, (self.version_4_5.geterror)());
27150		} else {
27151			return ret
27152		}
27153		#[cfg(not(feature = "diagnose"))]
27154		return ret;
27155	}
27156	#[inline(always)]
27157	fn glNamedFramebufferRenderbuffer(&self, framebuffer: GLuint, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: GLuint) -> Result<()> {
27158		let ret = process_catch("glNamedFramebufferRenderbuffer", catch_unwind(||(self.version_4_5.namedframebufferrenderbuffer)(framebuffer, attachment, renderbuffertarget, renderbuffer)));
27159		#[cfg(feature = "diagnose")]
27160		if let Ok(ret) = ret {
27161			return to_result("glNamedFramebufferRenderbuffer", ret, (self.version_4_5.geterror)());
27162		} else {
27163			return ret
27164		}
27165		#[cfg(not(feature = "diagnose"))]
27166		return ret;
27167	}
27168	#[inline(always)]
27169	fn glNamedFramebufferParameteri(&self, framebuffer: GLuint, pname: GLenum, param: GLint) -> Result<()> {
27170		let ret = process_catch("glNamedFramebufferParameteri", catch_unwind(||(self.version_4_5.namedframebufferparameteri)(framebuffer, pname, param)));
27171		#[cfg(feature = "diagnose")]
27172		if let Ok(ret) = ret {
27173			return to_result("glNamedFramebufferParameteri", ret, (self.version_4_5.geterror)());
27174		} else {
27175			return ret
27176		}
27177		#[cfg(not(feature = "diagnose"))]
27178		return ret;
27179	}
27180	#[inline(always)]
27181	fn glNamedFramebufferTexture(&self, framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint) -> Result<()> {
27182		let ret = process_catch("glNamedFramebufferTexture", catch_unwind(||(self.version_4_5.namedframebuffertexture)(framebuffer, attachment, texture, level)));
27183		#[cfg(feature = "diagnose")]
27184		if let Ok(ret) = ret {
27185			return to_result("glNamedFramebufferTexture", ret, (self.version_4_5.geterror)());
27186		} else {
27187			return ret
27188		}
27189		#[cfg(not(feature = "diagnose"))]
27190		return ret;
27191	}
27192	#[inline(always)]
27193	fn glNamedFramebufferTextureLayer(&self, framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint, layer: GLint) -> Result<()> {
27194		let ret = process_catch("glNamedFramebufferTextureLayer", catch_unwind(||(self.version_4_5.namedframebuffertexturelayer)(framebuffer, attachment, texture, level, layer)));
27195		#[cfg(feature = "diagnose")]
27196		if let Ok(ret) = ret {
27197			return to_result("glNamedFramebufferTextureLayer", ret, (self.version_4_5.geterror)());
27198		} else {
27199			return ret
27200		}
27201		#[cfg(not(feature = "diagnose"))]
27202		return ret;
27203	}
27204	#[inline(always)]
27205	fn glNamedFramebufferDrawBuffer(&self, framebuffer: GLuint, buf: GLenum) -> Result<()> {
27206		let ret = process_catch("glNamedFramebufferDrawBuffer", catch_unwind(||(self.version_4_5.namedframebufferdrawbuffer)(framebuffer, buf)));
27207		#[cfg(feature = "diagnose")]
27208		if let Ok(ret) = ret {
27209			return to_result("glNamedFramebufferDrawBuffer", ret, (self.version_4_5.geterror)());
27210		} else {
27211			return ret
27212		}
27213		#[cfg(not(feature = "diagnose"))]
27214		return ret;
27215	}
27216	#[inline(always)]
27217	fn glNamedFramebufferDrawBuffers(&self, framebuffer: GLuint, n: GLsizei, bufs: *const GLenum) -> Result<()> {
27218		let ret = process_catch("glNamedFramebufferDrawBuffers", catch_unwind(||(self.version_4_5.namedframebufferdrawbuffers)(framebuffer, n, bufs)));
27219		#[cfg(feature = "diagnose")]
27220		if let Ok(ret) = ret {
27221			return to_result("glNamedFramebufferDrawBuffers", ret, (self.version_4_5.geterror)());
27222		} else {
27223			return ret
27224		}
27225		#[cfg(not(feature = "diagnose"))]
27226		return ret;
27227	}
27228	#[inline(always)]
27229	fn glNamedFramebufferReadBuffer(&self, framebuffer: GLuint, src: GLenum) -> Result<()> {
27230		let ret = process_catch("glNamedFramebufferReadBuffer", catch_unwind(||(self.version_4_5.namedframebufferreadbuffer)(framebuffer, src)));
27231		#[cfg(feature = "diagnose")]
27232		if let Ok(ret) = ret {
27233			return to_result("glNamedFramebufferReadBuffer", ret, (self.version_4_5.geterror)());
27234		} else {
27235			return ret
27236		}
27237		#[cfg(not(feature = "diagnose"))]
27238		return ret;
27239	}
27240	#[inline(always)]
27241	fn glInvalidateNamedFramebufferData(&self, framebuffer: GLuint, numAttachments: GLsizei, attachments: *const GLenum) -> Result<()> {
27242		let ret = process_catch("glInvalidateNamedFramebufferData", catch_unwind(||(self.version_4_5.invalidatenamedframebufferdata)(framebuffer, numAttachments, attachments)));
27243		#[cfg(feature = "diagnose")]
27244		if let Ok(ret) = ret {
27245			return to_result("glInvalidateNamedFramebufferData", ret, (self.version_4_5.geterror)());
27246		} else {
27247			return ret
27248		}
27249		#[cfg(not(feature = "diagnose"))]
27250		return ret;
27251	}
27252	#[inline(always)]
27253	fn glInvalidateNamedFramebufferSubData(&self, framebuffer: GLuint, numAttachments: GLsizei, attachments: *const GLenum, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
27254		let ret = process_catch("glInvalidateNamedFramebufferSubData", catch_unwind(||(self.version_4_5.invalidatenamedframebuffersubdata)(framebuffer, numAttachments, attachments, x, y, width, height)));
27255		#[cfg(feature = "diagnose")]
27256		if let Ok(ret) = ret {
27257			return to_result("glInvalidateNamedFramebufferSubData", ret, (self.version_4_5.geterror)());
27258		} else {
27259			return ret
27260		}
27261		#[cfg(not(feature = "diagnose"))]
27262		return ret;
27263	}
27264	#[inline(always)]
27265	fn glClearNamedFramebufferiv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLint) -> Result<()> {
27266		let ret = process_catch("glClearNamedFramebufferiv", catch_unwind(||(self.version_4_5.clearnamedframebufferiv)(framebuffer, buffer, drawbuffer, value)));
27267		#[cfg(feature = "diagnose")]
27268		if let Ok(ret) = ret {
27269			return to_result("glClearNamedFramebufferiv", ret, (self.version_4_5.geterror)());
27270		} else {
27271			return ret
27272		}
27273		#[cfg(not(feature = "diagnose"))]
27274		return ret;
27275	}
27276	#[inline(always)]
27277	fn glClearNamedFramebufferuiv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLuint) -> Result<()> {
27278		let ret = process_catch("glClearNamedFramebufferuiv", catch_unwind(||(self.version_4_5.clearnamedframebufferuiv)(framebuffer, buffer, drawbuffer, value)));
27279		#[cfg(feature = "diagnose")]
27280		if let Ok(ret) = ret {
27281			return to_result("glClearNamedFramebufferuiv", ret, (self.version_4_5.geterror)());
27282		} else {
27283			return ret
27284		}
27285		#[cfg(not(feature = "diagnose"))]
27286		return ret;
27287	}
27288	#[inline(always)]
27289	fn glClearNamedFramebufferfv(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, value: *const GLfloat) -> Result<()> {
27290		let ret = process_catch("glClearNamedFramebufferfv", catch_unwind(||(self.version_4_5.clearnamedframebufferfv)(framebuffer, buffer, drawbuffer, value)));
27291		#[cfg(feature = "diagnose")]
27292		if let Ok(ret) = ret {
27293			return to_result("glClearNamedFramebufferfv", ret, (self.version_4_5.geterror)());
27294		} else {
27295			return ret
27296		}
27297		#[cfg(not(feature = "diagnose"))]
27298		return ret;
27299	}
27300	#[inline(always)]
27301	fn glClearNamedFramebufferfi(&self, framebuffer: GLuint, buffer: GLenum, drawbuffer: GLint, depth: GLfloat, stencil: GLint) -> Result<()> {
27302		let ret = process_catch("glClearNamedFramebufferfi", catch_unwind(||(self.version_4_5.clearnamedframebufferfi)(framebuffer, buffer, drawbuffer, depth, stencil)));
27303		#[cfg(feature = "diagnose")]
27304		if let Ok(ret) = ret {
27305			return to_result("glClearNamedFramebufferfi", ret, (self.version_4_5.geterror)());
27306		} else {
27307			return ret
27308		}
27309		#[cfg(not(feature = "diagnose"))]
27310		return ret;
27311	}
27312	#[inline(always)]
27313	fn glBlitNamedFramebuffer(&self, readFramebuffer: GLuint, drawFramebuffer: GLuint, srcX0: GLint, srcY0: GLint, srcX1: GLint, srcY1: GLint, dstX0: GLint, dstY0: GLint, dstX1: GLint, dstY1: GLint, mask: GLbitfield, filter: GLenum) -> Result<()> {
27314		let ret = process_catch("glBlitNamedFramebuffer", catch_unwind(||(self.version_4_5.blitnamedframebuffer)(readFramebuffer, drawFramebuffer, srcX0, srcY0, srcX1, srcY1, dstX0, dstY0, dstX1, dstY1, mask, filter)));
27315		#[cfg(feature = "diagnose")]
27316		if let Ok(ret) = ret {
27317			return to_result("glBlitNamedFramebuffer", ret, (self.version_4_5.geterror)());
27318		} else {
27319			return ret
27320		}
27321		#[cfg(not(feature = "diagnose"))]
27322		return ret;
27323	}
27324	#[inline(always)]
27325	fn glCheckNamedFramebufferStatus(&self, framebuffer: GLuint, target: GLenum) -> Result<GLenum> {
27326		let ret = process_catch("glCheckNamedFramebufferStatus", catch_unwind(||(self.version_4_5.checknamedframebufferstatus)(framebuffer, target)));
27327		#[cfg(feature = "diagnose")]
27328		if let Ok(ret) = ret {
27329			return to_result("glCheckNamedFramebufferStatus", ret, (self.version_4_5.geterror)());
27330		} else {
27331			return ret
27332		}
27333		#[cfg(not(feature = "diagnose"))]
27334		return ret;
27335	}
27336	#[inline(always)]
27337	fn glGetNamedFramebufferParameteriv(&self, framebuffer: GLuint, pname: GLenum, param: *mut GLint) -> Result<()> {
27338		let ret = process_catch("glGetNamedFramebufferParameteriv", catch_unwind(||(self.version_4_5.getnamedframebufferparameteriv)(framebuffer, pname, param)));
27339		#[cfg(feature = "diagnose")]
27340		if let Ok(ret) = ret {
27341			return to_result("glGetNamedFramebufferParameteriv", ret, (self.version_4_5.geterror)());
27342		} else {
27343			return ret
27344		}
27345		#[cfg(not(feature = "diagnose"))]
27346		return ret;
27347	}
27348	#[inline(always)]
27349	fn glGetNamedFramebufferAttachmentParameteriv(&self, framebuffer: GLuint, attachment: GLenum, pname: GLenum, params: *mut GLint) -> Result<()> {
27350		let ret = process_catch("glGetNamedFramebufferAttachmentParameteriv", catch_unwind(||(self.version_4_5.getnamedframebufferattachmentparameteriv)(framebuffer, attachment, pname, params)));
27351		#[cfg(feature = "diagnose")]
27352		if let Ok(ret) = ret {
27353			return to_result("glGetNamedFramebufferAttachmentParameteriv", ret, (self.version_4_5.geterror)());
27354		} else {
27355			return ret
27356		}
27357		#[cfg(not(feature = "diagnose"))]
27358		return ret;
27359	}
27360	#[inline(always)]
27361	fn glCreateRenderbuffers(&self, n: GLsizei, renderbuffers: *mut GLuint) -> Result<()> {
27362		let ret = process_catch("glCreateRenderbuffers", catch_unwind(||(self.version_4_5.createrenderbuffers)(n, renderbuffers)));
27363		#[cfg(feature = "diagnose")]
27364		if let Ok(ret) = ret {
27365			return to_result("glCreateRenderbuffers", ret, (self.version_4_5.geterror)());
27366		} else {
27367			return ret
27368		}
27369		#[cfg(not(feature = "diagnose"))]
27370		return ret;
27371	}
27372	#[inline(always)]
27373	fn glNamedRenderbufferStorage(&self, renderbuffer: GLuint, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
27374		let ret = process_catch("glNamedRenderbufferStorage", catch_unwind(||(self.version_4_5.namedrenderbufferstorage)(renderbuffer, internalformat, width, height)));
27375		#[cfg(feature = "diagnose")]
27376		if let Ok(ret) = ret {
27377			return to_result("glNamedRenderbufferStorage", ret, (self.version_4_5.geterror)());
27378		} else {
27379			return ret
27380		}
27381		#[cfg(not(feature = "diagnose"))]
27382		return ret;
27383	}
27384	#[inline(always)]
27385	fn glNamedRenderbufferStorageMultisample(&self, renderbuffer: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
27386		let ret = process_catch("glNamedRenderbufferStorageMultisample", catch_unwind(||(self.version_4_5.namedrenderbufferstoragemultisample)(renderbuffer, samples, internalformat, width, height)));
27387		#[cfg(feature = "diagnose")]
27388		if let Ok(ret) = ret {
27389			return to_result("glNamedRenderbufferStorageMultisample", ret, (self.version_4_5.geterror)());
27390		} else {
27391			return ret
27392		}
27393		#[cfg(not(feature = "diagnose"))]
27394		return ret;
27395	}
27396	#[inline(always)]
27397	fn glGetNamedRenderbufferParameteriv(&self, renderbuffer: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
27398		let ret = process_catch("glGetNamedRenderbufferParameteriv", catch_unwind(||(self.version_4_5.getnamedrenderbufferparameteriv)(renderbuffer, pname, params)));
27399		#[cfg(feature = "diagnose")]
27400		if let Ok(ret) = ret {
27401			return to_result("glGetNamedRenderbufferParameteriv", ret, (self.version_4_5.geterror)());
27402		} else {
27403			return ret
27404		}
27405		#[cfg(not(feature = "diagnose"))]
27406		return ret;
27407	}
27408	#[inline(always)]
27409	fn glCreateTextures(&self, target: GLenum, n: GLsizei, textures: *mut GLuint) -> Result<()> {
27410		let ret = process_catch("glCreateTextures", catch_unwind(||(self.version_4_5.createtextures)(target, n, textures)));
27411		#[cfg(feature = "diagnose")]
27412		if let Ok(ret) = ret {
27413			return to_result("glCreateTextures", ret, (self.version_4_5.geterror)());
27414		} else {
27415			return ret
27416		}
27417		#[cfg(not(feature = "diagnose"))]
27418		return ret;
27419	}
27420	#[inline(always)]
27421	fn glTextureBuffer(&self, texture: GLuint, internalformat: GLenum, buffer: GLuint) -> Result<()> {
27422		let ret = process_catch("glTextureBuffer", catch_unwind(||(self.version_4_5.texturebuffer)(texture, internalformat, buffer)));
27423		#[cfg(feature = "diagnose")]
27424		if let Ok(ret) = ret {
27425			return to_result("glTextureBuffer", ret, (self.version_4_5.geterror)());
27426		} else {
27427			return ret
27428		}
27429		#[cfg(not(feature = "diagnose"))]
27430		return ret;
27431	}
27432	#[inline(always)]
27433	fn glTextureBufferRange(&self, texture: GLuint, internalformat: GLenum, buffer: GLuint, offset: GLintptr, size: GLsizeiptr) -> Result<()> {
27434		let ret = process_catch("glTextureBufferRange", catch_unwind(||(self.version_4_5.texturebufferrange)(texture, internalformat, buffer, offset, size)));
27435		#[cfg(feature = "diagnose")]
27436		if let Ok(ret) = ret {
27437			return to_result("glTextureBufferRange", ret, (self.version_4_5.geterror)());
27438		} else {
27439			return ret
27440		}
27441		#[cfg(not(feature = "diagnose"))]
27442		return ret;
27443	}
27444	#[inline(always)]
27445	fn glTextureStorage1D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei) -> Result<()> {
27446		let ret = process_catch("glTextureStorage1D", catch_unwind(||(self.version_4_5.texturestorage1d)(texture, levels, internalformat, width)));
27447		#[cfg(feature = "diagnose")]
27448		if let Ok(ret) = ret {
27449			return to_result("glTextureStorage1D", ret, (self.version_4_5.geterror)());
27450		} else {
27451			return ret
27452		}
27453		#[cfg(not(feature = "diagnose"))]
27454		return ret;
27455	}
27456	#[inline(always)]
27457	fn glTextureStorage2D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) -> Result<()> {
27458		let ret = process_catch("glTextureStorage2D", catch_unwind(||(self.version_4_5.texturestorage2d)(texture, levels, internalformat, width, height)));
27459		#[cfg(feature = "diagnose")]
27460		if let Ok(ret) = ret {
27461			return to_result("glTextureStorage2D", ret, (self.version_4_5.geterror)());
27462		} else {
27463			return ret
27464		}
27465		#[cfg(not(feature = "diagnose"))]
27466		return ret;
27467	}
27468	#[inline(always)]
27469	fn glTextureStorage3D(&self, texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei) -> Result<()> {
27470		let ret = process_catch("glTextureStorage3D", catch_unwind(||(self.version_4_5.texturestorage3d)(texture, levels, internalformat, width, height, depth)));
27471		#[cfg(feature = "diagnose")]
27472		if let Ok(ret) = ret {
27473			return to_result("glTextureStorage3D", ret, (self.version_4_5.geterror)());
27474		} else {
27475			return ret
27476		}
27477		#[cfg(not(feature = "diagnose"))]
27478		return ret;
27479	}
27480	#[inline(always)]
27481	fn glTextureStorage2DMultisample(&self, texture: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
27482		let ret = process_catch("glTextureStorage2DMultisample", catch_unwind(||(self.version_4_5.texturestorage2dmultisample)(texture, samples, internalformat, width, height, fixedsamplelocations)));
27483		#[cfg(feature = "diagnose")]
27484		if let Ok(ret) = ret {
27485			return to_result("glTextureStorage2DMultisample", ret, (self.version_4_5.geterror)());
27486		} else {
27487			return ret
27488		}
27489		#[cfg(not(feature = "diagnose"))]
27490		return ret;
27491	}
27492	#[inline(always)]
27493	fn glTextureStorage3DMultisample(&self, texture: GLuint, samples: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei, depth: GLsizei, fixedsamplelocations: GLboolean) -> Result<()> {
27494		let ret = process_catch("glTextureStorage3DMultisample", catch_unwind(||(self.version_4_5.texturestorage3dmultisample)(texture, samples, internalformat, width, height, depth, fixedsamplelocations)));
27495		#[cfg(feature = "diagnose")]
27496		if let Ok(ret) = ret {
27497			return to_result("glTextureStorage3DMultisample", ret, (self.version_4_5.geterror)());
27498		} else {
27499			return ret
27500		}
27501		#[cfg(not(feature = "diagnose"))]
27502		return ret;
27503	}
27504	#[inline(always)]
27505	fn glTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
27506		let ret = process_catch("glTextureSubImage1D", catch_unwind(||(self.version_4_5.texturesubimage1d)(texture, level, xoffset, width, format, type_, pixels)));
27507		#[cfg(feature = "diagnose")]
27508		if let Ok(ret) = ret {
27509			return to_result("glTextureSubImage1D", ret, (self.version_4_5.geterror)());
27510		} else {
27511			return ret
27512		}
27513		#[cfg(not(feature = "diagnose"))]
27514		return ret;
27515	}
27516	#[inline(always)]
27517	fn glTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
27518		let ret = process_catch("glTextureSubImage2D", catch_unwind(||(self.version_4_5.texturesubimage2d)(texture, level, xoffset, yoffset, width, height, format, type_, pixels)));
27519		#[cfg(feature = "diagnose")]
27520		if let Ok(ret) = ret {
27521			return to_result("glTextureSubImage2D", ret, (self.version_4_5.geterror)());
27522		} else {
27523			return ret
27524		}
27525		#[cfg(not(feature = "diagnose"))]
27526		return ret;
27527	}
27528	#[inline(always)]
27529	fn glTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, pixels: *const c_void) -> Result<()> {
27530		let ret = process_catch("glTextureSubImage3D", catch_unwind(||(self.version_4_5.texturesubimage3d)(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, pixels)));
27531		#[cfg(feature = "diagnose")]
27532		if let Ok(ret) = ret {
27533			return to_result("glTextureSubImage3D", ret, (self.version_4_5.geterror)());
27534		} else {
27535			return ret
27536		}
27537		#[cfg(not(feature = "diagnose"))]
27538		return ret;
27539	}
27540	#[inline(always)]
27541	fn glCompressedTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, width: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
27542		let ret = process_catch("glCompressedTextureSubImage1D", catch_unwind(||(self.version_4_5.compressedtexturesubimage1d)(texture, level, xoffset, width, format, imageSize, data)));
27543		#[cfg(feature = "diagnose")]
27544		if let Ok(ret) = ret {
27545			return to_result("glCompressedTextureSubImage1D", ret, (self.version_4_5.geterror)());
27546		} else {
27547			return ret
27548		}
27549		#[cfg(not(feature = "diagnose"))]
27550		return ret;
27551	}
27552	#[inline(always)]
27553	fn glCompressedTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
27554		let ret = process_catch("glCompressedTextureSubImage2D", catch_unwind(||(self.version_4_5.compressedtexturesubimage2d)(texture, level, xoffset, yoffset, width, height, format, imageSize, data)));
27555		#[cfg(feature = "diagnose")]
27556		if let Ok(ret) = ret {
27557			return to_result("glCompressedTextureSubImage2D", ret, (self.version_4_5.geterror)());
27558		} else {
27559			return ret
27560		}
27561		#[cfg(not(feature = "diagnose"))]
27562		return ret;
27563	}
27564	#[inline(always)]
27565	fn glCompressedTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, imageSize: GLsizei, data: *const c_void) -> Result<()> {
27566		let ret = process_catch("glCompressedTextureSubImage3D", catch_unwind(||(self.version_4_5.compressedtexturesubimage3d)(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, imageSize, data)));
27567		#[cfg(feature = "diagnose")]
27568		if let Ok(ret) = ret {
27569			return to_result("glCompressedTextureSubImage3D", ret, (self.version_4_5.geterror)());
27570		} else {
27571			return ret
27572		}
27573		#[cfg(not(feature = "diagnose"))]
27574		return ret;
27575	}
27576	#[inline(always)]
27577	fn glCopyTextureSubImage1D(&self, texture: GLuint, level: GLint, xoffset: GLint, x: GLint, y: GLint, width: GLsizei) -> Result<()> {
27578		let ret = process_catch("glCopyTextureSubImage1D", catch_unwind(||(self.version_4_5.copytexturesubimage1d)(texture, level, xoffset, x, y, width)));
27579		#[cfg(feature = "diagnose")]
27580		if let Ok(ret) = ret {
27581			return to_result("glCopyTextureSubImage1D", ret, (self.version_4_5.geterror)());
27582		} else {
27583			return ret
27584		}
27585		#[cfg(not(feature = "diagnose"))]
27586		return ret;
27587	}
27588	#[inline(always)]
27589	fn glCopyTextureSubImage2D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
27590		let ret = process_catch("glCopyTextureSubImage2D", catch_unwind(||(self.version_4_5.copytexturesubimage2d)(texture, level, xoffset, yoffset, x, y, width, height)));
27591		#[cfg(feature = "diagnose")]
27592		if let Ok(ret) = ret {
27593			return to_result("glCopyTextureSubImage2D", ret, (self.version_4_5.geterror)());
27594		} else {
27595			return ret
27596		}
27597		#[cfg(not(feature = "diagnose"))]
27598		return ret;
27599	}
27600	#[inline(always)]
27601	fn glCopyTextureSubImage3D(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> Result<()> {
27602		let ret = process_catch("glCopyTextureSubImage3D", catch_unwind(||(self.version_4_5.copytexturesubimage3d)(texture, level, xoffset, yoffset, zoffset, x, y, width, height)));
27603		#[cfg(feature = "diagnose")]
27604		if let Ok(ret) = ret {
27605			return to_result("glCopyTextureSubImage3D", ret, (self.version_4_5.geterror)());
27606		} else {
27607			return ret
27608		}
27609		#[cfg(not(feature = "diagnose"))]
27610		return ret;
27611	}
27612	#[inline(always)]
27613	fn glTextureParameterf(&self, texture: GLuint, pname: GLenum, param: GLfloat) -> Result<()> {
27614		let ret = process_catch("glTextureParameterf", catch_unwind(||(self.version_4_5.textureparameterf)(texture, pname, param)));
27615		#[cfg(feature = "diagnose")]
27616		if let Ok(ret) = ret {
27617			return to_result("glTextureParameterf", ret, (self.version_4_5.geterror)());
27618		} else {
27619			return ret
27620		}
27621		#[cfg(not(feature = "diagnose"))]
27622		return ret;
27623	}
27624	#[inline(always)]
27625	fn glTextureParameterfv(&self, texture: GLuint, pname: GLenum, param: *const GLfloat) -> Result<()> {
27626		let ret = process_catch("glTextureParameterfv", catch_unwind(||(self.version_4_5.textureparameterfv)(texture, pname, param)));
27627		#[cfg(feature = "diagnose")]
27628		if let Ok(ret) = ret {
27629			return to_result("glTextureParameterfv", ret, (self.version_4_5.geterror)());
27630		} else {
27631			return ret
27632		}
27633		#[cfg(not(feature = "diagnose"))]
27634		return ret;
27635	}
27636	#[inline(always)]
27637	fn glTextureParameteri(&self, texture: GLuint, pname: GLenum, param: GLint) -> Result<()> {
27638		let ret = process_catch("glTextureParameteri", catch_unwind(||(self.version_4_5.textureparameteri)(texture, pname, param)));
27639		#[cfg(feature = "diagnose")]
27640		if let Ok(ret) = ret {
27641			return to_result("glTextureParameteri", ret, (self.version_4_5.geterror)());
27642		} else {
27643			return ret
27644		}
27645		#[cfg(not(feature = "diagnose"))]
27646		return ret;
27647	}
27648	#[inline(always)]
27649	fn glTextureParameterIiv(&self, texture: GLuint, pname: GLenum, params: *const GLint) -> Result<()> {
27650		let ret = process_catch("glTextureParameterIiv", catch_unwind(||(self.version_4_5.textureparameteriiv)(texture, pname, params)));
27651		#[cfg(feature = "diagnose")]
27652		if let Ok(ret) = ret {
27653			return to_result("glTextureParameterIiv", ret, (self.version_4_5.geterror)());
27654		} else {
27655			return ret
27656		}
27657		#[cfg(not(feature = "diagnose"))]
27658		return ret;
27659	}
27660	#[inline(always)]
27661	fn glTextureParameterIuiv(&self, texture: GLuint, pname: GLenum, params: *const GLuint) -> Result<()> {
27662		let ret = process_catch("glTextureParameterIuiv", catch_unwind(||(self.version_4_5.textureparameteriuiv)(texture, pname, params)));
27663		#[cfg(feature = "diagnose")]
27664		if let Ok(ret) = ret {
27665			return to_result("glTextureParameterIuiv", ret, (self.version_4_5.geterror)());
27666		} else {
27667			return ret
27668		}
27669		#[cfg(not(feature = "diagnose"))]
27670		return ret;
27671	}
27672	#[inline(always)]
27673	fn glTextureParameteriv(&self, texture: GLuint, pname: GLenum, param: *const GLint) -> Result<()> {
27674		let ret = process_catch("glTextureParameteriv", catch_unwind(||(self.version_4_5.textureparameteriv)(texture, pname, param)));
27675		#[cfg(feature = "diagnose")]
27676		if let Ok(ret) = ret {
27677			return to_result("glTextureParameteriv", ret, (self.version_4_5.geterror)());
27678		} else {
27679			return ret
27680		}
27681		#[cfg(not(feature = "diagnose"))]
27682		return ret;
27683	}
27684	#[inline(always)]
27685	fn glGenerateTextureMipmap(&self, texture: GLuint) -> Result<()> {
27686		let ret = process_catch("glGenerateTextureMipmap", catch_unwind(||(self.version_4_5.generatetexturemipmap)(texture)));
27687		#[cfg(feature = "diagnose")]
27688		if let Ok(ret) = ret {
27689			return to_result("glGenerateTextureMipmap", ret, (self.version_4_5.geterror)());
27690		} else {
27691			return ret
27692		}
27693		#[cfg(not(feature = "diagnose"))]
27694		return ret;
27695	}
27696	#[inline(always)]
27697	fn glBindTextureUnit(&self, unit: GLuint, texture: GLuint) -> Result<()> {
27698		let ret = process_catch("glBindTextureUnit", catch_unwind(||(self.version_4_5.bindtextureunit)(unit, texture)));
27699		#[cfg(feature = "diagnose")]
27700		if let Ok(ret) = ret {
27701			return to_result("glBindTextureUnit", ret, (self.version_4_5.geterror)());
27702		} else {
27703			return ret
27704		}
27705		#[cfg(not(feature = "diagnose"))]
27706		return ret;
27707	}
27708	#[inline(always)]
27709	fn glGetTextureImage(&self, texture: GLuint, level: GLint, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
27710		let ret = process_catch("glGetTextureImage", catch_unwind(||(self.version_4_5.gettextureimage)(texture, level, format, type_, bufSize, pixels)));
27711		#[cfg(feature = "diagnose")]
27712		if let Ok(ret) = ret {
27713			return to_result("glGetTextureImage", ret, (self.version_4_5.geterror)());
27714		} else {
27715			return ret
27716		}
27717		#[cfg(not(feature = "diagnose"))]
27718		return ret;
27719	}
27720	#[inline(always)]
27721	fn glGetCompressedTextureImage(&self, texture: GLuint, level: GLint, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
27722		let ret = process_catch("glGetCompressedTextureImage", catch_unwind(||(self.version_4_5.getcompressedtextureimage)(texture, level, bufSize, pixels)));
27723		#[cfg(feature = "diagnose")]
27724		if let Ok(ret) = ret {
27725			return to_result("glGetCompressedTextureImage", ret, (self.version_4_5.geterror)());
27726		} else {
27727			return ret
27728		}
27729		#[cfg(not(feature = "diagnose"))]
27730		return ret;
27731	}
27732	#[inline(always)]
27733	fn glGetTextureLevelParameterfv(&self, texture: GLuint, level: GLint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
27734		let ret = process_catch("glGetTextureLevelParameterfv", catch_unwind(||(self.version_4_5.gettexturelevelparameterfv)(texture, level, pname, params)));
27735		#[cfg(feature = "diagnose")]
27736		if let Ok(ret) = ret {
27737			return to_result("glGetTextureLevelParameterfv", ret, (self.version_4_5.geterror)());
27738		} else {
27739			return ret
27740		}
27741		#[cfg(not(feature = "diagnose"))]
27742		return ret;
27743	}
27744	#[inline(always)]
27745	fn glGetTextureLevelParameteriv(&self, texture: GLuint, level: GLint, pname: GLenum, params: *mut GLint) -> Result<()> {
27746		let ret = process_catch("glGetTextureLevelParameteriv", catch_unwind(||(self.version_4_5.gettexturelevelparameteriv)(texture, level, pname, params)));
27747		#[cfg(feature = "diagnose")]
27748		if let Ok(ret) = ret {
27749			return to_result("glGetTextureLevelParameteriv", ret, (self.version_4_5.geterror)());
27750		} else {
27751			return ret
27752		}
27753		#[cfg(not(feature = "diagnose"))]
27754		return ret;
27755	}
27756	#[inline(always)]
27757	fn glGetTextureParameterfv(&self, texture: GLuint, pname: GLenum, params: *mut GLfloat) -> Result<()> {
27758		let ret = process_catch("glGetTextureParameterfv", catch_unwind(||(self.version_4_5.gettextureparameterfv)(texture, pname, params)));
27759		#[cfg(feature = "diagnose")]
27760		if let Ok(ret) = ret {
27761			return to_result("glGetTextureParameterfv", ret, (self.version_4_5.geterror)());
27762		} else {
27763			return ret
27764		}
27765		#[cfg(not(feature = "diagnose"))]
27766		return ret;
27767	}
27768	#[inline(always)]
27769	fn glGetTextureParameterIiv(&self, texture: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
27770		let ret = process_catch("glGetTextureParameterIiv", catch_unwind(||(self.version_4_5.gettextureparameteriiv)(texture, pname, params)));
27771		#[cfg(feature = "diagnose")]
27772		if let Ok(ret) = ret {
27773			return to_result("glGetTextureParameterIiv", ret, (self.version_4_5.geterror)());
27774		} else {
27775			return ret
27776		}
27777		#[cfg(not(feature = "diagnose"))]
27778		return ret;
27779	}
27780	#[inline(always)]
27781	fn glGetTextureParameterIuiv(&self, texture: GLuint, pname: GLenum, params: *mut GLuint) -> Result<()> {
27782		let ret = process_catch("glGetTextureParameterIuiv", catch_unwind(||(self.version_4_5.gettextureparameteriuiv)(texture, pname, params)));
27783		#[cfg(feature = "diagnose")]
27784		if let Ok(ret) = ret {
27785			return to_result("glGetTextureParameterIuiv", ret, (self.version_4_5.geterror)());
27786		} else {
27787			return ret
27788		}
27789		#[cfg(not(feature = "diagnose"))]
27790		return ret;
27791	}
27792	#[inline(always)]
27793	fn glGetTextureParameteriv(&self, texture: GLuint, pname: GLenum, params: *mut GLint) -> Result<()> {
27794		let ret = process_catch("glGetTextureParameteriv", catch_unwind(||(self.version_4_5.gettextureparameteriv)(texture, pname, params)));
27795		#[cfg(feature = "diagnose")]
27796		if let Ok(ret) = ret {
27797			return to_result("glGetTextureParameteriv", ret, (self.version_4_5.geterror)());
27798		} else {
27799			return ret
27800		}
27801		#[cfg(not(feature = "diagnose"))]
27802		return ret;
27803	}
27804	#[inline(always)]
27805	fn glCreateVertexArrays(&self, n: GLsizei, arrays: *mut GLuint) -> Result<()> {
27806		let ret = process_catch("glCreateVertexArrays", catch_unwind(||(self.version_4_5.createvertexarrays)(n, arrays)));
27807		#[cfg(feature = "diagnose")]
27808		if let Ok(ret) = ret {
27809			return to_result("glCreateVertexArrays", ret, (self.version_4_5.geterror)());
27810		} else {
27811			return ret
27812		}
27813		#[cfg(not(feature = "diagnose"))]
27814		return ret;
27815	}
27816	#[inline(always)]
27817	fn glDisableVertexArrayAttrib(&self, vaobj: GLuint, index: GLuint) -> Result<()> {
27818		let ret = process_catch("glDisableVertexArrayAttrib", catch_unwind(||(self.version_4_5.disablevertexarrayattrib)(vaobj, index)));
27819		#[cfg(feature = "diagnose")]
27820		if let Ok(ret) = ret {
27821			return to_result("glDisableVertexArrayAttrib", ret, (self.version_4_5.geterror)());
27822		} else {
27823			return ret
27824		}
27825		#[cfg(not(feature = "diagnose"))]
27826		return ret;
27827	}
27828	#[inline(always)]
27829	fn glEnableVertexArrayAttrib(&self, vaobj: GLuint, index: GLuint) -> Result<()> {
27830		let ret = process_catch("glEnableVertexArrayAttrib", catch_unwind(||(self.version_4_5.enablevertexarrayattrib)(vaobj, index)));
27831		#[cfg(feature = "diagnose")]
27832		if let Ok(ret) = ret {
27833			return to_result("glEnableVertexArrayAttrib", ret, (self.version_4_5.geterror)());
27834		} else {
27835			return ret
27836		}
27837		#[cfg(not(feature = "diagnose"))]
27838		return ret;
27839	}
27840	#[inline(always)]
27841	fn glVertexArrayElementBuffer(&self, vaobj: GLuint, buffer: GLuint) -> Result<()> {
27842		let ret = process_catch("glVertexArrayElementBuffer", catch_unwind(||(self.version_4_5.vertexarrayelementbuffer)(vaobj, buffer)));
27843		#[cfg(feature = "diagnose")]
27844		if let Ok(ret) = ret {
27845			return to_result("glVertexArrayElementBuffer", ret, (self.version_4_5.geterror)());
27846		} else {
27847			return ret
27848		}
27849		#[cfg(not(feature = "diagnose"))]
27850		return ret;
27851	}
27852	#[inline(always)]
27853	fn glVertexArrayVertexBuffer(&self, vaobj: GLuint, bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei) -> Result<()> {
27854		let ret = process_catch("glVertexArrayVertexBuffer", catch_unwind(||(self.version_4_5.vertexarrayvertexbuffer)(vaobj, bindingindex, buffer, offset, stride)));
27855		#[cfg(feature = "diagnose")]
27856		if let Ok(ret) = ret {
27857			return to_result("glVertexArrayVertexBuffer", ret, (self.version_4_5.geterror)());
27858		} else {
27859			return ret
27860		}
27861		#[cfg(not(feature = "diagnose"))]
27862		return ret;
27863	}
27864	#[inline(always)]
27865	fn glVertexArrayVertexBuffers(&self, vaobj: GLuint, first: GLuint, count: GLsizei, buffers: *const GLuint, offsets: *const GLintptr, strides: *const GLsizei) -> Result<()> {
27866		let ret = process_catch("glVertexArrayVertexBuffers", catch_unwind(||(self.version_4_5.vertexarrayvertexbuffers)(vaobj, first, count, buffers, offsets, strides)));
27867		#[cfg(feature = "diagnose")]
27868		if let Ok(ret) = ret {
27869			return to_result("glVertexArrayVertexBuffers", ret, (self.version_4_5.geterror)());
27870		} else {
27871			return ret
27872		}
27873		#[cfg(not(feature = "diagnose"))]
27874		return ret;
27875	}
27876	#[inline(always)]
27877	fn glVertexArrayAttribBinding(&self, vaobj: GLuint, attribindex: GLuint, bindingindex: GLuint) -> Result<()> {
27878		let ret = process_catch("glVertexArrayAttribBinding", catch_unwind(||(self.version_4_5.vertexarrayattribbinding)(vaobj, attribindex, bindingindex)));
27879		#[cfg(feature = "diagnose")]
27880		if let Ok(ret) = ret {
27881			return to_result("glVertexArrayAttribBinding", ret, (self.version_4_5.geterror)());
27882		} else {
27883			return ret
27884		}
27885		#[cfg(not(feature = "diagnose"))]
27886		return ret;
27887	}
27888	#[inline(always)]
27889	fn glVertexArrayAttribFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, relativeoffset: GLuint) -> Result<()> {
27890		let ret = process_catch("glVertexArrayAttribFormat", catch_unwind(||(self.version_4_5.vertexarrayattribformat)(vaobj, attribindex, size, type_, normalized, relativeoffset)));
27891		#[cfg(feature = "diagnose")]
27892		if let Ok(ret) = ret {
27893			return to_result("glVertexArrayAttribFormat", ret, (self.version_4_5.geterror)());
27894		} else {
27895			return ret
27896		}
27897		#[cfg(not(feature = "diagnose"))]
27898		return ret;
27899	}
27900	#[inline(always)]
27901	fn glVertexArrayAttribIFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()> {
27902		let ret = process_catch("glVertexArrayAttribIFormat", catch_unwind(||(self.version_4_5.vertexarrayattribiformat)(vaobj, attribindex, size, type_, relativeoffset)));
27903		#[cfg(feature = "diagnose")]
27904		if let Ok(ret) = ret {
27905			return to_result("glVertexArrayAttribIFormat", ret, (self.version_4_5.geterror)());
27906		} else {
27907			return ret
27908		}
27909		#[cfg(not(feature = "diagnose"))]
27910		return ret;
27911	}
27912	#[inline(always)]
27913	fn glVertexArrayAttribLFormat(&self, vaobj: GLuint, attribindex: GLuint, size: GLint, type_: GLenum, relativeoffset: GLuint) -> Result<()> {
27914		let ret = process_catch("glVertexArrayAttribLFormat", catch_unwind(||(self.version_4_5.vertexarrayattriblformat)(vaobj, attribindex, size, type_, relativeoffset)));
27915		#[cfg(feature = "diagnose")]
27916		if let Ok(ret) = ret {
27917			return to_result("glVertexArrayAttribLFormat", ret, (self.version_4_5.geterror)());
27918		} else {
27919			return ret
27920		}
27921		#[cfg(not(feature = "diagnose"))]
27922		return ret;
27923	}
27924	#[inline(always)]
27925	fn glVertexArrayBindingDivisor(&self, vaobj: GLuint, bindingindex: GLuint, divisor: GLuint) -> Result<()> {
27926		let ret = process_catch("glVertexArrayBindingDivisor", catch_unwind(||(self.version_4_5.vertexarraybindingdivisor)(vaobj, bindingindex, divisor)));
27927		#[cfg(feature = "diagnose")]
27928		if let Ok(ret) = ret {
27929			return to_result("glVertexArrayBindingDivisor", ret, (self.version_4_5.geterror)());
27930		} else {
27931			return ret
27932		}
27933		#[cfg(not(feature = "diagnose"))]
27934		return ret;
27935	}
27936	#[inline(always)]
27937	fn glGetVertexArrayiv(&self, vaobj: GLuint, pname: GLenum, param: *mut GLint) -> Result<()> {
27938		let ret = process_catch("glGetVertexArrayiv", catch_unwind(||(self.version_4_5.getvertexarrayiv)(vaobj, pname, param)));
27939		#[cfg(feature = "diagnose")]
27940		if let Ok(ret) = ret {
27941			return to_result("glGetVertexArrayiv", ret, (self.version_4_5.geterror)());
27942		} else {
27943			return ret
27944		}
27945		#[cfg(not(feature = "diagnose"))]
27946		return ret;
27947	}
27948	#[inline(always)]
27949	fn glGetVertexArrayIndexediv(&self, vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint) -> Result<()> {
27950		let ret = process_catch("glGetVertexArrayIndexediv", catch_unwind(||(self.version_4_5.getvertexarrayindexediv)(vaobj, index, pname, param)));
27951		#[cfg(feature = "diagnose")]
27952		if let Ok(ret) = ret {
27953			return to_result("glGetVertexArrayIndexediv", ret, (self.version_4_5.geterror)());
27954		} else {
27955			return ret
27956		}
27957		#[cfg(not(feature = "diagnose"))]
27958		return ret;
27959	}
27960	#[inline(always)]
27961	fn glGetVertexArrayIndexed64iv(&self, vaobj: GLuint, index: GLuint, pname: GLenum, param: *mut GLint64) -> Result<()> {
27962		let ret = process_catch("glGetVertexArrayIndexed64iv", catch_unwind(||(self.version_4_5.getvertexarrayindexed64iv)(vaobj, index, pname, param)));
27963		#[cfg(feature = "diagnose")]
27964		if let Ok(ret) = ret {
27965			return to_result("glGetVertexArrayIndexed64iv", ret, (self.version_4_5.geterror)());
27966		} else {
27967			return ret
27968		}
27969		#[cfg(not(feature = "diagnose"))]
27970		return ret;
27971	}
27972	#[inline(always)]
27973	fn glCreateSamplers(&self, n: GLsizei, samplers: *mut GLuint) -> Result<()> {
27974		let ret = process_catch("glCreateSamplers", catch_unwind(||(self.version_4_5.createsamplers)(n, samplers)));
27975		#[cfg(feature = "diagnose")]
27976		if let Ok(ret) = ret {
27977			return to_result("glCreateSamplers", ret, (self.version_4_5.geterror)());
27978		} else {
27979			return ret
27980		}
27981		#[cfg(not(feature = "diagnose"))]
27982		return ret;
27983	}
27984	#[inline(always)]
27985	fn glCreateProgramPipelines(&self, n: GLsizei, pipelines: *mut GLuint) -> Result<()> {
27986		let ret = process_catch("glCreateProgramPipelines", catch_unwind(||(self.version_4_5.createprogrampipelines)(n, pipelines)));
27987		#[cfg(feature = "diagnose")]
27988		if let Ok(ret) = ret {
27989			return to_result("glCreateProgramPipelines", ret, (self.version_4_5.geterror)());
27990		} else {
27991			return ret
27992		}
27993		#[cfg(not(feature = "diagnose"))]
27994		return ret;
27995	}
27996	#[inline(always)]
27997	fn glCreateQueries(&self, target: GLenum, n: GLsizei, ids: *mut GLuint) -> Result<()> {
27998		let ret = process_catch("glCreateQueries", catch_unwind(||(self.version_4_5.createqueries)(target, n, ids)));
27999		#[cfg(feature = "diagnose")]
28000		if let Ok(ret) = ret {
28001			return to_result("glCreateQueries", ret, (self.version_4_5.geterror)());
28002		} else {
28003			return ret
28004		}
28005		#[cfg(not(feature = "diagnose"))]
28006		return ret;
28007	}
28008	#[inline(always)]
28009	fn glGetQueryBufferObjecti64v(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()> {
28010		let ret = process_catch("glGetQueryBufferObjecti64v", catch_unwind(||(self.version_4_5.getquerybufferobjecti64v)(id, buffer, pname, offset)));
28011		#[cfg(feature = "diagnose")]
28012		if let Ok(ret) = ret {
28013			return to_result("glGetQueryBufferObjecti64v", ret, (self.version_4_5.geterror)());
28014		} else {
28015			return ret
28016		}
28017		#[cfg(not(feature = "diagnose"))]
28018		return ret;
28019	}
28020	#[inline(always)]
28021	fn glGetQueryBufferObjectiv(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()> {
28022		let ret = process_catch("glGetQueryBufferObjectiv", catch_unwind(||(self.version_4_5.getquerybufferobjectiv)(id, buffer, pname, offset)));
28023		#[cfg(feature = "diagnose")]
28024		if let Ok(ret) = ret {
28025			return to_result("glGetQueryBufferObjectiv", ret, (self.version_4_5.geterror)());
28026		} else {
28027			return ret
28028		}
28029		#[cfg(not(feature = "diagnose"))]
28030		return ret;
28031	}
28032	#[inline(always)]
28033	fn glGetQueryBufferObjectui64v(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()> {
28034		let ret = process_catch("glGetQueryBufferObjectui64v", catch_unwind(||(self.version_4_5.getquerybufferobjectui64v)(id, buffer, pname, offset)));
28035		#[cfg(feature = "diagnose")]
28036		if let Ok(ret) = ret {
28037			return to_result("glGetQueryBufferObjectui64v", ret, (self.version_4_5.geterror)());
28038		} else {
28039			return ret
28040		}
28041		#[cfg(not(feature = "diagnose"))]
28042		return ret;
28043	}
28044	#[inline(always)]
28045	fn glGetQueryBufferObjectuiv(&self, id: GLuint, buffer: GLuint, pname: GLenum, offset: GLintptr) -> Result<()> {
28046		let ret = process_catch("glGetQueryBufferObjectuiv", catch_unwind(||(self.version_4_5.getquerybufferobjectuiv)(id, buffer, pname, offset)));
28047		#[cfg(feature = "diagnose")]
28048		if let Ok(ret) = ret {
28049			return to_result("glGetQueryBufferObjectuiv", ret, (self.version_4_5.geterror)());
28050		} else {
28051			return ret
28052		}
28053		#[cfg(not(feature = "diagnose"))]
28054		return ret;
28055	}
28056	#[inline(always)]
28057	fn glMemoryBarrierByRegion(&self, barriers: GLbitfield) -> Result<()> {
28058		let ret = process_catch("glMemoryBarrierByRegion", catch_unwind(||(self.version_4_5.memorybarrierbyregion)(barriers)));
28059		#[cfg(feature = "diagnose")]
28060		if let Ok(ret) = ret {
28061			return to_result("glMemoryBarrierByRegion", ret, (self.version_4_5.geterror)());
28062		} else {
28063			return ret
28064		}
28065		#[cfg(not(feature = "diagnose"))]
28066		return ret;
28067	}
28068	#[inline(always)]
28069	fn glGetTextureSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
28070		let ret = process_catch("glGetTextureSubImage", catch_unwind(||(self.version_4_5.gettexturesubimage)(texture, level, xoffset, yoffset, zoffset, width, height, depth, format, type_, bufSize, pixels)));
28071		#[cfg(feature = "diagnose")]
28072		if let Ok(ret) = ret {
28073			return to_result("glGetTextureSubImage", ret, (self.version_4_5.geterror)());
28074		} else {
28075			return ret
28076		}
28077		#[cfg(not(feature = "diagnose"))]
28078		return ret;
28079	}
28080	#[inline(always)]
28081	fn glGetCompressedTextureSubImage(&self, texture: GLuint, level: GLint, xoffset: GLint, yoffset: GLint, zoffset: GLint, width: GLsizei, height: GLsizei, depth: GLsizei, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
28082		let ret = process_catch("glGetCompressedTextureSubImage", catch_unwind(||(self.version_4_5.getcompressedtexturesubimage)(texture, level, xoffset, yoffset, zoffset, width, height, depth, bufSize, pixels)));
28083		#[cfg(feature = "diagnose")]
28084		if let Ok(ret) = ret {
28085			return to_result("glGetCompressedTextureSubImage", ret, (self.version_4_5.geterror)());
28086		} else {
28087			return ret
28088		}
28089		#[cfg(not(feature = "diagnose"))]
28090		return ret;
28091	}
28092	#[inline(always)]
28093	fn glGetGraphicsResetStatus(&self) -> Result<GLenum> {
28094		let ret = process_catch("glGetGraphicsResetStatus", catch_unwind(||(self.version_4_5.getgraphicsresetstatus)()));
28095		#[cfg(feature = "diagnose")]
28096		if let Ok(ret) = ret {
28097			return to_result("glGetGraphicsResetStatus", ret, (self.version_4_5.geterror)());
28098		} else {
28099			return ret
28100		}
28101		#[cfg(not(feature = "diagnose"))]
28102		return ret;
28103	}
28104	#[inline(always)]
28105	fn glGetnCompressedTexImage(&self, target: GLenum, lod: GLint, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
28106		let ret = process_catch("glGetnCompressedTexImage", catch_unwind(||(self.version_4_5.getncompressedteximage)(target, lod, bufSize, pixels)));
28107		#[cfg(feature = "diagnose")]
28108		if let Ok(ret) = ret {
28109			return to_result("glGetnCompressedTexImage", ret, (self.version_4_5.geterror)());
28110		} else {
28111			return ret
28112		}
28113		#[cfg(not(feature = "diagnose"))]
28114		return ret;
28115	}
28116	#[inline(always)]
28117	fn glGetnTexImage(&self, target: GLenum, level: GLint, format: GLenum, type_: GLenum, bufSize: GLsizei, pixels: *mut c_void) -> Result<()> {
28118		let ret = process_catch("glGetnTexImage", catch_unwind(||(self.version_4_5.getnteximage)(target, level, format, type_, bufSize, pixels)));
28119		#[cfg(feature = "diagnose")]
28120		if let Ok(ret) = ret {
28121			return to_result("glGetnTexImage", ret, (self.version_4_5.geterror)());
28122		} else {
28123			return ret
28124		}
28125		#[cfg(not(feature = "diagnose"))]
28126		return ret;
28127	}
28128	#[inline(always)]
28129	fn glGetnUniformdv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLdouble) -> Result<()> {
28130		let ret = process_catch("glGetnUniformdv", catch_unwind(||(self.version_4_5.getnuniformdv)(program, location, bufSize, params)));
28131		#[cfg(feature = "diagnose")]
28132		if let Ok(ret) = ret {
28133			return to_result("glGetnUniformdv", ret, (self.version_4_5.geterror)());
28134		} else {
28135			return ret
28136		}
28137		#[cfg(not(feature = "diagnose"))]
28138		return ret;
28139	}
28140	#[inline(always)]
28141	fn glGetnUniformfv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLfloat) -> Result<()> {
28142		let ret = process_catch("glGetnUniformfv", catch_unwind(||(self.version_4_5.getnuniformfv)(program, location, bufSize, params)));
28143		#[cfg(feature = "diagnose")]
28144		if let Ok(ret) = ret {
28145			return to_result("glGetnUniformfv", ret, (self.version_4_5.geterror)());
28146		} else {
28147			return ret
28148		}
28149		#[cfg(not(feature = "diagnose"))]
28150		return ret;
28151	}
28152	#[inline(always)]
28153	fn glGetnUniformiv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLint) -> Result<()> {
28154		let ret = process_catch("glGetnUniformiv", catch_unwind(||(self.version_4_5.getnuniformiv)(program, location, bufSize, params)));
28155		#[cfg(feature = "diagnose")]
28156		if let Ok(ret) = ret {
28157			return to_result("glGetnUniformiv", ret, (self.version_4_5.geterror)());
28158		} else {
28159			return ret
28160		}
28161		#[cfg(not(feature = "diagnose"))]
28162		return ret;
28163	}
28164	#[inline(always)]
28165	fn glGetnUniformuiv(&self, program: GLuint, location: GLint, bufSize: GLsizei, params: *mut GLuint) -> Result<()> {
28166		let ret = process_catch("glGetnUniformuiv", catch_unwind(||(self.version_4_5.getnuniformuiv)(program, location, bufSize, params)));
28167		#[cfg(feature = "diagnose")]
28168		if let Ok(ret) = ret {
28169			return to_result("glGetnUniformuiv", ret, (self.version_4_5.geterror)());
28170		} else {
28171			return ret
28172		}
28173		#[cfg(not(feature = "diagnose"))]
28174		return ret;
28175	}
28176	#[inline(always)]
28177	fn glReadnPixels(&self, x: GLint, y: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, bufSize: GLsizei, data: *mut c_void) -> Result<()> {
28178		let ret = process_catch("glReadnPixels", catch_unwind(||(self.version_4_5.readnpixels)(x, y, width, height, format, type_, bufSize, data)));
28179		#[cfg(feature = "diagnose")]
28180		if let Ok(ret) = ret {
28181			return to_result("glReadnPixels", ret, (self.version_4_5.geterror)());
28182		} else {
28183			return ret
28184		}
28185		#[cfg(not(feature = "diagnose"))]
28186		return ret;
28187	}
28188	#[inline(always)]
28189	fn glGetnMapdv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLdouble) -> Result<()> {
28190		let ret = process_catch("glGetnMapdv", catch_unwind(||(self.version_4_5.getnmapdv)(target, query, bufSize, v)));
28191		#[cfg(feature = "diagnose")]
28192		if let Ok(ret) = ret {
28193			return to_result("glGetnMapdv", ret, (self.version_4_5.geterror)());
28194		} else {
28195			return ret
28196		}
28197		#[cfg(not(feature = "diagnose"))]
28198		return ret;
28199	}
28200	#[inline(always)]
28201	fn glGetnMapfv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLfloat) -> Result<()> {
28202		let ret = process_catch("glGetnMapfv", catch_unwind(||(self.version_4_5.getnmapfv)(target, query, bufSize, v)));
28203		#[cfg(feature = "diagnose")]
28204		if let Ok(ret) = ret {
28205			return to_result("glGetnMapfv", ret, (self.version_4_5.geterror)());
28206		} else {
28207			return ret
28208		}
28209		#[cfg(not(feature = "diagnose"))]
28210		return ret;
28211	}
28212	#[inline(always)]
28213	fn glGetnMapiv(&self, target: GLenum, query: GLenum, bufSize: GLsizei, v: *mut GLint) -> Result<()> {
28214		let ret = process_catch("glGetnMapiv", catch_unwind(||(self.version_4_5.getnmapiv)(target, query, bufSize, v)));
28215		#[cfg(feature = "diagnose")]
28216		if let Ok(ret) = ret {
28217			return to_result("glGetnMapiv", ret, (self.version_4_5.geterror)());
28218		} else {
28219			return ret
28220		}
28221		#[cfg(not(feature = "diagnose"))]
28222		return ret;
28223	}
28224	#[inline(always)]
28225	fn glGetnPixelMapfv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLfloat) -> Result<()> {
28226		let ret = process_catch("glGetnPixelMapfv", catch_unwind(||(self.version_4_5.getnpixelmapfv)(map, bufSize, values)));
28227		#[cfg(feature = "diagnose")]
28228		if let Ok(ret) = ret {
28229			return to_result("glGetnPixelMapfv", ret, (self.version_4_5.geterror)());
28230		} else {
28231			return ret
28232		}
28233		#[cfg(not(feature = "diagnose"))]
28234		return ret;
28235	}
28236	#[inline(always)]
28237	fn glGetnPixelMapuiv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLuint) -> Result<()> {
28238		let ret = process_catch("glGetnPixelMapuiv", catch_unwind(||(self.version_4_5.getnpixelmapuiv)(map, bufSize, values)));
28239		#[cfg(feature = "diagnose")]
28240		if let Ok(ret) = ret {
28241			return to_result("glGetnPixelMapuiv", ret, (self.version_4_5.geterror)());
28242		} else {
28243			return ret
28244		}
28245		#[cfg(not(feature = "diagnose"))]
28246		return ret;
28247	}
28248	#[inline(always)]
28249	fn glGetnPixelMapusv(&self, map: GLenum, bufSize: GLsizei, values: *mut GLushort) -> Result<()> {
28250		let ret = process_catch("glGetnPixelMapusv", catch_unwind(||(self.version_4_5.getnpixelmapusv)(map, bufSize, values)));
28251		#[cfg(feature = "diagnose")]
28252		if let Ok(ret) = ret {
28253			return to_result("glGetnPixelMapusv", ret, (self.version_4_5.geterror)());
28254		} else {
28255			return ret
28256		}
28257		#[cfg(not(feature = "diagnose"))]
28258		return ret;
28259	}
28260	#[inline(always)]
28261	fn glGetnPolygonStipple(&self, bufSize: GLsizei, pattern: *mut GLubyte) -> Result<()> {
28262		let ret = process_catch("glGetnPolygonStipple", catch_unwind(||(self.version_4_5.getnpolygonstipple)(bufSize, pattern)));
28263		#[cfg(feature = "diagnose")]
28264		if let Ok(ret) = ret {
28265			return to_result("glGetnPolygonStipple", ret, (self.version_4_5.geterror)());
28266		} else {
28267			return ret
28268		}
28269		#[cfg(not(feature = "diagnose"))]
28270		return ret;
28271	}
28272	#[inline(always)]
28273	fn glGetnColorTable(&self, target: GLenum, format: GLenum, type_: GLenum, bufSize: GLsizei, table: *mut c_void) -> Result<()> {
28274		let ret = process_catch("glGetnColorTable", catch_unwind(||(self.version_4_5.getncolortable)(target, format, type_, bufSize, table)));
28275		#[cfg(feature = "diagnose")]
28276		if let Ok(ret) = ret {
28277			return to_result("glGetnColorTable", ret, (self.version_4_5.geterror)());
28278		} else {
28279			return ret
28280		}
28281		#[cfg(not(feature = "diagnose"))]
28282		return ret;
28283	}
28284	#[inline(always)]
28285	fn glGetnConvolutionFilter(&self, target: GLenum, format: GLenum, type_: GLenum, bufSize: GLsizei, image: *mut c_void) -> Result<()> {
28286		let ret = process_catch("glGetnConvolutionFilter", catch_unwind(||(self.version_4_5.getnconvolutionfilter)(target, format, type_, bufSize, image)));
28287		#[cfg(feature = "diagnose")]
28288		if let Ok(ret) = ret {
28289			return to_result("glGetnConvolutionFilter", ret, (self.version_4_5.geterror)());
28290		} else {
28291			return ret
28292		}
28293		#[cfg(not(feature = "diagnose"))]
28294		return ret;
28295	}
28296	#[inline(always)]
28297	fn glGetnSeparableFilter(&self, target: GLenum, format: GLenum, type_: GLenum, rowBufSize: GLsizei, row: *mut c_void, columnBufSize: GLsizei, column: *mut c_void, span: *mut c_void) -> Result<()> {
28298		let ret = process_catch("glGetnSeparableFilter", catch_unwind(||(self.version_4_5.getnseparablefilter)(target, format, type_, rowBufSize, row, columnBufSize, column, span)));
28299		#[cfg(feature = "diagnose")]
28300		if let Ok(ret) = ret {
28301			return to_result("glGetnSeparableFilter", ret, (self.version_4_5.geterror)());
28302		} else {
28303			return ret
28304		}
28305		#[cfg(not(feature = "diagnose"))]
28306		return ret;
28307	}
28308	#[inline(always)]
28309	fn glGetnHistogram(&self, target: GLenum, reset: GLboolean, format: GLenum, type_: GLenum, bufSize: GLsizei, values: *mut c_void) -> Result<()> {
28310		let ret = process_catch("glGetnHistogram", catch_unwind(||(self.version_4_5.getnhistogram)(target, reset, format, type_, bufSize, values)));
28311		#[cfg(feature = "diagnose")]
28312		if let Ok(ret) = ret {
28313			return to_result("glGetnHistogram", ret, (self.version_4_5.geterror)());
28314		} else {
28315			return ret
28316		}
28317		#[cfg(not(feature = "diagnose"))]
28318		return ret;
28319	}
28320	#[inline(always)]
28321	fn glGetnMinmax(&self, target: GLenum, reset: GLboolean, format: GLenum, type_: GLenum, bufSize: GLsizei, values: *mut c_void) -> Result<()> {
28322		let ret = process_catch("glGetnMinmax", catch_unwind(||(self.version_4_5.getnminmax)(target, reset, format, type_, bufSize, values)));
28323		#[cfg(feature = "diagnose")]
28324		if let Ok(ret) = ret {
28325			return to_result("glGetnMinmax", ret, (self.version_4_5.geterror)());
28326		} else {
28327			return ret
28328		}
28329		#[cfg(not(feature = "diagnose"))]
28330		return ret;
28331	}
28332	#[inline(always)]
28333	fn glTextureBarrier(&self) -> Result<()> {
28334		let ret = process_catch("glTextureBarrier", catch_unwind(||(self.version_4_5.texturebarrier)()));
28335		#[cfg(feature = "diagnose")]
28336		if let Ok(ret) = ret {
28337			return to_result("glTextureBarrier", ret, (self.version_4_5.geterror)());
28338		} else {
28339			return ret
28340		}
28341		#[cfg(not(feature = "diagnose"))]
28342		return ret;
28343	}
28344}
28345
28346impl GL_4_6 for GLCore {
28347	#[inline(always)]
28348	fn glGetError(&self) -> GLenum {
28349		(self.version_4_6.geterror)()
28350	}
28351	#[inline(always)]
28352	fn glSpecializeShader(&self, shader: GLuint, pEntryPoint: *const GLchar, numSpecializationConstants: GLuint, pConstantIndex: *const GLuint, pConstantValue: *const GLuint) -> Result<()> {
28353		let ret = process_catch("glSpecializeShader", catch_unwind(||(self.version_4_6.specializeshader)(shader, pEntryPoint, numSpecializationConstants, pConstantIndex, pConstantValue)));
28354		#[cfg(feature = "diagnose")]
28355		if let Ok(ret) = ret {
28356			return to_result("glSpecializeShader", ret, (self.version_4_6.geterror)());
28357		} else {
28358			return ret
28359		}
28360		#[cfg(not(feature = "diagnose"))]
28361		return ret;
28362	}
28363	#[inline(always)]
28364	fn glMultiDrawArraysIndirectCount(&self, mode: GLenum, indirect: *const c_void, drawcount: GLintptr, maxdrawcount: GLsizei, stride: GLsizei) -> Result<()> {
28365		let ret = process_catch("glMultiDrawArraysIndirectCount", catch_unwind(||(self.version_4_6.multidrawarraysindirectcount)(mode, indirect, drawcount, maxdrawcount, stride)));
28366		#[cfg(feature = "diagnose")]
28367		if let Ok(ret) = ret {
28368			return to_result("glMultiDrawArraysIndirectCount", ret, (self.version_4_6.geterror)());
28369		} else {
28370			return ret
28371		}
28372		#[cfg(not(feature = "diagnose"))]
28373		return ret;
28374	}
28375	#[inline(always)]
28376	fn glMultiDrawElementsIndirectCount(&self, mode: GLenum, type_: GLenum, indirect: *const c_void, drawcount: GLintptr, maxdrawcount: GLsizei, stride: GLsizei) -> Result<()> {
28377		let ret = process_catch("glMultiDrawElementsIndirectCount", catch_unwind(||(self.version_4_6.multidrawelementsindirectcount)(mode, type_, indirect, drawcount, maxdrawcount, stride)));
28378		#[cfg(feature = "diagnose")]
28379		if let Ok(ret) = ret {
28380			return to_result("glMultiDrawElementsIndirectCount", ret, (self.version_4_6.geterror)());
28381		} else {
28382			return ret
28383		}
28384		#[cfg(not(feature = "diagnose"))]
28385		return ret;
28386	}
28387	#[inline(always)]
28388	fn glPolygonOffsetClamp(&self, factor: GLfloat, units: GLfloat, clamp: GLfloat) -> Result<()> {
28389		let ret = process_catch("glPolygonOffsetClamp", catch_unwind(||(self.version_4_6.polygonoffsetclamp)(factor, units, clamp)));
28390		#[cfg(feature = "diagnose")]
28391		if let Ok(ret) = ret {
28392			return to_result("glPolygonOffsetClamp", ret, (self.version_4_6.geterror)());
28393		} else {
28394			return ret
28395		}
28396		#[cfg(not(feature = "diagnose"))]
28397		return ret;
28398	}
28399}
28400
28401impl GLCore {
28402	pub fn new(mut get_proc_address: impl FnMut(&'static str) -> *const c_void) -> Result<Self> {
28403		let version_1_0 = Version10::new(&mut get_proc_address)?;
28404		if !version_1_0.available {
28405			return Ok(Self::default());
28406		}
28407		Ok(Self {
28408			version_1_0,
28409			version_1_1: Version11::new(version_1_0, &mut get_proc_address),
28410			version_1_2: Version12::new(version_1_0, &mut get_proc_address),
28411			version_1_3: Version13::new(version_1_0, &mut get_proc_address),
28412			version_1_4: Version14::new(version_1_0, &mut get_proc_address),
28413			version_1_5: Version15::new(version_1_0, &mut get_proc_address),
28414			version_2_0: Version20::new(version_1_0, &mut get_proc_address),
28415			version_2_1: Version21::new(version_1_0, &mut get_proc_address),
28416			version_3_0: Version30::new(version_1_0, &mut get_proc_address),
28417			version_3_1: Version31::new(version_1_0, &mut get_proc_address),
28418			version_3_2: Version32::new(version_1_0, &mut get_proc_address),
28419			version_3_3: Version33::new(version_1_0, &mut get_proc_address),
28420			version_4_0: Version40::new(version_1_0, &mut get_proc_address),
28421			version_4_1: Version41::new(version_1_0, &mut get_proc_address),
28422			version_4_2: Version42::new(version_1_0, &mut get_proc_address),
28423			version_4_3: Version43::new(version_1_0, &mut get_proc_address),
28424			version_4_4: Version44::new(version_1_0, &mut get_proc_address),
28425			version_4_5: Version45::new(version_1_0, &mut get_proc_address),
28426			version_4_6: Version46::new(version_1_0, &mut get_proc_address),
28427		})
28428	}
28429}
28430
28431impl Default for GLCore {
28432	fn default() -> Self {
28433		Self {
28434			version_1_0: Version10::default(),
28435			version_1_1: Version11::default(),
28436			version_1_2: Version12::default(),
28437			version_1_3: Version13::default(),
28438			version_1_4: Version14::default(),
28439			version_1_5: Version15::default(),
28440			version_2_0: Version20::default(),
28441			version_2_1: Version21::default(),
28442			version_3_0: Version30::default(),
28443			version_3_1: Version31::default(),
28444			version_3_2: Version32::default(),
28445			version_3_3: Version33::default(),
28446			version_4_0: Version40::default(),
28447			version_4_1: Version41::default(),
28448			version_4_2: Version42::default(),
28449			version_4_3: Version43::default(),
28450			version_4_4: Version44::default(),
28451			version_4_5: Version45::default(),
28452			version_4_6: Version46::default(),
28453		}
28454	}
28455}
28456