diff options
author | 2020-05-21 19:07:33 +0200 | |
---|---|---|
committer | 2020-05-21 19:07:33 +0200 | |
commit | 60dcfc354e844757d2291bf44cb21c624bc270c2 (patch) | |
tree | cc1ee2d923e8deb79c968dc96a918ec086b7dcf7 /glow/src/program.rs | |
parent | d54f17c6aa1cc90d97c63781e7d06af1b919ef0c (diff) | |
download | iced-60dcfc354e844757d2291bf44cb21c624bc270c2.tar.gz iced-60dcfc354e844757d2291bf44cb21c624bc270c2.tar.bz2 iced-60dcfc354e844757d2291bf44cb21c624bc270c2.zip |
Draft `triangle` pipeline in `iced_glow`
Diffstat (limited to 'glow/src/program.rs')
-rw-r--r-- | glow/src/program.rs | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/glow/src/program.rs b/glow/src/program.rs new file mode 100644 index 00000000..489a194f --- /dev/null +++ b/glow/src/program.rs @@ -0,0 +1,39 @@ +use glow::HasContext; + +pub unsafe fn create( + gl: &glow::Context, + shader_sources: &[(u32, &str)], +) -> <glow::Context as HasContext>::Program { + let program = gl.create_program().expect("Cannot create program"); + + let mut shaders = Vec::with_capacity(shader_sources.len()); + + for (shader_type, shader_source) in shader_sources.iter() { + let shader = gl + .create_shader(*shader_type) + .expect("Cannot create shader"); + + gl.shader_source(shader, shader_source); + gl.compile_shader(shader); + + if !gl.get_shader_compile_status(shader) { + panic!(gl.get_shader_info_log(shader)); + } + + gl.attach_shader(program, shader); + + shaders.push(shader); + } + + gl.link_program(program); + if !gl.get_program_link_status(program) { + panic!(gl.get_program_info_log(program)); + } + + for shader in shaders { + gl.detach_shader(program, shader); + gl.delete_shader(shader); + } + + program +} |