diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-06-10 23:45:06 -0400 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2016-06-10 23:45:06 -0400 |
commit | 695f4cec3b8216577b9ce7e0b017e23b2eb19212 (patch) | |
tree | fb6d5c4bf94216714f7ff5c833c86712348db148 /rust/opengl/src/main.rs | |
parent | 7374f65411d76dfe855d345f87dddb2fcda7ce5e (diff) |
OpenGL example using glium.
Diffstat (limited to 'rust/opengl/src/main.rs')
-rw-r--r-- | rust/opengl/src/main.rs | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/rust/opengl/src/main.rs b/rust/opengl/src/main.rs new file mode 100644 index 0000000..667339b --- /dev/null +++ b/rust/opengl/src/main.rs @@ -0,0 +1,64 @@ +#[macro_use] +extern crate glium; + +fn main() { + use glium::DisplayBuild; + use glium::Surface; + + let display = glium::glutin::WindowBuilder::new() + .with_dimensions(1024, 768) + .with_title(format!("Hello world")) + .build_glium() + .unwrap(); + + // let display = glium::glutin::WindowBuilder::new().build_glium().unwrap(); + + #[derive(Copy, Clone)] + struct Vertex { + position: [f32; 2], + } + + implement_vertex!(Vertex, position); + + let vertex1 = Vertex { position: [-0.5, -0.5] }; + let vertex2 = Vertex { position: [ 0.0, 0.5] }; + let vertex3 = Vertex { position: [ 0.5, -0.25] }; + let shape = vec![vertex1, vertex2, vertex3]; + + let vertex_buffer = glium::VertexBuffer::new(&display, &shape).unwrap(); + let indices = glium::index::NoIndices(glium::index::PrimitiveType::TrianglesList); + + let vertex_shader_src = r#" + #version 140 + in vec2 position; + void main() { + gl_Position = vec4(position, 0.0, 1.0); + } + "#; + + let fragment_shader_src = r#" + #version 140 + out vec4 color; + void main() { + color = vec4(1.0, 0.0, 0.0, 1.0); + } + "#; + + let program = glium::Program::from_source(&display, vertex_shader_src, fragment_shader_src, None).unwrap(); + + loop { + let mut target = display.draw(); + target.clear_color(0.0, 0.0, 1.0, 1.0); + target.draw(&vertex_buffer, &indices, &program, &glium::uniforms::EmptyUniforms, + &Default::default()).unwrap(); + target.finish().unwrap(); + + for ev in display.poll_events() { + match ev { + glium::glutin::Event::Closed => return, + _ => () + } + } + } + +} |