1#![allow(non_snake_case)]
2#![allow(non_upper_case_globals)]
3
4#[macro_export]
5macro_rules!gl_log_error {
6 ($libgl:ident) => {
7 {
8 let mut ret = false;
9 let mut i= 0;
10 loop{
11 #[allow(unused_unsafe)]
12 let err = unsafe{($libgl.glGetError)()};
13 if err!=0{
14 crate::log!("Caught GL Error({i}) {:x} ", err);
15 ret = true;
16 }
17 else{break}
18 i += 1;
19 }
20 ret
21 }
22 };
23}
24
25#[macro_export]
26macro_rules!gl_flush_error {
27 ($libgl:ident) => {
28 {
29 loop{
30 #[allow(unused_unsafe)]
31 let err = unsafe{($libgl.glGetError)()};
32 if err!=0{}
33 else{break}
34 }
35 }
36 };
37}
38
39use std::os::raw;
40
41pub type GLenum = raw::c_uint;
42pub type GLsizei = raw::c_int;
43pub type GLuint = raw::c_uint;
44pub type GLint = raw::c_int;
45pub type GLdouble = raw::c_double;
46pub type GLfloat = raw::c_float;
47pub type GLbitfield = raw::c_uint;
48pub type GLboolean = raw::c_uchar;
49pub type GLchar = raw::c_char;
50pub type GLubyte = raw::c_uchar;
51pub type GLsizeiptr = isize;
52
53pub const TRUE: GLboolean = 1;
54pub const ARRAY_BUFFER: GLenum = 0x8892;
55pub const ELEMENT_ARRAY_BUFFER: GLenum = 0x8893;
56pub const TEXTURE0: GLenum = 0x84C0;
57pub const TEXTURE_2D: GLenum = 0x0DE1;
58pub const TRIANGLES: GLenum = 0x0004;
59pub const UNSIGNED_INT: GLenum = 0x1405;
60pub const DEPTH_TEST: GLenum = 0x0B71;
61pub const LEQUAL: GLenum = 0x0203;
62pub const FUNC_ADD: GLenum = 0x8006;
63pub const ONE: GLenum = 1;
64pub const ONE_MINUS_SRC_ALPHA: GLenum = 0x0303;
65pub const BLEND: GLenum = 0x0BE2;
66pub const FRAMEBUFFER: GLenum = 0x8D40;
67pub const COLOR_BUFFER_BIT: GLenum = 0x00004000;
68pub const DEPTH_BUFFER_BIT: GLenum = 0x00000100;
69pub const RENDERBUFFER: GLenum = 0x8D41;
70pub const DEPTH_COMPONENT16: GLenum = 0x81A5;
71pub const DEPTH_COMPONENT24: GLenum = 0x81A6;
72pub const DYNAMIC_DRAW:GLenum = 0x88E8;
73pub const FRAMEBUFFER_SRGB_EXT: GLenum = 0x8DB9;
74pub const DEPTH_ATTACHMENT: GLenum = 0x8D00;
75pub const COLOR_ATTACHMENT0: GLenum = 0x8CE0;
76pub const INFO_LOG_LENGTH: GLenum = 0x8B84;
77pub const COMPILE_STATUS: GLenum = 0x8B81;
78pub const LINK_STATUS: GLenum = 0x8B82;
79pub const VERTEX_SHADER: GLenum = 0x8B31;
80pub const FRAGMENT_SHADER: GLenum = 0x8B30;
81pub const TEXTURE_MIN_FILTER: GLenum = 0x2801;
82pub const LINEAR: GLenum = 0x2601;
83pub const LINEAR_MIPMAP_LINEAR: GLenum = 0x2703;
84pub const TEXTURE_BASE_LEVEL: GLenum = 0x813C;
85pub const TEXTURE_MAX_LEVEL: GLenum = 0x813D;
86pub const TEXTURE_MAG_FILTER: GLenum = 0x2800;
87pub const TEXTURE_WIDTH: GLenum = 0x1000;
88pub const TEXTURE_HEIGHT: GLenum = 0x1001;
89pub const TEXTURE_2D_ARRAY: GLenum = 0x8C1A;
90pub const TEXTURE_BORDER_COLOR: GLenum = 0x1004;
91pub const DEBUG_OUTPUT: GLenum = 0x92E0;
92
93pub const RGBA: GLenum = 0x1908;
94pub const BGRA: GLenum = 0x80E1;
95pub const RED: GLenum = 0x1903;
96pub const RG: GLenum = 0x8227;
97pub const R8: GLenum = 0x8229;
98pub const UNSIGNED_BYTE: GLenum = 0x1401;
99pub const HALF_FLOAT: GLenum = 0x140B;
100pub const FLOAT: GLenum = 0x1406;
101pub const SRGB8_ALPHA8L: GLenum = 0x8C43;
102
103pub const DEPTH_COMPONENT32F: GLenum = 0x8CAC;
104pub const STATIC_DRAW: GLenum = 0x88E4;
105pub const NEAREST: GLenum = 0x2600;
106pub const TEXTURE_WRAP_S: GLenum = 0x2802;
107pub const TEXTURE_WRAP_T: GLenum = 0x2803;
108pub const CLAMP_TO_EDGE: GLenum = 0x812F;
109pub const CLAMP_TO_BORDER: GLenum = 0x812D;
110pub const PROGRAM_BINARY_LENGTH: GLenum = 0x8741;
111pub const NO_ERROR: GLenum = 0x0;
112pub const UNPACK_ALIGNMENT: GLenum = 0x0CF5;
113pub const UNPACK_ROW_LENGTH: GLenum = 0x0CF2;
114pub const UNPACK_SKIP_PIXELS: GLenum = 0x0CF4;
115pub const UNPACK_SKIP_ROWS: GLenum = 0x0CF3;
116pub const DRAW_FRAMEBUFFER:GLenum = 0x8CA9;
117pub const TEXTURE_EXTERNAL_OES: GLenum = 0x8D65;
118pub const EXTENSIONS: GLenum = 0x1F03;
119pub const VENDOR: GLenum = 0x1F00;
120pub const RENDERER: GLenum = 0x1F01;
121pub const SCISSOR_TEST: GLenum = 0x0C11;
122pub const CULL_FACE:GLenum = 0x0B44;
123pub const DONT_CARE:GLenum = 0x1100;
124pub const UNIFORM_BUFFER:GLenum = 0x8A11;
125
126pub type TglGenVertexArrays = unsafe extern "C" fn(n: GLsizei, arrays: *mut GLuint) -> () ;
127pub type TglBindVertexArray = unsafe extern "C" fn(array: GLuint) -> () ;
128pub type TglBindBuffer = unsafe extern "C" fn(target: GLenum, buffer: GLuint) -> () ;
129pub type TglVertexAttribPointer = unsafe extern "C" fn(index: GLuint, size: GLint, type_: GLenum, normalized: GLboolean, stride: GLsizei, pointer: *const raw::c_void) -> () ;
130pub type TglEnableVertexAttribArray = unsafe extern "C" fn(index: GLuint) -> () ;
131pub type TglVertexAttribDivisor = unsafe extern "C" fn(index: GLuint, divisor: GLuint) -> () ;
132pub type TglUseProgram = unsafe extern "C" fn(program: GLuint) -> () ;
133pub type TglActiveTexture = unsafe extern "C" fn(texture: GLenum) -> () ;
134pub type TglBindTexture = unsafe extern "C" fn(target: GLenum, texture: GLuint) -> () ;
135pub type TglDrawElementsInstanced = unsafe extern "C" fn(mode: GLenum, count: GLsizei, type_: GLenum, indices: *const raw::c_void, instancecount: GLsizei) -> () ;
136pub type TglEnable = unsafe extern "C" fn(cap: GLenum) -> () ;
137pub type TglDepthFunc = unsafe extern "C" fn(func: GLenum) -> () ;
138pub type TglBlendEquationSeparate = unsafe extern "C" fn(modeRGB: GLenum, modeAlpha: GLenum) -> () ;
139pub type TglBlendFuncSeparate = unsafe extern "C" fn(sfactorRGB: GLenum, dfactorRGB: GLenum, sfactorAlpha: GLenum, dfactorAlpha: GLenum) -> () ;
140pub type TglViewport = unsafe extern "C" fn(x: GLint, y: GLint, width: GLsizei, height: GLsizei) -> () ;
141pub type TglBindFramebuffer = unsafe extern "C" fn(target: GLenum, framebuffer: GLuint) -> () ;
142pub type TglClearDepthf = unsafe extern "C" fn(d: GLfloat) -> () ;
143pub type TglClearColor = unsafe extern "C" fn(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat) -> () ;
144pub type TglClear = unsafe extern "C" fn(mask: GLbitfield) -> () ;
145pub type TglGenFramebuffers = unsafe extern "C" fn(n: GLsizei, framebuffers: *mut GLuint) -> () ;
146pub type TglGenRenderbuffers = unsafe extern "C" fn(n: GLsizei, renderbuffers: *mut GLuint) -> () ;
147pub type TglBindRenderbuffer = unsafe extern "C" fn(target: GLenum, renderbuffer: GLuint) -> () ;
148pub type TglRenderbufferStorage = unsafe extern "C" fn(target: GLenum, internalformat: GLenum, width: GLsizei, height: GLsizei) -> () ;
149pub type TglDisable = unsafe extern "C" fn(cap: GLenum) -> () ;
150pub type TglFramebufferRenderbuffer = unsafe extern "C" fn(target: GLenum, attachment: GLenum, renderbuffertarget: GLenum, renderbuffer: GLuint) -> () ;
151pub type TglFramebufferTexture2D = unsafe extern "C" fn(target: GLenum, attachment: GLenum, textarget: GLenum, texture: GLuint, level: GLint) -> () ;
152pub type TglGetShaderiv = unsafe extern "C" fn(shader: GLuint, pname: GLenum, params: *mut GLint) -> () ;
153pub type TglGetProgramiv = unsafe extern "C" fn(program: GLuint, pname: GLenum, params: *mut GLint) -> () ;
154pub type TglGetShaderInfoLog = unsafe extern "C" fn(shader: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> () ;
155pub type TglGetProgramInfoLog = unsafe extern "C" fn(program: GLuint, bufSize: GLsizei, length: *mut GLsizei, infoLog: *mut GLchar) -> () ;
156pub type TglGetAttribLocation = unsafe extern "C" fn(program: GLuint, name: *const GLchar) -> GLint ;
157pub type TglGetUniformLocation = unsafe extern "C" fn(program: GLuint, name: *const GLchar) -> GLint ;
158pub type TglCreateShader = unsafe extern "C" fn(type_: GLenum) -> GLuint ;
159pub type TglShaderSource = unsafe extern "C" fn(shader: GLuint, count: GLsizei, string: *const *const GLchar, length: *const GLint) -> () ;
160pub type TglCompileShader = unsafe extern "C" fn(shader: GLuint) -> () ;
161pub type TglCreateProgram = unsafe extern "C" fn() -> GLuint ;
162pub type TglAttachShader = unsafe extern "C" fn(program: GLuint, shader: GLuint) -> () ;
163pub type TglLinkProgram = unsafe extern "C" fn(program: GLuint) -> () ;
164pub type TglDeleteShader = unsafe extern "C" fn(shader: GLuint) -> () ;
165pub type TglUniform1fv = unsafe extern "C" fn(location: GLint, count: GLsizei, value: *const GLfloat) -> () ;
166pub type TglGenTextures = unsafe extern "C" fn(n: GLsizei, textures: *mut GLuint) -> () ;
167pub type TglTexParameteri = unsafe extern "C" fn(target: GLenum, pname: GLenum, param: GLint) -> () ;
168pub type TglTexParameterfv = unsafe extern "C" fn(target: GLenum, pname: GLenum, param: *const GLfloat) -> () ;
169pub type TglTexImage2D = unsafe extern "C" fn(target: GLenum, level: GLint, internalformat: GLint, width: GLsizei, height: GLsizei, border: GLint, format: GLenum, type_: GLenum, pixels: *const raw::c_void) -> () ;
170pub type TglTexSubImage2D = unsafe extern "C" fn(target: GLenum, level: GLint, xoffset: GLint, yoffset: GLint, width: GLsizei, height: GLsizei, format: GLenum, type_: GLenum, pixels: *const raw::c_void) -> () ;
171pub type TglGetTexLevelParameteriv = unsafe extern "C" fn(target: GLenum, level: GLint, pname: GLenum, params: *mut GLint) -> ();
172pub type TglDeleteTextures = unsafe extern "C" fn(n: GLsizei, textures: *const GLuint) -> () ;
173pub type TglGenBuffers = unsafe extern "C" fn(n: GLsizei, buffers: *mut GLuint) -> () ;
174pub type TglBufferData = unsafe extern "C" fn(target: GLenum, size: GLsizeiptr, data: *const raw::c_void, usage: GLenum) -> () ;
175pub type TglUniform1i = unsafe extern "C" fn(location: GLint, v0: GLint) -> () ;
176pub type TglGetError = unsafe extern "C" fn() -> GLenum ;
177pub type TglFinish = unsafe extern "C" fn() -> () ;
178pub type TglGetProgramBinary = unsafe extern "C" fn(program: GLuint, bufSize: GLsizei, length: *mut GLsizei, binaryFormat: *mut GLenum, binary: *mut raw::c_void) -> () ;
179pub type TglProgramBinary = unsafe extern "C" fn(program: GLuint, binaryFormat: GLenum, binary: *const raw::c_void, length: GLsizei) -> () ;
180pub type TglDeleteRenderbuffers = unsafe extern "C" fn(n: GLsizei, renderbuffers: *const GLuint) -> () ;
181pub type TglDeleteBuffers = unsafe extern "C" fn(n: GLsizei, buffers: *const GLuint) -> () ;
182pub type TglDeleteFramebuffers = unsafe extern "C" fn(n: GLsizei, framebuffers: *const GLuint) -> () ;
183pub type TglDeleteVertexArrays = unsafe extern "C" fn(n: GLsizei, arrays: *const GLuint) -> () ;
184pub type TglGenerateMipmap = unsafe extern "C" fn(target: GLenum) -> () ;
185pub type TglPixelStorei = unsafe extern "C" fn(pname: GLenum, param: GLint) -> () ;
186pub type TglGetString = unsafe extern "C" fn(name: GLenum) -> *const GLubyte ;
187pub type TglTexStorage3D = unsafe extern "C" fn (target:GLenum, levels:GLsizei, internal_format: GLenum, width: GLsizei, height:GLsizei, depth:GLsizei);
188pub type TglFramebufferTextureMultiviewOVR = unsafe extern "C" fn(target:GLenum , attachment:GLenum, texture:GLuint, level:GLint, base_view_index:GLint, num_views:GLsizei);
189pub type TglColorMask = unsafe extern "C" fn(r: GLboolean, g:GLboolean, b:GLboolean, a:GLboolean);
190pub type TglDepthMask = unsafe extern "C" fn(d: GLboolean);
191pub type TglScissor = unsafe extern "C" fn(x:GLint, y:GLint, width:GLsizei, height:GLsizei);
192
193pub type TglInvalidateFramebuffer = unsafe extern "C" fn(target:GLenum, num_attachments:GLsizei, attachments: *const GLenum);
194pub type TglDebugMessageCallback = unsafe extern "C" fn(ptr: TglDebugMessageCallbackFn, param: *const raw::c_void);
195pub type TglDebugMessageCallbackFn = unsafe extern "C" fn(source: GLenum, ty: GLenum, id: GLuint, severity:GLenum, length:GLsizei, msg: *const GLchar, param: *const raw::c_void);
196pub type TglGetUniformBlockIndex = unsafe extern "C" fn(program:GLuint, uniform_block_name: *const GLchar)->GLuint;
197pub type TglUniformBlockBinding = unsafe extern "C" fn(program: GLuint, block_index: GLuint, binding: GLuint);
198pub type TglBindBufferBase = unsafe extern "C" fn(target:GLenum, index: GLuint, buffer:GLuint);
199
200pub type TglFramebufferTextureMultisampleMultiviewOVR = unsafe extern "C" fn(target:GLenum , attachment:GLenum, texture:GLuint, level:GLint, samples:GLsizei, base_view_index:GLint, num_views:GLsizei);
201
202pub type TglGetDebugMessageLog = unsafe extern "C" fn(count:GLuint,
203 buf_size:GLsizei,
204 sources: *mut GLenum,
205 types: &mut GLenum,
206 ids: *mut GLuint,
207 severities: *mut GLenum,
208 lengths: *mut GLsizei,
209 message_log: *mut GLchar);
210
211pub type TglDebugMessageControl = unsafe extern "C" fn(
212 source:GLenum,
213 ty: GLenum,
214 severity: GLenum,
215 count: GLsizei,
216 ids: *const GLuint,
217 enabled: GLboolean);
218
219pub struct LibGl{
220 pub glGenVertexArrays: TglGenVertexArrays,
221 pub glBindVertexArray: TglBindVertexArray,
222 pub glBindBuffer: TglBindBuffer,
223 pub glVertexAttribPointer: TglVertexAttribPointer,
224 pub glEnableVertexAttribArray: TglEnableVertexAttribArray,
225 pub glVertexAttribDivisor: TglVertexAttribDivisor,
226 pub glUseProgram: TglUseProgram,
227 pub glActiveTexture: TglActiveTexture,
228 pub glBindTexture: TglBindTexture,
229 pub glDrawElementsInstanced: TglDrawElementsInstanced,
230 pub glEnable: TglEnable,
231 pub glDepthFunc: TglDepthFunc,
232 pub glBlendEquationSeparate: TglBlendEquationSeparate,
233 pub glBlendFuncSeparate: TglBlendFuncSeparate,
234 pub glViewport: TglViewport,
235 pub glBindFramebuffer: TglBindFramebuffer,
236 pub glClearDepthf: TglClearDepthf,
237 pub glClearColor: TglClearColor,
238 pub glClear: TglClear,
239 pub glGenFramebuffers: TglGenFramebuffers,
240 pub glGenRenderbuffers: TglGenRenderbuffers,
241 pub glBindRenderbuffer: TglBindRenderbuffer,
242 pub glRenderbufferStorage: TglRenderbufferStorage,
243 pub glDisable: TglDisable,
244 pub glFramebufferRenderbuffer: TglFramebufferRenderbuffer,
245 pub glFramebufferTexture2D: TglFramebufferTexture2D,
246 pub glGetShaderiv: TglGetShaderiv,
247 pub glGetProgramiv: TglGetProgramiv,
248 pub glGetShaderInfoLog: TglGetShaderInfoLog,
249 pub glGetProgramInfoLog: TglGetProgramInfoLog,
250 pub glGetAttribLocation: TglGetAttribLocation,
251 pub glGetUniformLocation: TglGetUniformLocation,
252 pub glCreateShader: TglCreateShader,
253 pub glShaderSource: TglShaderSource,
254 pub glCompileShader: TglCompileShader,
255 pub glCreateProgram: TglCreateProgram,
256 pub glAttachShader: TglAttachShader,
257 pub glLinkProgram: TglLinkProgram,
258 pub glDeleteShader: TglDeleteShader,
259 pub glUniform1fv: TglUniform1fv,
260 pub glGenTextures: TglGenTextures,
261 pub glTexParameteri: TglTexParameteri,
262 pub glTexParameterfv: TglTexParameterfv,
263 pub glTexImage2D: TglTexImage2D,
264 pub glTexSubImage2D: TglTexSubImage2D,
265 pub glGetTexLevelParameteriv: TglGetTexLevelParameteriv,
266 pub glGenBuffers: TglGenBuffers,
267 pub glBufferData: TglBufferData,
268 pub glUniform1i: TglUniform1i,
269 pub glGetError: TglGetError,
270 pub glFinish: TglFinish,
271 pub glGetProgramBinary: TglGetProgramBinary,
272 pub glProgramBinary: TglProgramBinary,
273 pub glDeleteTextures: TglDeleteTextures,
274 pub glDeleteRenderbuffers: TglDeleteRenderbuffers,
275 pub glDeleteBuffers: TglDeleteBuffers,
276 pub glDeleteFramebuffers: TglDeleteFramebuffers,
277 pub glDeleteVertexArrays: TglDeleteVertexArrays,
278 pub glGenerateMipmap: TglGenerateMipmap,
279 pub glPixelStorei: TglPixelStorei,
280 pub glGetString: TglGetString,
281 pub glTexStorage3D: TglTexStorage3D,
282 pub glColorMask: TglColorMask,
283 pub glDepthMask: TglDepthMask,
284 pub glScissor: TglScissor,
285 pub glInvalidateFramebuffer: TglInvalidateFramebuffer,
286 pub glDebugMessageCallback: TglDebugMessageCallback,
287 pub glGetDebugMessageLog: TglGetDebugMessageLog,
288 pub glDebugMessageControl: TglDebugMessageControl,
289 pub glGetUniformBlockIndex: TglGetUniformBlockIndex,
290 pub glUniformBlockBinding: TglUniformBlockBinding,
291 pub glBindBufferBase: TglBindBufferBase,
292 pub glFramebufferTextureMultiviewOVR: Option<TglFramebufferTextureMultiviewOVR>,
293 pub glFramebufferTextureMultisampleMultiviewOVR: Option<TglFramebufferTextureMultisampleMultiviewOVR>,
294}
295
296
297
298macro_rules! load {
299 ($loadfn:expr, $ty:ident, $($sym:expr),*) => {
300 unsafe{
301 let syms = [$($sym,)*];
302 let ptr = $loadfn(&syms);
303 if ptr.is_null(){
304 Err(format!("Cannot find symbol {}", stringify!($ty)))
305 }
306 else{
307 Ok({ std::mem::transmute_copy::<_, $ty>(&ptr) })
308 }
309 }
310 };
311}
312
313
314impl LibGl{
315 pub fn enable_debugging(&self){
316 unsafe{(self.glEnable)(self::DEBUG_OUTPUT)};
317
318 unsafe extern "C" fn debug(_source: self::GLenum, _ty: self::GLenum, _id: self::GLuint, _severity:self::GLenum, _length:self::GLsizei, msg: *const self::GLchar, _param: *const std::ffi::c_void){
319 crate::log!("GL Debug info: {:?}", std::ffi::CStr::from_ptr(msg));
320 }
321
322 unsafe{(self.glDebugMessageControl)(
323 self::DONT_CARE,
324 self::DONT_CARE,
325 self::DONT_CARE,
326 0,
327 0 as * const _,
328 self::TRUE
329 )};
330 unsafe{(self.glDebugMessageCallback)(debug, 0 as *const _)};
331 }
332
333 pub fn try_load<F>(mut loadfn: F)->Result<LibGl, String>
334 where F: FnMut(&[&'static str]) -> *const raw::c_void
335 {
336 Ok(Self{
337 glGenVertexArrays: load!(loadfn, TglGenVertexArrays, "glGenVertexArrays", "glGenVertexArraysAPPLE", "glGenVertexArraysOES")?,
338 glBindVertexArray: load!(loadfn, TglBindVertexArray, "glBindVertexArray", "glBindVertexArrayOES")?,
339 glBindBuffer: load!(loadfn, TglBindBuffer, "glBindBuffer", "glBindBufferARB")?,
340 glVertexAttribPointer: load!(loadfn, TglVertexAttribPointer, "glVertexAttribPointer", "glVertexAttribPointerARB")?,
341 glEnableVertexAttribArray: load!(loadfn, TglEnableVertexAttribArray, "glEnableVertexAttribArray", "glEnableVertexAttribArrayARB")?,
342 glVertexAttribDivisor: load!(loadfn, TglVertexAttribDivisor, "glVertexAttribDivisor", "glVertexAttribDivisorANGLE", "glVertexAttribDivisorARB", "glVertexAttribDivisorEXT", "glVertexAttribDivisorNV")?,
343 glUseProgram: load!(loadfn, TglUseProgram, "glUseProgram", "glUseProgramObjectARB")?,
344 glActiveTexture: load!(loadfn, TglActiveTexture, "glActiveTexture", "glActiveTextureARB")?,
345 glBindTexture: load!(loadfn, TglBindTexture, "glBindTexture", "glBindTextureEXT")?,
346 glDrawElementsInstanced: load!(loadfn, TglDrawElementsInstanced, "glDrawElementsInstanced", "glDrawElementsInstancedANGLE", "glDrawElementsInstancedARB", "glDrawElementsInstancedEXT", "glDrawElementsInstancedNV")?,
347 glEnable: load!(loadfn, TglEnable, "glEnable")?,
348 glDepthFunc: load!(loadfn, TglDepthFunc, "glDepthFunc")?,
349 glBlendEquationSeparate: load!(loadfn, TglBlendEquationSeparate, "glBlendEquationSeparate", "glBlendEquationSeparateEXT")?,
350 glBlendFuncSeparate: load!(loadfn, TglBlendFuncSeparate, "glBlendFuncSeparate", "glBlendFuncSeparateEXT", "glBlendFuncSeparateINGR")?,
351 glViewport: load!(loadfn, TglViewport, "glViewport")?,
352 glBindFramebuffer: load!(loadfn, TglBindFramebuffer, "glBindFramebuffer")?,
353 glClearColor: load!(loadfn, TglClearColor, "glClearColor")?,
354 glClear: load!(loadfn, TglClear, "glClear")?,
355 glGenFramebuffers: load!(loadfn, TglGenFramebuffers, "glGenFramebuffers", "glGenFramebuffersEXT")?,
356 glGenRenderbuffers: load!(loadfn, TglGenRenderbuffers, "glGenRenderbuffers", "glGenRenderbuffersEXT")?,
357 glBindRenderbuffer: load!(loadfn, TglBindRenderbuffer, "glBindRenderbuffer")?,
358 glRenderbufferStorage: load!(loadfn, TglRenderbufferStorage, "glRenderbufferStorage", "glRenderbufferStorageEXT")?,
359 glDisable: load!(loadfn, TglDisable, "glDisable")?,
360 glFramebufferRenderbuffer: load!(loadfn, TglFramebufferRenderbuffer, "glFramebufferRenderbuffer", "glFramebufferRenderbufferEXT")?,
361 glFramebufferTexture2D: load!(loadfn, TglFramebufferTexture2D, "glFramebufferTexture2D", "glFramebufferTexture2DEXT")?,
362 glGetShaderiv: load!(loadfn, TglGetShaderiv, "glGetShaderiv")?,
363 glGetProgramiv: load!(loadfn, TglGetProgramiv, "glGetProgramiv")?,
364 glGetShaderInfoLog: load!(loadfn, TglGetShaderInfoLog, "glGetShaderInfoLog")?,
365 glGetProgramInfoLog: load!(loadfn, TglGetProgramInfoLog, "glGetProgramInfoLog")?,
366 glGetAttribLocation: load!(loadfn, TglGetAttribLocation, "glGetAttribLocation", "glGetAttribLocationARB")?,
367 glGetUniformLocation: load!(loadfn, TglGetUniformLocation, "glGetUniformLocation", "glGetUniformLocationARB")?,
368 glCreateShader: load!(loadfn, TglCreateShader, "glCreateShader", "glCreateShaderObjectARB")?,
369 glShaderSource: load!(loadfn, TglShaderSource, "glShaderSource", "glShaderSourceARB")?,
370 glCompileShader: load!(loadfn, TglCompileShader, "glCompileShader", "glCompileShaderARB")?,
371 glCreateProgram: load!(loadfn, TglCreateProgram, "glCreateProgram", "glCreateProgramObjectARB")?,
372 glAttachShader: load!(loadfn, TglAttachShader, "glAttachShader", "glAttachObjectARB")?,
373 glLinkProgram: load!(loadfn, TglLinkProgram, "glLinkProgram", "glLinkProgramARB")?,
374 glDeleteShader: load!(loadfn, TglDeleteShader, "glDeleteShader")?,
375 glUniform1fv: load!(loadfn, TglUniform1fv, "glUniform1fv", "glUniform1fvARB")?,
376 glGenTextures: load!(loadfn, TglGenTextures, "glGenTextures")?,
377 glTexParameteri: load!(loadfn, TglTexParameteri, "glTexParameteri")?,
378 glTexParameterfv: load!(loadfn, TglTexParameterfv, "glTexParameterfv")?,
379 glTexImage2D: load!(loadfn, TglTexImage2D, "glTexImage2D")?,
380 glTexSubImage2D: load!(loadfn, TglTexSubImage2D, "glTexSubImage2D")?,
381 glGetTexLevelParameteriv: load!(loadfn, TglGetTexLevelParameteriv, "glGetTexLevelParameteriv" )?,
382 glDeleteTextures: load!(loadfn, TglDeleteTextures, "glDeleteTextures")?,
383 glGenBuffers: load!(loadfn, TglGenBuffers, "glGenBuffers", "glGenBuffersARB")?,
384 glBufferData: load!(loadfn, TglBufferData, "glBufferData", "glBufferDataARB")?,
385 glUniform1i: load!(loadfn, TglUniform1i, "glUniform1i", "glUniform1iARB")?,
386 glGetError: load!(loadfn, TglGetError, "glGetError")?,
387 glFinish: load!(loadfn, TglFinish, "glFinish")?,
388 glClearDepthf: load!(loadfn, TglClearDepthf, "glClearDepthf", "glClearDepthfOES")?,
389 glGetProgramBinary: load!(loadfn, TglGetProgramBinary, "glGetProgramBinary", "glGetProgramBinaryOES")?,
390 glProgramBinary: load!(loadfn, TglProgramBinary, "glProgramBinary", "glProgramBinaryOES")?,
391 glDeleteRenderbuffers: load!(loadfn, TglDeleteRenderbuffers, "glDeleteRenderbuffers", "glDeleteRenderbuffersEXT")?,
392 glDeleteBuffers: load!(loadfn, TglDeleteBuffers, "glDeleteBuffers", "glDeleteBuffersARB")?,
393 glDeleteFramebuffers: load!(loadfn, TglDeleteFramebuffers, "glDeleteFramebuffers", "glDeleteFramebuffersEXT")?,
394 glDeleteVertexArrays: load!(loadfn, TglDeleteVertexArrays, "glDeleteVertexArrays", "glDeleteVertexArraysAPPLE", "glDeleteVertexArraysOES")?,
395 glGenerateMipmap: load!(loadfn, TglGenerateMipmap, "glGenerateMipmap")?,
396 glPixelStorei: load!(loadfn, TglPixelStorei, "glPixelStorei")?,
397 glGetString: load!(loadfn, TglGetString, "glGetString")?,
398 glTexStorage3D: load!(loadfn, TglTexStorage3D, "glTexStorage3D")?,
399 glColorMask: load!(loadfn, TglColorMask, "glColorMask")?,
400 glDepthMask: load!(loadfn, TglDepthMask, "glDepthMask")?,
401 glScissor: load!(loadfn, TglScissor, "glScissor")?,
402 glInvalidateFramebuffer: load!(loadfn, TglInvalidateFramebuffer, "glInvalidateFramebuffer")?,
403 glDebugMessageCallback: load!(loadfn, TglDebugMessageCallback, "glDebugMessageCallback")?,
404 glGetDebugMessageLog: load!(loadfn, TglGetDebugMessageLog, "glGetDebugMessageLog")?,
405 glDebugMessageControl: load!(loadfn, TglDebugMessageControl, "glDebugMessageControl")?,
406 glGetUniformBlockIndex: load!(loadfn, TglGetUniformBlockIndex, "glGetUniformBlockIndex")?,
407 glUniformBlockBinding: load!(loadfn, TglUniformBlockBinding, "glUniformBlockBinding")?,
408 glBindBufferBase: load!(loadfn, TglBindBufferBase, "glBindBufferBase")?,
409
410 glFramebufferTextureMultiviewOVR: load!(loadfn, TglFramebufferTextureMultiviewOVR, "glFramebufferTextureMultiviewOVR").ok(),
412 glFramebufferTextureMultisampleMultiviewOVR: load!(loadfn, TglFramebufferTextureMultisampleMultiviewOVR, "glFramebufferTextureMultisampleMultiviewOVR").ok()
413 })
414 }
415}