extern crate vrtue; use vrtue::{scenes, view, vr}; use vrtue::scene::{Event, Scene}; extern crate env_logger; extern crate gfx_device_gl; #[macro_use] extern crate log; extern crate piston; extern crate piston_window; use self::piston::input::{Button, ButtonArgs, Input, Key}; use self::piston_window::{PistonWindow, Window, WindowSettings}; use std::env; pub fn main() { env_logger::init().expect("env logger"); let mut vr = match env::var("NO_VR") { Ok(ref no_vr) if no_vr != "0" => None, _ => Some(vr::VR::new().expect("VR init")) }; let mut window: PistonWindow = WindowSettings::new("Hello, Britannia!", [1024; 2]) .exit_on_esc(true) .vsync(vr.is_none()) // Let VR throttle framerate, if available .build().expect("Building Window"); let mut aux_command = window.factory.create_command_buffer(); let mut scene = scenes::world::WorldScene::new(&mut window.device, &mut window.factory, &mut aux_command); let view = view::ViewRoot:: ::create_view(&mut window, &mut vr); 'main: //while let Some(_) = window.next() { loop { scene.update(&mut vr, &mut window.encoder); view.draw(&mut window, &mut vr, &scene).expect("main draw"); // handle window events while let Some(ev) = window.poll_event() { match ev { Input::Button(ButtonArgs { button: Button::Keyboard(Key::Space), .. }) | Input::Button(ButtonArgs { button: Button::Keyboard(Key::Escape), .. }) => break 'main, _ => debug!("\t{:?}", ev) } scene.event(Event::Piston(ev)); } // handle VR events while let Some(ev) = vr.as_mut().and_then(|vr| vr.poll_next_event()) { scene.event(Event::Vr(ev)); } } debug!("shutting down"); }