#[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; uniform float t; void main() { vec2 p = position; p.x += t; gl_Position = vec4(p, 0.0, 1.0); } "#; let fragment_shader_src = r#" #version 140 out vec4 color; void main() { color = vec4(0.7, 0.3, 0.2, 1.0); } "#; let program = glium::Program::from_source(&display, vertex_shader_src, fragment_shader_src, None).unwrap(); let mut t: f32 = -0.5; loop { t += 0.002; if t > 0.5 { t = -0.5; } let mut target = display.draw(); target.clear_color(0.3, 0.3, 0.2, 1.0); target.draw(&vertex_buffer, &indices, &program, &uniform! { t: t }, &Default::default()).unwrap(); target.finish().unwrap(); for ev in display.poll_events() { match ev { glium::glutin::Event::Closed => return, _ => () } } } }