From 235b5d58bd5b2b63ac889fb848aa13c0ce0894a7 Mon Sep 17 00:00:00 2001 From: Jared Roberts Date: Fri, 30 Sep 2016 13:37:44 -0700 Subject: [PATCH] view doesn't own scene --- src/bin/vrtue.rs | 12 +++++++----- src/scene.rs | 1 + src/scenes/world.rs | 7 +++---- src/view.rs | 21 ++++++++++++--------- 4 files changed, 23 insertions(+), 18 deletions(-) diff --git a/src/bin/vrtue.rs b/src/bin/vrtue.rs index 55bb364..8657b7f 100644 --- a/src/bin/vrtue.rs +++ b/src/bin/vrtue.rs @@ -1,5 +1,6 @@ extern crate vrtue; -use vrtue::{view, vr}; +use vrtue::{scenes, view, vr}; +use vrtue::scene::Scene; extern crate env_logger; extern crate gfx_device_gl; @@ -18,14 +19,15 @@ pub fn main() { .vsync(false) .build().expect("Building Window"); - let view = view::ViewRoot::::create_view(&mut window, &mut vr); + let mut scene = scenes::world::WorldScene::new(&mut window.factory); + let view = view::ViewRoot:: + ::create_view(&mut window, &mut vr); 'main: //while let Some(_) = window.next() { loop { - view.draw(&mut window, &mut vr); + scene.update(); + view.draw(&mut window, &mut vr, &scene); // handle window events while let Some(ev) = window.poll_event() { diff --git a/src/scene.rs b/src/scene.rs index 07acc8a..0f09ec1 100644 --- a/src/scene.rs +++ b/src/scene.rs @@ -10,6 +10,7 @@ pub trait Scene, + trans: &gfx::handle::Buffer, target: &gfx::handle::RenderTargetView, depth: &gfx::handle::DepthStencilView); } diff --git a/src/scenes/world.rs b/src/scenes/world.rs index 77bbbc5..abdf614 100644 --- a/src/scenes/world.rs +++ b/src/scenes/world.rs @@ -40,7 +40,6 @@ fn get_model(/*x: u16, y: u16,*/ tile: &tile::Tile) -> ([Vertex; 4], [u16; 6]) { pub struct WorldScene> { pso: gfx::PipelineState, - trans: gfx::handle::Buffer, atlas: gfx::handle::ShaderResourceView::View>, sampler: gfx::handle::Sampler, @@ -48,13 +47,12 @@ pub struct WorldScene> WorldScene { - pub fn new(factory: &mut F, trans: &gfx::handle::Buffer) -> WorldScene { + pub fn new(factory: &mut F) -> WorldScene { WorldScene { pso: factory.create_pipeline_simple(VERTEX_SHADER_SRC, FRAGMENT_SHADER_SRC, pipe::new()) .expect("create pipeline"), - trans: trans.clone(), atlas: tile::get_tiles::<_, _, view::ColorFormat>(factory), sampler: factory.create_sampler(tex::SamplerInfo::new(tex::FilterMethod::Scale, tex::WrapMode::Clamp)), @@ -72,6 +70,7 @@ impl, + trans: &gfx::handle::Buffer, target: &gfx::handle::RenderTargetView, depth: &gfx::handle::DepthStencilView) { let (model, model_idx) = get_model(&tile::Tile { val: 31 }); @@ -80,7 +79,7 @@ impl left: vr::EyeBuffer, right: vr::EyeBuffer, trans: gfx::handle::Buffer, - scene: Box<::scene::Scene>, } impl ViewRoot { @@ -54,13 +52,13 @@ impl ViewRoot { left: left, right: right, trans: trans.clone(), - scene: Box::new(scenes::world::WorldScene::new(&mut window.factory, &trans)), } } pub fn draw(&self, window: &mut PistonWindow, - vr: &mut vr::VR) { + vr: &mut vr::VR, + scene: &::scene::Scene) { // Get the current sensor state let poses = vr.poses(); @@ -85,10 +83,11 @@ impl ViewRoot { let trans = Trans { matrix: *(proj_mat * eye_mat * hmd_mat * model_mat).as_ref() }; window.encoder.update_constant_buffer(&self.trans, &trans); - self.scene.render(&mut window.factory, - &mut window.encoder, - &buffers.target, - &buffers.depth); + scene.render(&mut window.factory, + &mut window.encoder, + &self.trans, + &buffers.target, + &buffers.depth); }, _ => () } @@ -100,7 +99,11 @@ impl ViewRoot { &Trans { matrix: *na::Matrix4::one().as_ref() }); window.encoder.clear(&window.output_color, [0.1, 0.2, 0.3, 1.0]); window.encoder.clear_depth(&window.output_stencil, 1.0); - self.scene.render(&mut window.factory, &mut window.encoder, &window.output_color, &window.output_stencil); + scene.render(&mut window.factory, + &mut window.encoder, + &self.trans, + &window.output_color, + &window.output_stencil); window.encoder.flush(&mut window.device); vr.submit(vr::Eye::Left, &self.left.tex);