summaryrefslogtreecommitdiffstats
path: root/glow/src/program.rs
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-05-21 19:07:33 +0200
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2020-05-21 19:07:33 +0200
commit60dcfc354e844757d2291bf44cb21c624bc270c2 (patch)
treecc1ee2d923e8deb79c968dc96a918ec086b7dcf7 /glow/src/program.rs
parentd54f17c6aa1cc90d97c63781e7d06af1b919ef0c (diff)
downloadiced-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.rs39
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
+}