Files
vrtue/src/bin/vrtue.rs

61 lines
1.9 KiB
Rust

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::<gfx_device_gl::Device, view::ColorFormat, view::DepthFormat>
::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");
}