1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
use super::enums::*;
use gl;
use gl::types::*;
use std::ffi::CString;
use std::ptr;
#[derive(Clone, Copy)]
pub struct GLShader(GLuint);
pub fn gl_create_program() -> GLShader {
unsafe { GLShader(gl::CreateProgram()) }
}
pub fn gl_create_shader(type_: GLShaderType) -> GLShader {
unsafe { GLShader(gl::CreateShader(type_ as GLenum)) }
}
pub fn gl_shader_source(shader: GLShader, source: &str) {
unsafe {
gl::ShaderSource(
shader.0,
1,
&CString::new(source).unwrap().as_ptr(),
ptr::null(),
);
}
}
pub fn gl_compile_shader(shader: GLShader) {
unsafe {
gl::CompileShader(shader.0);
}
}
pub fn gl_get_shader_iv(shader: GLShader, parameter: GLShaderInfoParam, status: &mut GLint) {
unsafe {
gl::GetShaderiv(shader.0, parameter as GLenum, status);
}
}
pub fn gl_get_shader_info_log(
shader: GLShader,
buffer_size: GLsizei,
length: &mut GLsizei,
info_log: &mut Vec<GLchar>,
) {
unsafe {
gl::GetShaderInfoLog(
shader.0,
buffer_size,
length,
info_log.as_mut_ptr() as *mut GLchar,
);
}
}
pub fn gl_attach_shader(program: GLShader, shader: GLShader) {
unsafe {
gl::AttachShader(program.0, shader.0);
}
}
pub fn gl_link_program(program: GLShader) {
unsafe {
gl::LinkProgram(program.0);
}
}
pub fn gl_use_program(program: GLShader) {
unsafe {
gl::UseProgram(program.0);
}
}
pub fn gl_delete_program(program: GLShader) {
unsafe {
gl::DeleteProgram(program.0);
}
}
pub fn gl_delete_shader(shader: GLShader) {
unsafe {
gl::DeleteShader(shader.0);
}
}