misc_util.rs
1 #![allow(unsafe_code)] 2 3 use glow::HasContext as _; 4 5 pub(crate) unsafe fn compile_shader( 6 gl: &glow::Context, 7 shader_type: u32, 8 source: &str, 9 ) -> Result<glow::Shader, String> { 10 let shader = gl.create_shader(shader_type)?; 11 12 gl.shader_source(shader, source); 13 14 gl.compile_shader(shader); 15 16 if gl.get_shader_compile_status(shader) { 17 Ok(shader) 18 } else { 19 Err(gl.get_shader_info_log(shader)) 20 } 21 } 22 23 pub(crate) unsafe fn link_program<'a, T: IntoIterator<Item = &'a glow::Shader>>( 24 gl: &glow::Context, 25 shaders: T, 26 ) -> Result<glow::Program, String> { 27 let program = gl.create_program()?; 28 29 for shader in shaders { 30 gl.attach_shader(program, *shader); 31 } 32 33 gl.link_program(program); 34 35 if gl.get_program_link_status(program) { 36 Ok(program) 37 } else { 38 Err(gl.get_program_info_log(program)) 39 } 40 }