summaryrefslogtreecommitdiff
path: root/rust/opengl/src
diff options
context:
space:
mode:
Diffstat (limited to 'rust/opengl/src')
-rw-r--r--rust/opengl/src/main.rs64
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,
+ _ => ()
+ }
+ }
+ }
+
+}