Permalink
bvssvni
Updated dependencies
2d35eae
Jun 10, 2019
Join GitHub today
GitHub is home to over 40 million developers working together to host and review code, manage projects, and build software together.
Sign up| extern crate piston; | |
| extern crate graphics; | |
| extern crate glutin_window; | |
| extern crate opengl_graphics; | |
| use piston::window::WindowSettings; | |
| use piston::event_loop::*; | |
| use piston::input::*; | |
| use glutin_window::GlutinWindow as Window; | |
| use opengl_graphics::{ GlGraphics, OpenGL }; | |
| pub struct App { | |
| gl: GlGraphics, // OpenGL drawing backend. | |
| rotation: f64 // Rotation for the square. | |
| } | |
| impl App { | |
| fn render(&mut self, args: &RenderArgs) { | |
| use graphics::*; | |
| const GREEN: [f32; 4] = [0.0, 1.0, 0.0, 1.0]; | |
| const RED: [f32; 4] = [1.0, 0.0, 0.0, 1.0]; | |
| let square = rectangle::square(0.0, 0.0, 50.0); | |
| let rotation = self.rotation; | |
| let (x, y) = (args.window_size[0] / 2.0, | |
| args.window_size[1] / 2.0); | |
| self.gl.draw(args.viewport(), |c, gl| { | |
| // Clear the screen. | |
| clear(GREEN, gl); | |
| let transform = c.transform.trans(x, y) | |
| .rot_rad(rotation) | |
| .trans(-25.0, -25.0); | |
| // Draw a box rotating around the middle of the screen. | |
| rectangle(RED, square, transform, gl); | |
| }); | |
| } | |
| fn update(&mut self, args: &UpdateArgs) { | |
| // Rotate 2 radians per second. | |
| self.rotation += 2.0 * args.dt; | |
| } | |
| } | |
| fn main() { | |
| // Change this to OpenGL::V2_1 if not working. | |
| let opengl = OpenGL::V3_2; | |
| // Create an Glutin window. | |
| let mut window: Window = WindowSettings::new( | |
| "spinning-square", | |
| [200, 200] | |
| ) | |
| .graphics_api(opengl) | |
| .exit_on_esc(true) | |
| .build() | |
| .unwrap(); | |
| // Create a new game and run it. | |
| let mut app = App { | |
| gl: GlGraphics::new(opengl), | |
| rotation: 0.0 | |
| }; | |
| let mut events = Events::new(EventSettings::new()); | |
| while let Some(e) = events.next(&mut window) { | |
| if let Some(r) = e.render_args() { | |
| app.render(&r); | |
| } | |
| if let Some(u) = e.update_args() { | |
| app.update(&u); | |
| } | |
| } | |
| } |