61 lines
1.9 KiB
Rust
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");
|
|
}
|