librashader/librashader-runtime-gl/tests/hello_triangle/mod.rs
2024-09-22 02:06:47 -04:00

52 lines
1.7 KiB
Rust

use glow::HasContext;
pub mod gl3;
pub mod gl46;
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:?}");
}