2024-02-06 10:39:01 +11:00
|
|
|
use glow::HasContext;
|
|
|
|
|
2023-02-17 09:33:47 +11:00
|
|
|
pub mod gl3;
|
2023-02-16 16:39:36 +11:00
|
|
|
pub mod gl46;
|
2024-02-06 10:39:01 +11:00
|
|
|
|
|
|
|
pub fn compile_program(gl: &glow::Context, vertex: &str, fragment: &str) -> glow::Program {
|
|
|
|
let vertex_shader = unsafe { gl.create_shader(glow::VERTEX_SHADER).unwrap() };
|
|
|
|
unsafe {
|
|
|
|
gl.shader_source(vertex_shader, &vertex);
|
|
|
|
gl.compile_shader(vertex_shader);
|
|
|
|
|
|
|
|
if !gl.get_shader_compile_status(vertex_shader) {
|
|
|
|
let error = gl.get_shader_info_log(vertex_shader);
|
|
|
|
panic!("Vertex Shader Compile Error: {error}",);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let fragment_shader = unsafe { gl.create_shader(glow::FRAGMENT_SHADER).unwrap() };
|
|
|
|
unsafe {
|
|
|
|
gl.shader_source(fragment_shader, &fragment);
|
|
|
|
gl.compile_shader(fragment_shader);
|
|
|
|
|
|
|
|
if !gl.get_shader_compile_status(fragment_shader) {
|
|
|
|
let error = gl.get_shader_info_log(fragment_shader);
|
|
|
|
panic!("Fragment Shader Compile Error: {error}",);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
let shader_program = unsafe { gl.create_program().unwrap() };
|
|
|
|
unsafe {
|
|
|
|
gl.attach_shader(shader_program, vertex_shader);
|
|
|
|
gl.attach_shader(shader_program, fragment_shader);
|
|
|
|
gl.link_program(shader_program);
|
|
|
|
|
|
|
|
if !gl.get_program_link_status(shader_program) {
|
|
|
|
let error = gl.get_program_info_log(shader_program);
|
|
|
|
panic!("Program Link Error: {error}",);
|
|
|
|
}
|
|
|
|
|
|
|
|
gl.detach_shader(shader_program, vertex_shader);
|
|
|
|
gl.detach_shader(shader_program, fragment_shader);
|
|
|
|
gl.delete_shader(vertex_shader);
|
|
|
|
gl.delete_shader(fragment_shader);
|
|
|
|
}
|
|
|
|
|
|
|
|
shader_program
|
|
|
|
}
|
|
|
|
|
|
|
|
fn debug_callback(_source: u32, _err_type: u32, _id: u32, _severity: u32, message: &str) {
|
|
|
|
println!("[gl] {message:?}");
|
|
|
|
}
|