egui_glow/
misc_util.rs

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