1use std::ffi::c_void;
2
3use crate::{GLenum, GLerror, GLint, GLsizei, GLuint};
4
5pub fn gl_get_error() -> GLenum {
6 unsafe { gl::GetError() }
7}
8
9pub fn gl_load_with<F: FnMut(&'static str) -> *const c_void>(loadfn: F) {
10 unsafe { gl::load_with(loadfn) };
11}
12
13pub fn close_check_errors<T>(output: T) -> Result<T, GLerror> {
14 let err: GLenum = gl_get_error();
15
16 if err == 0 {
17 return Ok(output);
18 } else {
19 Err(GLerror::from_gl_error(err))
20 }
21}
22
23pub fn gl_create_shader(shader_type: GLenum) -> Result<GLuint, GLerror> {
24 let output: u32 = unsafe { gl::CreateShader(shader_type) };
25
26 if output == 0 {
27 return Err(GLerror::CreateShaderFail);
28 }
29
30 return Ok(output);
31}
32
33pub fn gl_shader_source(shader: GLuint, count: GLsizei, string: &'static str, length: &mut GLint) {
34 let str_ptr: [*const i8; 1] = [string.as_ptr() as *const i8];
35 unsafe { gl::ShaderSource(shader, count, str_ptr.as_ptr(), length); };
36}
37
38pub fn gl_compile_shader(shader: GLuint) {
39 unsafe { gl::CompileShader(shader) };
40}
41
42pub fn gl_create_program() -> Result<GLuint, GLerror> {
43 let output: GLuint = unsafe { gl::CreateProgram() };
44
45 if output == 0 {
46 return Err(GLerror::CreateProgramFail);
47 }
48
49 return Ok(output);
50}
51
52pub fn gl_attach_shader(program: GLuint, shader: GLuint) {
53 unsafe { gl::AttachShader(program, shader) };
54}
55
56pub fn gl_link_program(program: GLuint) {
57 unsafe { gl::LinkProgram(program) };
58}
59
60pub fn gl_delete_shader(shader: GLuint) {
61 unsafe { gl::DeleteShader(shader) };
62}
63
64pub fn gl_use_program(program: GLuint) {
65 unsafe { gl::UseProgram(program) };
66}
67
68pub fn gl_dispatch_compute(num_groups_x: GLuint, num_groups_y: GLuint, num_groups_z: GLuint, ) {
69 unsafe { gl::DispatchCompute(num_groups_x, num_groups_y, num_groups_z) };
70}