1 //! OpenGL module provider.
2 //!
3 //! This module provides OpenGL types and functions that are used to implement the rest of this
4 //! crate.
5 
6 #[cfg(feature = "std")]
7 mod meta {
8   pub(crate) use gl;
9   pub(crate) use gl::types::*;
10 }
11 
12 #[cfg(not(feature = "std"))]
13 mod meta {
14   use alloc::vec::Vec;
15 
16   // types
17   pub type GLenum = u32;
18   pub type GLboolean = u8;
19   pub type GLbitfield = u32;
20   // pub type GLvoid = ();
21   // pub type GLbyte = i8;
22   // pub type GLshort = i16;
23   pub type GLint = i32;
24   // pub type GLubyte = u8;
25   // pub type GLushort = u16;
26   pub type GLuint = u32;
27   pub type GLsizei = i32;
28   pub type GLfloat = f32;
29   // pub type GLclampf = f32;
30   // pub type GLdouble = f64;
31   // pub type GLclampd = f64;
32   pub type GLchar = i8;
33   pub type GLsizeiptr = isize;
34 
35   // c_void, taken from the libc crate
36   // Use repr(u8) as LLVM expects `void*` to be the same as `i8*` to help enable
37   // more optimization opportunities around it recognizing things like
38   // malloc/free.
39   #[repr(u8)]
40   #[allow(non_camel_case_types)]
41   pub enum c_void {
42     // Two dummy variants so the #[repr] attribute can be used.
43     #[doc(hidden)]
44     __variant1,
45     #[doc(hidden)]
46     __variant2,
47   }
48 
49   // a little helper to build GL-compatible strings (akin to CString, but since we don’t have
50   // access to libffi… and that GLchar = i8… yeah fuck it)
51   #[derive(Debug)]
52   pub struct NulError;
53 
54   #[inline(always)]
with_cstring<F, A>(s: &str, f: F) -> Result<A, NulError> where F: FnOnce(*const GLchar) -> A,55   pub unsafe fn with_cstring<F, A>(s: &str, f: F) -> Result<A, NulError>
56   where
57     F: FnOnce(*const GLchar) -> A,
58   {
59     let bytes = s.as_bytes();
60 
61     if bytes.contains(&b'\0') {
62       Err(NulError)
63     } else {
64       let mut marshalled = Vec::with_capacity(s.len() + 1); // +1 for the NUL byte
65       marshalled.extend(bytes);
66       marshalled.push(b'\0'); // hello you dancing byte
67       Ok(f(marshalled.as_ptr() as *const GLchar))
68     }
69   }
70 
71   pub mod gl {
72     use super::*;
73 
74     // constants
75     pub const ACTIVE_TEXTURE: GLenum = 34016;
76     pub const ACTIVE_UNIFORM_MAX_LENGTH: GLenum = 35719;
77     pub const ALWAYS: GLenum = 519;
78     pub const ARRAY_BUFFER: GLenum = 34962;
79     pub const BACK: GLenum = 1029;
80     pub const BLEND: GLenum = 3042;
81     pub const BLEND_DST_RGB: GLenum = 32968;
82     pub const BLEND_EQUATION_RGB: GLenum = 32777;
83     pub const BLEND_SRC_RGB: GLenum = 32969;
84     pub const BOOL: GLenum = 35670;
85     pub const BOOL_VEC2: GLenum = 35671;
86     pub const BOOL_VEC3: GLenum = 35672;
87     pub const BOOL_VEC4: GLenum = 35673;
88     pub const BYTE: GLenum = 5120;
89     pub const CCW: GLenum = 2305;
90     pub const CLAMP_TO_EDGE: GLenum = 33071;
91     pub const COLOR_ATTACHMENT0: GLenum = 36064;
92     pub const COLOR_BUFFER_BIT: GLenum = 16384;
93     pub const COMPARE_REF_TO_TEXTURE: GLenum = 34894;
94     pub const COMPILE_STATUS: GLenum = 35713;
95     pub const CULL_FACE: GLenum = 2884;
96     pub const CULL_FACE_MODE: GLenum = 2885;
97     pub const CURRENT_PROGRAM: GLenum = 35725;
98     pub const CW: GLenum = 2304;
99     pub const DEPTH_ATTACHMENT: GLenum = 36096;
100     pub const DEPTH_BUFFER_BIT: GLenum = 256;
101     pub const DEPTH_COMPONENT: GLenum = 6402;
102     pub const DEPTH_COMPONENT32F: GLenum = 36012;
103     pub const DEPTH_TEST: GLenum = 2929;
104     pub const DRAW_FRAMEBUFFER: GLenum = 36009;
105     pub const DRAW_FRAMEBUFFER_BINDING: GLenum = 36006;
106     pub const DST_ALPHA: GLenum = 772;
107     pub const DST_COLOR: GLenum = 774;
108     pub const ELEMENT_ARRAY_BUFFER: GLenum = 34963;
109     pub const EQUAL: GLenum = 514;
110     pub const FLOAT: GLenum = 5126;
111     pub const FLOAT_MAT2: GLenum = 35674;
112     pub const FLOAT_MAT3: GLenum = 35675;
113     pub const FLOAT_MAT4: GLenum = 35676;
114     pub const FLOAT_VEC2: GLenum = 35664;
115     pub const FLOAT_VEC3: GLenum = 35665;
116     pub const FLOAT_VEC4: GLenum = 35666;
117     pub const FRAGMENT_SHADER: GLenum = 35632;
118     pub const FRAMEBUFFER: GLenum = 36160;
119     pub const FRAMEBUFFER_COMPLETE: GLenum = 36053;
120     pub const FRAMEBUFFER_INCOMPLETE_ATTACHMENT: GLenum = 36054;
121     pub const FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER: GLenum = 36059;
122     pub const FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS: GLenum = 36264;
123     pub const FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT: GLenum = 36055;
124     pub const FRAMEBUFFER_INCOMPLETE_MULTISAMPLE: GLenum = 36182;
125     pub const FRAMEBUFFER_INCOMPLETE_READ_BUFFER: GLenum = 36060;
126     pub const FRAMEBUFFER_UNDEFINED: GLenum = 33305;
127     pub const FRAMEBUFFER_UNSUPPORTED: GLenum = 36061;
128     pub const FRONT: GLenum = 1028;
129     pub const FRONT_AND_BACK: GLenum = 1032;
130     pub const FRONT_FACE: GLenum = 2886;
131     pub const FUNC_ADD: GLenum = 32774;
132     pub const FUNC_REVERSE_SUBTRACT: GLenum = 32779;
133     pub const FUNC_SUBTRACT: GLenum = 32778;
134     pub const GEOMETRY_SHADER: GLenum = 36313;
135     pub const GEQUAL: GLenum = 518;
136     pub const GREATER: GLenum = 516;
137     pub const INFO_LOG_LENGTH: GLenum = 35716;
138     pub const INT: GLenum = 5124;
139     pub const INT_SAMPLER_1D: GLenum = 36297;
140     pub const INT_SAMPLER_2D: GLenum = 36298;
141     pub const INT_SAMPLER_3D: GLenum = 36299;
142     pub const INT_SAMPLER_CUBE: GLenum = 36300;
143     pub const INT_VEC2: GLenum = 35667;
144     pub const INT_VEC3: GLenum = 35668;
145     pub const INT_VEC4: GLenum = 35669;
146     pub const INVALID_INDEX: GLenum = 4294967295;
147     pub const LEQUAL: GLenum = 515;
148     pub const LESS: GLenum = 513;
149     pub const LINE_STRIP: GLenum = 3;
150     pub const LINEAR: GLenum = 9729;
151     pub const LINEAR_MIPMAP_LINEAR: GLenum = 9987;
152     pub const LINEAR_MIPMAP_NEAREST: GLenum = 9985;
153     pub const LINES: GLenum = 1;
154     pub const LINK_STATUS: GLenum = 35714;
155     pub const MAX: GLenum = 32776;
156     pub const MIN: GLenum = 32775;
157     pub const MIRRORED_REPEAT: GLenum = 33648;
158     pub const NEAREST: GLenum = 9728;
159     pub const NEAREST_MIPMAP_LINEAR: GLenum = 9986;
160     pub const NEAREST_MIPMAP_NEAREST: GLenum = 9984;
161     pub const NEVER: GLenum = 512;
162     pub const NONE: GLenum = 0;
163     pub const NOTEQUAL: GLenum = 517;
164     pub const ONE: GLenum = 1;
165     pub const ONE_MINUS_DST_ALPHA: GLenum = 773;
166     pub const ONE_MINUS_DST_COLOR: GLenum = 775;
167     pub const ONE_MINUS_SRC_ALPHA: GLenum = 771;
168     pub const ONE_MINUS_SRC_COLOR: GLenum = 769;
169     pub const PATCH_VERTICES: GLenum = 36466;
170     pub const PATCHES: GLenum = 14;
171     pub const POINTS: GLenum = 0;
172     pub const R8I: GLenum = 33329;
173     pub const R8UI: GLenum = 33330;
174     pub const R16I: GLenum = 33331;
175     pub const R16UI: GLenum = 33332;
176     pub const R32F: GLenum = 33326;
177     pub const R32I: GLenum = 33333;
178     pub const R32UI: GLenum = 33334;
179     pub const READ_ONLY: GLenum = 35000;
180     pub const READ_WRITE: GLenum = 35002;
181     pub const RED: GLenum = 6403;
182     pub const RED_INTEGER: GLenum = 36244;
183     pub const RENDERBUFFER: GLenum = 36161;
184     pub const REPEAT: GLenum = 10497;
185     pub const RG: GLenum = 33319;
186     pub const RG_INTEGER: GLenum = 33320;
187     pub const RG8I: GLenum = 33335;
188     pub const RG8UI: GLenum = 33336;
189     pub const RG16I: GLenum = 33337;
190     pub const RG16UI: GLenum = 33338;
191     pub const RG32F: GLenum = 33328;
192     pub const RG32I: GLenum = 33339;
193     pub const RG32UI: GLenum = 33340;
194     pub const RGB: GLenum = 6407;
195     pub const RGB_INTEGER: GLenum = 36248;
196     pub const RGB8I: GLenum = 36239;
197     pub const RGB8UI: GLenum = 36221;
198     pub const RGB16I: GLenum = 36233;
199     pub const RGB16UI: GLenum = 36215;
200     pub const RGB32F: GLenum = 34837;
201     pub const RGB32I: GLenum = 36227;
202     pub const RGB32UI: GLenum = 36209;
203     pub const RGBA: GLenum = 6408;
204     pub const RGBA_INTEGER: GLenum = 36249;
205     pub const RGBA8I: GLenum = 36238;
206     pub const RGBA8UI: GLenum = 36220;
207     pub const RGBA16I: GLenum = 36232;
208     pub const RGBA16UI: GLenum = 36214;
209     pub const RGBA32F: GLenum = 34836;
210     pub const RGBA32I: GLenum = 36226;
211     pub const RGBA32UI: GLenum = 36208;
212     pub const SAMPLER_1D: GLenum = 35677;
213     pub const SAMPLER_2D: GLenum = 35678;
214     pub const SAMPLER_3D: GLenum = 35679;
215     pub const SAMPLER_CUBE: GLenum = 35680;
216     pub const SHORT: GLenum = 5122;
217     pub const SRC_ALPHA: GLenum = 770;
218     pub const SRC_ALPHA_SATURATE: GLenum = 776;
219     pub const SRC_COLOR: GLenum = 768;
220     pub const STREAM_DRAW: GLenum = 35040;
221     pub const TESS_CONTROL_SHADER: GLenum = 36488;
222     pub const TESS_EVALUATION_SHADER: GLenum = 36487;
223     pub const TEXTURE0: GLenum = 33984;
224     pub const TEXTURE_1D: GLenum = 3552;
225     pub const TEXTURE_1D_ARRAY: GLenum = 35864;
226     pub const TEXTURE_2D: GLenum = 3553;
227     pub const TEXTURE_2D_ARRAY: GLenum = 35866;
228     pub const TEXTURE_3D: GLenum = 32879;
229     pub const TEXTURE_BASE_LEVEL: GLenum = 33084;
230     pub const TEXTURE_COMPARE_FUNC: GLenum = 34893;
231     pub const TEXTURE_COMPARE_MODE: GLenum = 34892;
232     pub const TEXTURE_CUBE_MAP: GLenum = 34067;
233     pub const TEXTURE_CUBE_MAP_ARRAY: GLenum = 36873;
234     pub const TEXTURE_CUBE_MAP_POSITIVE_X: GLenum = 34069;
235     pub const TEXTURE_HEIGHT: GLenum = 4097;
236     pub const TEXTURE_MAG_FILTER: GLenum = 10240;
237     pub const TEXTURE_MAX_LEVEL: GLenum = 33085;
238     pub const TEXTURE_MIN_FILTER: GLenum = 10241;
239     pub const TEXTURE_WIDTH: GLenum = 4096;
240     pub const TEXTURE_WRAP_R: GLenum = 32882;
241     pub const TEXTURE_WRAP_S: GLenum = 10242;
242     pub const TEXTURE_WRAP_T: GLenum = 10243;
243     pub const TRIANGLE_FAN: GLenum = 6;
244     pub const TRIANGLE_STRIP: GLenum = 5;
245     pub const TRIANGLES: GLenum = 4;
246     pub const UNIFORM_BUFFER: GLenum = 35345;
247     pub const UNSIGNED_BYTE: GLenum = 5121;
248     pub const UNSIGNED_INT: GLenum = 5125;
249     pub const UNSIGNED_INT_SAMPLER_1D: GLenum = 36305;
250     pub const UNSIGNED_INT_SAMPLER_2D: GLenum = 36306;
251     pub const UNSIGNED_INT_SAMPLER_3D: GLenum = 36307;
252     pub const UNSIGNED_INT_SAMPLER_CUBE: GLenum = 36308;
253     pub const UNSIGNED_INT_VEC2: GLenum = 35667;
254     pub const UNSIGNED_INT_VEC3: GLenum = 35668;
255     pub const UNSIGNED_INT_VEC4: GLenum = 35669;
256     pub const UNSIGNED_SHORT: GLenum = 5123;
257     pub const VERTEX_ARRAY_BINDING: GLenum = 34229;
258     pub const VERTEX_SHADER: GLenum = 35633;
259     pub const WRITE_ONLY: GLenum = 35001;
260     pub const ZERO: GLenum = 0;
261 
262     pub const FALSE: GLboolean = 0;
263     pub const TRUE: GLboolean = 1;
264 
265     // functions
266     extern "system" {
267       #[allow(non_snake_case)]
268       #[inline]
269       #[link_name = "glActiveTexture"]
ActiveTexture(_: GLenum)270       pub fn ActiveTexture(_: GLenum);
271 
272       #[allow(non_snake_case)]
273       #[inline]
274       #[link_name = "glAttachShader"]
AttachShader(_: GLuint, _: GLuint)275       pub fn AttachShader(_: GLuint, _: GLuint);
276 
277       #[allow(non_snake_case)]
278       #[inline]
279       #[link_name = "glBindBuffer"]
BindBuffer(_: GLenum, _: GLuint)280       pub fn BindBuffer(_: GLenum, _: GLuint);
281 
282       #[allow(non_snake_case)]
283       #[inline]
284       #[link_name = "glBindBufferBase"]
BindBufferBase(_: GLenum, _: GLuint, _: GLuint)285       pub fn BindBufferBase(_: GLenum, _: GLuint, _: GLuint);
286 
287       #[allow(non_snake_case)]
288       #[inline]
289       #[link_name = "glBindFramebuffer"]
BindFramebuffer(_: GLenum, _: GLuint)290       pub fn BindFramebuffer(_: GLenum, _: GLuint);
291 
292       #[allow(non_snake_case)]
293       #[inline]
294       #[link_name = "glBindRenderbuffer"]
BindRenderbuffer(_: GLenum, _: GLuint)295       pub fn BindRenderbuffer(_: GLenum, _: GLuint);
296 
297       #[allow(non_snake_case)]
298       #[inline]
299       #[link_name = "glBindTexture"]
BindTexture(_: GLenum, _: GLuint)300       pub fn BindTexture(_: GLenum, _: GLuint);
301 
302       #[allow(non_snake_case)]
303       #[inline]
304       #[link_name = "glBindVertexArray"]
BindVertexArray(_: GLuint)305       pub fn BindVertexArray(_: GLuint);
306 
307       #[allow(non_snake_case)]
308       #[inline]
309       #[link_name = "glBlendEquation"]
BlendEquation(_: GLenum)310       pub fn BlendEquation(_: GLenum);
311 
312       #[allow(non_snake_case)]
313       #[inline]
314       #[link_name = "glBlendFunc"]
BlendFunc(_: GLenum, _: GLenum)315       pub fn BlendFunc(_: GLenum, _: GLenum);
316 
317       #[allow(non_snake_case)]
318       #[inline]
319       #[link_name = "glBufferData"]
BufferData(_: GLenum, _: GLsizeiptr, _: *const c_void, _: GLenum)320       pub fn BufferData(_: GLenum, _: GLsizeiptr, _: *const c_void, _: GLenum);
321 
322       #[allow(non_snake_case)]
323       #[inline]
324       #[link_name = "glCheckFramebufferStatus"]
CheckFramebufferStatus(_: GLenum) -> GLenum325       pub fn CheckFramebufferStatus(_: GLenum) -> GLenum;
326 
327       #[allow(non_snake_case)]
328       #[inline]
329       #[link_name = "glClear"]
Clear(_: GLbitfield)330       pub fn Clear(_: GLbitfield);
331 
332       #[allow(non_snake_case)]
333       #[inline]
334       #[link_name = "glClearColor"]
ClearColor(_: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat)335       pub fn ClearColor(_: GLfloat, _: GLfloat, _: GLfloat, _: GLfloat);
336 
337       #[allow(non_snake_case)]
338       #[inline]
339       #[link_name = "glCompileShader"]
CompileShader(_: GLuint)340       pub fn CompileShader(_: GLuint);
341 
342       #[allow(non_snake_case)]
343       #[inline]
344       #[link_name = "glCreateProgram"]
CreateProgram() -> GLuint345       pub fn CreateProgram() -> GLuint;
346 
347       #[allow(non_snake_case)]
348       #[inline]
349       #[link_name = "glCreateShader"]
CreateShader(_: GLenum) -> GLuint350       pub fn CreateShader(_: GLenum) -> GLuint;
351 
352       #[allow(non_snake_case)]
353       #[inline]
354       #[link_name = "glCullFace"]
CullFace(_: GLenum)355       pub fn CullFace(_: GLenum);
356 
357       #[allow(non_snake_case)]
358       #[inline]
359       #[link_name = "glDeleteBuffers"]
DeleteBuffers(_: GLsizei, _: *const GLuint)360       pub fn DeleteBuffers(_: GLsizei, _: *const GLuint);
361 
362       #[allow(non_snake_case)]
363       #[inline]
364       #[link_name = "glDeleteFramebuffers"]
DeleteFramebuffers(_: GLsizei, _: *const GLuint)365       pub fn DeleteFramebuffers(_: GLsizei, _: *const GLuint);
366 
367       #[allow(non_snake_case)]
368       #[inline]
369       #[link_name = "glDeleteProgram"]
DeleteProgram(_: GLuint)370       pub fn DeleteProgram(_: GLuint);
371 
372       #[allow(non_snake_case)]
373       #[inline]
374       #[link_name = "glDeleteRenderbuffers"]
DeleteRenderbuffers(_: GLsizei, _: *const GLuint)375       pub fn DeleteRenderbuffers(_: GLsizei, _: *const GLuint);
376 
377       #[allow(non_snake_case)]
378       #[inline]
379       #[link_name = "glDeleteShader"]
DeleteShader(_: GLuint)380       pub fn DeleteShader(_: GLuint);
381 
382       #[allow(non_snake_case)]
383       #[inline]
384       #[link_name = "glDeleteTextures"]
DeleteTextures(_: GLsizei, _: *const GLuint)385       pub fn DeleteTextures(_: GLsizei, _: *const GLuint);
386 
387       #[allow(non_snake_case)]
388       #[inline]
389       #[link_name = "glDeleteVertexArrays"]
DeleteVertexArrays(_: GLsizei, _: *const GLuint)390       pub fn DeleteVertexArrays(_: GLsizei, _: *const GLuint);
391 
392       #[allow(non_snake_case)]
393       #[inline]
394       #[link_name = "glDisable"]
Disable(_: GLenum)395       pub fn Disable(_: GLenum);
396 
397       #[allow(non_snake_case)]
398       #[inline]
399       #[link_name = "glDrawArrays"]
DrawArrays(_: GLenum, _: GLint, _: GLsizei)400       pub fn DrawArrays(_: GLenum, _: GLint, _: GLsizei);
401 
402       #[allow(non_snake_case)]
403       #[inline]
404       #[link_name = "glDrawArraysInstanced"]
DrawArraysInstanced(_: GLenum, _: GLint, _: GLsizei, _: GLsizei)405       pub fn DrawArraysInstanced(_: GLenum, _: GLint, _: GLsizei, _: GLsizei);
406 
407       #[allow(non_snake_case)]
408       #[inline]
409       #[link_name = "glDrawElements"]
DrawElements(_: GLenum, _: GLsizei, _: GLenum, _: *const c_void)410       pub fn DrawElements(_: GLenum, _: GLsizei, _: GLenum, _: *const c_void);
411 
412       #[allow(non_snake_case)]
413       #[inline]
414       #[link_name = "glDrawElementsInstanced"]
DrawElementsInstanced(_: GLenum, _: GLsizei, _: GLenum, _: *const c_void, _: GLsizei)415       pub fn DrawElementsInstanced(_: GLenum, _: GLsizei, _: GLenum, _: *const c_void, _: GLsizei);
416 
417       #[allow(non_snake_case)]
418       #[inline]
419       #[link_name = "glDrawBuffer"]
DrawBuffer(_: GLenum)420       pub fn DrawBuffer(_: GLenum);
421 
422       #[allow(non_snake_case)]
423       #[inline]
424       #[link_name = "glDrawBuffers"]
DrawBuffers(_: GLsizei, _: *const GLenum)425       pub fn DrawBuffers(_: GLsizei, _: *const GLenum);
426 
427       #[allow(non_snake_case)]
428       #[inline]
429       #[link_name = "glEnable"]
Enable(_: GLenum)430       pub fn Enable(_: GLenum);
431 
432       #[allow(non_snake_case)]
433       #[inline]
434       #[link_name = "glEnableVertexAttribArray"]
EnableVertexAttribArray(_: GLuint)435       pub fn EnableVertexAttribArray(_: GLuint);
436 
437       #[allow(non_snake_case)]
438       #[inline]
439       #[link_name = "glFramebufferRenderbuffer"]
FramebufferRenderbuffer(_: GLenum, _: GLenum, _: GLenum, _: GLuint)440       pub fn FramebufferRenderbuffer(_: GLenum, _: GLenum, _: GLenum, _: GLuint);
441 
442       #[allow(non_snake_case)]
443       #[inline]
444       #[link_name = "glFramebufferTexture"]
FramebufferTexture(_: GLenum, _: GLenum, _: GLuint, _: GLint)445       pub fn FramebufferTexture(_: GLenum, _: GLenum, _: GLuint, _: GLint);
446 
447       #[allow(non_snake_case)]
448       #[inline]
449       #[link_name = "glFrontFace"]
FrontFace(_: GLenum)450       pub fn FrontFace(_: GLenum);
451 
452       #[allow(non_snake_case)]
453       #[inline]
454       #[link_name = "glGenBuffers"]
GenBuffers(_: GLsizei, _: *mut GLuint)455       pub fn GenBuffers(_: GLsizei, _: *mut GLuint);
456 
457       #[allow(non_snake_case)]
458       #[inline]
459       #[link_name = "glGenFramebuffers"]
GenFramebuffers(_: GLsizei, _: *mut GLuint)460       pub fn GenFramebuffers(_: GLsizei, _: *mut GLuint);
461 
462       #[allow(non_snake_case)]
463       #[inline]
464       #[link_name = "glGenRenderbuffers"]
GenRenderbuffers(_: GLsizei, _: *mut GLuint)465       pub fn GenRenderbuffers(_: GLsizei, _: *mut GLuint);
466 
467       #[allow(non_snake_case)]
468       #[inline]
469       #[link_name = "glGenTextures"]
GenTextures(_: GLsizei, _: *mut GLuint)470       pub fn GenTextures(_: GLsizei, _: *mut GLuint);
471 
472       #[allow(non_snake_case)]
473       #[inline]
474       #[link_name = "glGenVertexArrays"]
GenVertexArrays(_: GLsizei, _: *mut GLuint)475       pub fn GenVertexArrays(_: GLsizei, _: *mut GLuint);
476 
477       #[allow(non_snake_case)]
478       #[inline]
479       #[link_name = "glGenerateMipmap"]
GenerateMipmap(_: GLenum)480       pub fn GenerateMipmap(_: GLenum);
481 
482       #[allow(non_snake_case)]
483       #[inline]
484       #[link_name = "glGetActiveUniform"]
GetActiveUniform( _: GLuint, _: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLint, _: *mut GLenum, _: *mut GLchar, )485       pub fn GetActiveUniform(
486         _: GLuint,
487         _: GLuint,
488         _: GLsizei,
489         _: *mut GLsizei,
490         _: *mut GLint,
491         _: *mut GLenum,
492         _: *mut GLchar,
493       );
494 
495       #[allow(non_snake_case)]
496       #[inline]
497       #[link_name = "glGetIntegerv"]
GetIntegerv(_: GLenum, _: *mut GLint)498       pub fn GetIntegerv(_: GLenum, _: *mut GLint);
499 
500       #[allow(non_snake_case)]
501       #[inline]
502       #[link_name = "glGetProgramInfoLog"]
GetProgramInfoLog(_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar)503       pub fn GetProgramInfoLog(_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar);
504 
505       #[allow(non_snake_case)]
506       #[inline]
507       #[link_name = "glGetProgramiv"]
GetProgramiv(_: GLuint, _: GLenum, _: *mut GLint)508       pub fn GetProgramiv(_: GLuint, _: GLenum, _: *mut GLint);
509 
510       #[allow(non_snake_case)]
511       #[inline]
512       #[link_name = "glGetShaderInfoLog"]
GetShaderInfoLog(_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar)513       pub fn GetShaderInfoLog(_: GLuint, _: GLsizei, _: *mut GLsizei, _: *mut GLchar);
514 
515       #[allow(non_snake_case)]
516       #[inline]
517       #[link_name = "glGetShaderiv"]
GetShaderiv(_: GLuint, _: GLenum, _: *mut GLint)518       pub fn GetShaderiv(_: GLuint, _: GLenum, _: *mut GLint);
519 
520       #[allow(non_snake_case)]
521       #[inline]
522       #[link_name = "glGetTexImage"]
GetTexImage(_: GLenum, _: GLint, _: GLenum, _: GLenum, _: *mut c_void)523       pub fn GetTexImage(_: GLenum, _: GLint, _: GLenum, _: GLenum, _: *mut c_void);
524 
525       #[allow(non_snake_case)]
526       #[inline]
527       #[link_name = "glGetTexLevelParameteriv"]
GetTexLevelParameteriv(_: GLenum, _: GLint, _: GLenum, _: *mut GLint)528       pub fn GetTexLevelParameteriv(_: GLenum, _: GLint, _: GLenum, _: *mut GLint);
529 
530       #[allow(non_snake_case)]
531       #[inline]
532       #[link_name = "glGetUniformBlockIndex"]
GetUniformBlockIndex(_: GLuint, _: *const GLchar) -> GLuint533       pub fn GetUniformBlockIndex(_: GLuint, _: *const GLchar) -> GLuint;
534 
535       #[allow(non_snake_case)]
536       #[inline]
537       #[link_name = "glGetUniformLocation"]
GetUniformLocation(_: GLuint, _: *const GLchar) -> GLint538       pub fn GetUniformLocation(_: GLuint, _: *const GLchar) -> GLint;
539 
540       #[allow(non_snake_case)]
541       #[inline]
542       #[link_name = "glGetUniformIndices"]
GetUniformIndices(_: GLuint, _: GLsizei, _: *const *const GLchar, _: *mut GLuint)543       pub fn GetUniformIndices(_: GLuint, _: GLsizei, _: *const *const GLchar, _: *mut GLuint);
544 
545       #[allow(non_snake_case)]
546       #[inline]
547       #[link_name = "glIsEnabled"]
IsEnabled(_: GLenum) -> GLboolean548       pub fn IsEnabled(_: GLenum) -> GLboolean;
549 
550       #[allow(non_snake_case)]
551       #[inline]
552       #[link_name = "glLinkProgram"]
LinkProgram(_: GLuint)553       pub fn LinkProgram(_: GLuint);
554 
555       #[allow(non_snake_case)]
556       #[inline]
557       #[link_name = "glMapBuffer"]
MapBuffer(_: GLenum, _: GLenum) -> *mut c_void558       pub fn MapBuffer(_: GLenum, _: GLenum) -> *mut c_void;
559 
560       #[allow(non_snake_case)]
561       #[inline]
562       #[link_name = "glRenderbufferStorage"]
RenderbufferStorage(_: GLenum, _: GLenum, _: GLsizei, _: GLsizei)563       pub fn RenderbufferStorage(_: GLenum, _: GLenum, _: GLsizei, _: GLsizei);
564 
565       #[allow(non_snake_case)]
566       #[inline]
567       #[link_name = "glShaderSource"]
ShaderSource(_: GLuint, _: GLsizei, _: *const *const GLchar, _: *const GLint)568       pub fn ShaderSource(_: GLuint, _: GLsizei, _: *const *const GLchar, _: *const GLint);
569 
570       #[allow(non_snake_case)]
571       #[inline]
572       #[link_name = "glTexImage1D"]
TexImage1D( _: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLint, _: GLenum, _: GLenum, _: *const c_void, )573       pub fn TexImage1D(
574         _: GLenum,
575         _: GLint,
576         _: GLint,
577         _: GLsizei,
578         _: GLint,
579         _: GLenum,
580         _: GLenum,
581         _: *const c_void,
582       );
583 
584       #[allow(non_snake_case)]
585       #[inline]
586       #[link_name = "glTexImage2D"]
TexImage2D( _: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLint, _: GLenum, _: GLenum, _: *const c_void, )587       pub fn TexImage2D(
588         _: GLenum,
589         _: GLint,
590         _: GLint,
591         _: GLsizei,
592         _: GLsizei,
593         _: GLint,
594         _: GLenum,
595         _: GLenum,
596         _: *const c_void,
597       );
598 
599       #[allow(non_snake_case)]
600       #[inline]
601       #[link_name = "glTexImage3D"]
TexImage3D( _: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLint, _: GLenum, _: GLenum, _: *const c_void, )602       pub fn TexImage3D(
603         _: GLenum,
604         _: GLint,
605         _: GLint,
606         _: GLsizei,
607         _: GLsizei,
608         _: GLsizei,
609         _: GLint,
610         _: GLenum,
611         _: GLenum,
612         _: *const c_void,
613       );
614 
615       #[allow(non_snake_case)]
616       #[inline]
617       #[link_name = "glTexParameteri"]
TexParameteri(_: GLenum, _: GLenum, _: GLint)618       pub fn TexParameteri(_: GLenum, _: GLenum, _: GLint);
619 
620       #[allow(non_snake_case)]
621       #[inline]
622       #[link_name = "glTexSubImage1D"]
TexSubImage1D( _: GLenum, _: GLint, _: GLint, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void, )623       pub fn TexSubImage1D(
624         _: GLenum,
625         _: GLint,
626         _: GLint,
627         _: GLsizei,
628         _: GLenum,
629         _: GLenum,
630         _: *const c_void,
631       );
632 
633       #[allow(non_snake_case)]
634       #[inline]
635       #[link_name = "glTexSubImage2D"]
TexSubImage2D( _: GLenum, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void, )636       pub fn TexSubImage2D(
637         _: GLenum,
638         _: GLint,
639         _: GLint,
640         _: GLint,
641         _: GLsizei,
642         _: GLsizei,
643         _: GLenum,
644         _: GLenum,
645         _: *const c_void,
646       );
647 
648       #[allow(non_snake_case)]
649       #[inline]
650       #[link_name = "glTexSubImage3D"]
TexSubImage3D( _: GLenum, _: GLint, _: GLint, _: GLint, _: GLint, _: GLsizei, _: GLsizei, _: GLsizei, _: GLenum, _: GLenum, _: *const c_void, )651       pub fn TexSubImage3D(
652         _: GLenum,
653         _: GLint,
654         _: GLint,
655         _: GLint,
656         _: GLint,
657         _: GLsizei,
658         _: GLsizei,
659         _: GLsizei,
660         _: GLenum,
661         _: GLenum,
662         _: *const c_void,
663       );
664 
665       #[allow(non_snake_case)]
666       #[inline]
667       #[link_name = "glUniform1f"]
Uniform1f(_: GLint, _: GLfloat)668       pub fn Uniform1f(_: GLint, _: GLfloat);
669 
670       #[allow(non_snake_case)]
671       #[inline]
672       #[link_name = "glUniform1i"]
Uniform1i(_: GLint, _: GLint)673       pub fn Uniform1i(_: GLint, _: GLint);
674 
675       #[allow(non_snake_case)]
676       #[inline]
677       #[link_name = "glUniform1ui"]
Uniform1ui(_: GLint, _: GLuint)678       pub fn Uniform1ui(_: GLint, _: GLuint);
679 
680       #[allow(non_snake_case)]
681       #[inline]
682       #[link_name = "glUniform1iv"]
Uniform1iv(_: GLint, _: GLsizei, _: *const GLint)683       pub fn Uniform1iv(_: GLint, _: GLsizei, _: *const GLint);
684 
685       #[allow(non_snake_case)]
686       #[inline]
687       #[link_name = "glUniform1fv"]
Uniform1fv(_: GLint, _: GLsizei, _: *const GLfloat)688       pub fn Uniform1fv(_: GLint, _: GLsizei, _: *const GLfloat);
689 
690       #[allow(non_snake_case)]
691       #[inline]
692       #[link_name = "glUniform1uiv"]
Uniform1uiv(_: GLint, _: GLsizei, _: *const GLuint)693       pub fn Uniform1uiv(_: GLint, _: GLsizei, _: *const GLuint);
694 
695       #[allow(non_snake_case)]
696       #[inline]
697       #[link_name = "glUniform2fv"]
Uniform2fv(_: GLint, _: GLsizei, _: *const GLfloat)698       pub fn Uniform2fv(_: GLint, _: GLsizei, _: *const GLfloat);
699 
700       #[allow(non_snake_case)]
701       #[inline]
702       #[link_name = "glUniform2iv"]
Uniform2iv(_: GLint, _: GLsizei, _: *const GLint)703       pub fn Uniform2iv(_: GLint, _: GLsizei, _: *const GLint);
704 
705       #[allow(non_snake_case)]
706       #[inline]
707       #[link_name = "glUniform2uiv"]
Uniform2uiv(_: GLint, _: GLsizei, _: *const GLuint)708       pub fn Uniform2uiv(_: GLint, _: GLsizei, _: *const GLuint);
709 
710       #[allow(non_snake_case)]
711       #[inline]
712       #[link_name = "glUniform3fv"]
Uniform3fv(_: GLint, _: GLsizei, _: *const GLfloat)713       pub fn Uniform3fv(_: GLint, _: GLsizei, _: *const GLfloat);
714 
715       #[allow(non_snake_case)]
716       #[inline]
717       #[link_name = "glUniform3iv"]
Uniform3iv(_: GLint, _: GLsizei, _: *const GLint)718       pub fn Uniform3iv(_: GLint, _: GLsizei, _: *const GLint);
719 
720       #[allow(non_snake_case)]
721       #[inline]
722       #[link_name = "glUniform3uiv"]
Uniform3uiv(_: GLint, _: GLsizei, _: *const GLuint)723       pub fn Uniform3uiv(_: GLint, _: GLsizei, _: *const GLuint);
724 
725       #[allow(non_snake_case)]
726       #[inline]
727       #[link_name = "glUniform4fv"]
Uniform4fv(_: GLint, _: GLsizei, _: *const GLfloat)728       pub fn Uniform4fv(_: GLint, _: GLsizei, _: *const GLfloat);
729 
730       #[allow(non_snake_case)]
731       #[inline]
732       #[link_name = "glUniform4iv"]
Uniform4iv(_: GLint, _: GLsizei, _: *const GLint)733       pub fn Uniform4iv(_: GLint, _: GLsizei, _: *const GLint);
734 
735       #[allow(non_snake_case)]
736       #[inline]
737       #[link_name = "glUniform4uiv"]
Uniform4uiv(_: GLint, _: GLsizei, _: *const GLuint)738       pub fn Uniform4uiv(_: GLint, _: GLsizei, _: *const GLuint);
739 
740       #[allow(non_snake_case)]
741       #[inline]
742       #[link_name = "glUniformBlockBinding"]
UniformBlockBinding(_: GLuint, _: GLuint, _: GLuint)743       pub fn UniformBlockBinding(_: GLuint, _: GLuint, _: GLuint);
744 
745       #[allow(non_snake_case)]
746       #[inline]
747       #[link_name = "glUniformMatrix2fv"]
UniformMatrix2fv(_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat)748       pub fn UniformMatrix2fv(_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat);
749 
750       #[allow(non_snake_case)]
751       #[inline]
752       #[link_name = "glUniformMatrix3fv"]
UniformMatrix3fv(_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat)753       pub fn UniformMatrix3fv(_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat);
754 
755       #[allow(non_snake_case)]
756       #[inline]
757       #[link_name = "glUniformMatrix4fv"]
UniformMatrix4fv(_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat)758       pub fn UniformMatrix4fv(_: GLint, _: GLsizei, _: GLboolean, _: *const GLfloat);
759 
760       #[allow(non_snake_case)]
761       #[inline]
762       #[link_name = "glUnmapBuffer"]
UnmapBuffer(_: GLenum) -> GLboolean763       pub fn UnmapBuffer(_: GLenum) -> GLboolean;
764 
765       #[allow(non_snake_case)]
766       #[inline]
767       #[link_name = "glUseProgram"]
UseProgram(_: GLuint)768       pub fn UseProgram(_: GLuint);
769 
770       #[allow(non_snake_case)]
771       #[inline]
772       #[link_name = "glVertexAttribPointer"]
VertexAttribPointer( _: GLuint, _: GLint, _: GLenum, _: GLboolean, _: GLsizei, _: *const c_void, )773       pub fn VertexAttribPointer(
774         _: GLuint,
775         _: GLint,
776         _: GLenum,
777         _: GLboolean,
778         _: GLsizei,
779         _: *const c_void,
780       );
781 
782       #[allow(non_snake_case)]
783       #[inline]
784       #[link_name = "glVertexAttribIPointer"]
VertexAttribIPointer(_: GLuint, _: GLint, _: GLenum, _: GLsizei, _: *const c_void)785       pub fn VertexAttribIPointer(_: GLuint, _: GLint, _: GLenum, _: GLsizei, _: *const c_void);
786 
787       #[allow(non_snake_case)]
788       #[inline]
789       #[link_name = "glViewport"]
Viewport(_: GLint, _: GLint, _: GLsizei, _: GLsizei)790       pub fn Viewport(_: GLint, _: GLint, _: GLsizei, _: GLsizei);
791     }
792   }
793 }
794 
795 pub(crate) use self::meta::*;
796