1#![allow(non_snake_case)]
2
3mod enums;
4
5use core::ffi::{c_void, CStr};
6use crate::utils::*;
7
8pub use crate::types::*;
9pub use enums::*;
10
11pub unsafe fn glCreateShader(ty: GLenum) -> GLuint {
12 call_ptr_1arg(CREATE_SHADER_PTR, ty)
13}
14
15pub unsafe fn glShaderSource(shader: GLuint, count: GLsizei, string: *const *const GLchar, length: *const GLint) {
16 call_ptr_4arg(SHADER_SOURCE_PTR, shader, count, string, length)
17}
18
19pub unsafe fn glCompileShader(shader: GLuint) {
20 call_ptr_1arg(COMPILE_SHADER_PTR, shader)
21}
22
23pub unsafe fn glDeleteShader(shader: GLuint) {
24 call_ptr_1arg(DELETE_SHADER_PTR, shader)
25}
26
27pub unsafe fn glGetShaderiv(shader: GLuint, pname: GLenum, params: *mut GLint) {
28 call_ptr_3arg(GET_SHADER_IV_PTR, shader, pname, params)
29}
30
31pub unsafe fn glGetShaderInfoLog(shader: GLuint, max_length: GLsizei, length: *mut GLsizei, info_log: *mut GLchar) {
32 call_ptr_4arg(GET_SHADER_INFO_LOG_PTR, shader, max_length, length, info_log)
33}
34
35pub unsafe fn glCreateProgram() -> GLuint {
36 call_ptr_0arg(CREATE_PROGRAM_PTR)
37}
38
39pub unsafe fn glAttachShader(program: GLuint, shader: GLuint) {
40 call_ptr_2arg(ATTACH_SHADER_PTR, program, shader)
41}
42
43pub unsafe fn glLinkProgram(program: GLuint) {
44 call_ptr_1arg(LINK_PROGRAM_PTR, program)
45}
46
47pub unsafe fn glGetProgramiv(program: GLuint, pname: GLenum, params: *mut GLint) {
48 call_ptr_3arg(GET_PROGRAM_IV_PTR, program, pname, params)
49}
50
51pub unsafe fn glGetProgramInfoLog(program: GLuint, max_length: GLsizei, length: *mut GLsizei, info_log: *mut GLchar) {
52 call_ptr_4arg(GET_PROGRAM_INFO_LOG_PTR, program, max_length, length, info_log)
53}
54
55pub unsafe fn glDeleteProgram(program: GLuint) {
56 call_ptr_1arg(DELETE_PROGRAM_PTR, program)
57}
58
59pub unsafe fn glDrawArrays(mode: GLenum, first: GLint, count: GLsizei) {
60 call_ptr_3arg(DRAW_ARRAYS_PTR, mode, first, count)
61}
62
63pub unsafe fn glCreateBuffers(n: GLsizei, buffers: *mut GLuint) {
64 call_ptr_2arg(CREATE_BUFFERS_PTR, n, buffers)
65}
66
67pub unsafe fn glNamedBufferData(buffer: GLuint, size: GLsizeiptr, data: *const c_void, usage: GLenum) {
68 call_ptr_4arg(NAMED_BUFFER_DATA_PTR, buffer, size, data, usage)
69}
70
71pub unsafe fn glDeleteBuffers(n: GLsizei, buffers: *const GLuint) {
72 call_ptr_2arg(DELETE_BUFFERS_PTR, n, buffers)
73}
74
75pub unsafe fn glCreateVertexArrays(n: GLsizei, arrays: *mut GLuint) {
76 call_ptr_2arg(CREATE_VERTEX_ARRAYS_PTR, n, arrays)
77}
78
79pub unsafe fn glVertexArrayVertexBuffer(vaobj: GLuint, bindingindex: GLuint, buffer: GLuint, offset: GLintptr, stride: GLsizei) {
80 call_ptr_5arg(VERTEX_ARRAY_VERTEX_BUFFER_PTR, vaobj, bindingindex, buffer, offset, stride)
81}
82
83pub unsafe fn glVertexArrayElementBuffer(vaobj: GLuint, buffer: GLuint) {
84 call_ptr_2arg(VERTEX_ARRAY_ELEMENT_BUFFER_PTR, vaobj, buffer)
85}
86
87pub unsafe fn glEnableVertexArrayAttrib(vaobj: GLuint, index: GLuint) {
88 call_ptr_2arg(ENABLE_VERTEX_ARRAY_ATTRIB_PTR, vaobj, index)
89}
90
91pub unsafe fn glVertexArrayAttribFormat(vaobj: GLuint, attribindex: GLuint, size: GLint, ty: GLenum, normalized: GLboolean, relativeoffset: GLuint) {
92 call_ptr_6arg(VERTEX_ARRAY_ATTRIB_FORMAT_PTR, vaobj, attribindex, size, ty, normalized, relativeoffset)
93}
94
95pub unsafe fn glVertexArrayAttribBinding(vaobj: GLuint, attribindex: GLuint, bindingindex: GLuint) {
96 call_ptr_3arg(VERTEX_ARRAY_ATTRIB_BINDING_PTR, vaobj, attribindex, bindingindex)
97}
98
99pub unsafe fn glDeleteVertexArrays(n: GLsizei, arrays: *const GLuint) {
100 call_ptr_2arg(DELETE_VERTEX_ARRAYS_PTR, n, arrays)
101}
102
103pub unsafe fn glNamedBufferStorage(buffer: GLuint, size: GLsizeiptr, data: *const c_void, flags: GLbitfield) {
104 call_ptr_4arg(NAMED_BUFFER_STORAGE_PTR, buffer, size, data, flags)
105}
106
107pub unsafe fn glCreateTextures(target: GLenum, n: GLsizei, textures: *mut GLuint) {
108 call_ptr_3arg(CREATE_TEXTURES_PTR, target, n, textures)
109}
110
111pub unsafe fn glDeleteTextures(n: GLsizei, textures: *const GLuint) {
112 call_ptr_2arg(DELETE_TEXTURES_PTR, n, textures)
113}
114
115pub unsafe fn glTextureStorage2D(texture: GLuint, levels: GLsizei, internalformat: GLenum, width: GLsizei, height: GLsizei) {
116 call_ptr_5arg(TEXTURE_STORAGE_2D_PTR, texture, levels, internalformat, width, height)
117}
118
119pub unsafe fn glCreateFramebuffers(n: GLsizei, framebuffers: *mut GLuint) {
120 call_ptr_2arg(CREATE_FRAMEBUFFERS_PTR, n, framebuffers)
121}
122
123pub unsafe fn glDeleteFramebuffers(n: GLsizei, framebuffers: *const GLuint) {
124 call_ptr_2arg(DELETE_FRAMEBUFFERS_PTR, n, framebuffers)
125}
126
127pub unsafe fn glNamedFramebufferTexture(framebuffer: GLuint, attachment: GLenum, texture: GLuint, level: GLint) {
128 call_ptr_4arg(NAMED_FRAMEBUFFER_TEXTURE_PTR, framebuffer, attachment, texture, level)
129}
130
131pub unsafe fn glUseProgram(program: GLuint) {
132 call_ptr_1arg(USE_PROGRAM_PTR, program)
133}
134
135pub unsafe fn glBindVertexArray(vertex_array: GLuint) {
136 call_ptr_1arg(BIND_VERTEX_ARRAY_PTR, vertex_array)
137}
138
139pub unsafe fn glClear(mask: GLbitfield) {
140 call_ptr_1arg(CLEAR_PTR, mask)
141}
142
143pub unsafe fn glClearColor(red: GLfloat, green: GLfloat, blue: GLfloat, alpha: GLfloat) {
144 call_ptr_4arg(CLEAR_COLOR_PTR, red, green, blue, alpha)
145}
146
147pub unsafe fn glGetUniformLocation(program: GLuint, name: *const GLchar) -> GLint {
148 call_ptr_2arg(GET_UNIFORM_LOCATION_PTR, program, name)
149}
150
151pub unsafe fn glProgramUniform1f(program: GLuint, location: GLint, v0: GLfloat) {
152 call_ptr_3arg(PROGRAM_UNIFORM_1F_PTR, program, location, v0)
153}
154
155pub unsafe fn glViewport(x: GLint, y: GLint, width: GLsizei, height: GLsizei) {
156 call_ptr_4arg(VIEWPORT_PTR, x, y, width, height)
157}
158
159pub unsafe fn glBindFramebuffer(target: GLenum, framebuffer: GLuint) {
160 call_ptr_2arg(BIND_FRAMEBUFFER_PTR, target, framebuffer)
161}
162
163static mut CREATE_SHADER_PTR: *const c_void = core::ptr::null();
164static mut SHADER_SOURCE_PTR: *const c_void = core::ptr::null();
165static mut COMPILE_SHADER_PTR: *const c_void = core::ptr::null();
166static mut DELETE_SHADER_PTR: *const c_void = core::ptr::null();
167static mut GET_SHADER_IV_PTR: *const c_void = core::ptr::null();
168static mut GET_SHADER_INFO_LOG_PTR: *const c_void = core::ptr::null();
169static mut CREATE_PROGRAM_PTR: *const c_void = core::ptr::null();
170static mut ATTACH_SHADER_PTR: *const c_void = core::ptr::null();
171static mut LINK_PROGRAM_PTR: *const c_void = core::ptr::null();
172static mut GET_PROGRAM_IV_PTR: *const c_void = core::ptr::null();
173static mut GET_PROGRAM_INFO_LOG_PTR: *const c_void = core::ptr::null();
174static mut DELETE_PROGRAM_PTR: *const c_void = core::ptr::null();
175static mut DRAW_ARRAYS_PTR: *const c_void = core::ptr::null();
176static mut CREATE_BUFFERS_PTR: *const c_void = core::ptr::null();
177static mut NAMED_BUFFER_DATA_PTR: *const c_void = core::ptr::null();
178static mut DELETE_BUFFERS_PTR: *const c_void = core::ptr::null();
179static mut CREATE_VERTEX_ARRAYS_PTR: *const c_void = core::ptr::null();
180static mut VERTEX_ARRAY_VERTEX_BUFFER_PTR: *const c_void = core::ptr::null();
181static mut VERTEX_ARRAY_ELEMENT_BUFFER_PTR: *const c_void = core::ptr::null();
182static mut ENABLE_VERTEX_ARRAY_ATTRIB_PTR: *const c_void = core::ptr::null();
183static mut VERTEX_ARRAY_ATTRIB_FORMAT_PTR: *const c_void = core::ptr::null();
184static mut VERTEX_ARRAY_ATTRIB_BINDING_PTR: *const c_void = core::ptr::null();
185static mut DELETE_VERTEX_ARRAYS_PTR: *const c_void = core::ptr::null();
186static mut NAMED_BUFFER_STORAGE_PTR: *const c_void = core::ptr::null();
187static mut CREATE_TEXTURES_PTR: *const c_void = core::ptr::null();
188static mut DELETE_TEXTURES_PTR: *const c_void = core::ptr::null();
189static mut TEXTURE_STORAGE_2D_PTR: *const c_void = core::ptr::null();
190static mut CREATE_FRAMEBUFFERS_PTR: *const c_void = core::ptr::null();
191static mut DELETE_FRAMEBUFFERS_PTR: *const c_void = core::ptr::null();
192static mut NAMED_FRAMEBUFFER_TEXTURE_PTR: *const c_void = core::ptr::null();
193static mut USE_PROGRAM_PTR: *const c_void = core::ptr::null();
194static mut BIND_VERTEX_ARRAY_PTR: *const c_void = core::ptr::null();
195static mut CLEAR_PTR: *const c_void = core::ptr::null();
196static mut CLEAR_COLOR_PTR: *const c_void = core::ptr::null();
197static mut GET_UNIFORM_LOCATION_PTR: *const c_void = core::ptr::null();
198static mut PROGRAM_UNIFORM_1F_PTR: *const c_void = core::ptr::null();
199static mut VIEWPORT_PTR: *const c_void = core::ptr::null();
200static mut BIND_FRAMEBUFFER_PTR: *const c_void = core::ptr::null();
201
202pub unsafe fn load(get_proc_address: impl Fn(&CStr)-> *const c_void) {
217 CREATE_SHADER_PTR = get_proc_address(c"glCreateShader");
218 SHADER_SOURCE_PTR = get_proc_address(c"glShaderSource");
219 COMPILE_SHADER_PTR = get_proc_address(c"glCompileShader");
220 DELETE_SHADER_PTR = get_proc_address(c"glDeleteShader");
221 GET_SHADER_IV_PTR = get_proc_address(c"glGetShaderiv");
222 GET_SHADER_INFO_LOG_PTR = get_proc_address(c"glGetShaderInfoLog");
223 CREATE_PROGRAM_PTR = get_proc_address(c"glCreateProgram");
224 ATTACH_SHADER_PTR = get_proc_address(c"glAttachShader");
225 LINK_PROGRAM_PTR = get_proc_address(c"glLinkProgram");
226 GET_PROGRAM_IV_PTR = get_proc_address(c"glGetProgramiv");
227 GET_PROGRAM_INFO_LOG_PTR = get_proc_address(c"glGetProgramInfoLog");
228 DELETE_PROGRAM_PTR = get_proc_address(c"glDeleteProgram");
229 DRAW_ARRAYS_PTR = get_proc_address(c"glDrawArrays");
230 CREATE_BUFFERS_PTR = get_proc_address(c"glCreateBuffers");
231 NAMED_BUFFER_DATA_PTR = get_proc_address(c"glNamedBufferData");
232 DELETE_BUFFERS_PTR = get_proc_address(c"glDeleteBuffers");
233 CREATE_VERTEX_ARRAYS_PTR = get_proc_address(c"glCreateVertexArrays");
234 VERTEX_ARRAY_VERTEX_BUFFER_PTR = get_proc_address(c"glVertexArrayVertexBuffer");
235 VERTEX_ARRAY_ELEMENT_BUFFER_PTR = get_proc_address(c"glVertexArrayElementBuffer");
236 ENABLE_VERTEX_ARRAY_ATTRIB_PTR = get_proc_address(c"glEnableVertexArrayAttrib");
237 VERTEX_ARRAY_ATTRIB_FORMAT_PTR = get_proc_address(c"glVertexArrayAttribFormat");
238 VERTEX_ARRAY_ATTRIB_BINDING_PTR = get_proc_address(c"glVertexArrayAttribBinding");
239 DELETE_VERTEX_ARRAYS_PTR = get_proc_address(c"glDeleteVertexArrays");
240 NAMED_BUFFER_STORAGE_PTR = get_proc_address(c"glNamedBufferStorage");
241 CREATE_TEXTURES_PTR = get_proc_address(c"glCreateTextures");
242 DELETE_TEXTURES_PTR = get_proc_address(c"glDeleteTextures");
243 TEXTURE_STORAGE_2D_PTR = get_proc_address(c"glTextureStorage2D");
244 CREATE_FRAMEBUFFERS_PTR = get_proc_address(c"glCreateFramebuffers");
245 DELETE_FRAMEBUFFERS_PTR = get_proc_address(c"glDeleteFramebuffers");
246 NAMED_FRAMEBUFFER_TEXTURE_PTR = get_proc_address(c"glNamedFramebufferTexture");
247 USE_PROGRAM_PTR = get_proc_address(c"glUseProgram");
248 BIND_VERTEX_ARRAY_PTR = get_proc_address(c"glBindVertexArray");
249 CLEAR_PTR = get_proc_address(c"glClear");
250 CLEAR_COLOR_PTR = get_proc_address(c"glClearColor");
251 GET_UNIFORM_LOCATION_PTR = get_proc_address(c"glGetUniformLocation");
252 PROGRAM_UNIFORM_1F_PTR = get_proc_address(c"glProgramUniform1f");
253 VIEWPORT_PTR = get_proc_address(c"glViewport");
254 BIND_FRAMEBUFFER_PTR = get_proc_address(c"glBindFramebuffer");
255}