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}