/ egui_glow / src / misc_util.rs
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  }