diff options
Diffstat (limited to 'src/main.rs')
| -rw-r--r-- | src/main.rs | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/main.rs b/src/main.rs index 9fb89bc..6601982 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,6 +1,7 @@ #![deny(unsafe_code)] use crate::error::*; use crate::graphics::model::Model; +use crate::graphics::texture::Texture; use crate::graphics::permanent::{ PermanentGraphicsState, GraphicsStateForReinit }; @@ -37,6 +38,7 @@ struct Surreality { for_reinit: RefCell<Option<GraphicsStateForReinit>>, window_dressing: RefCell<Option<WindowDressing>>, render_state: RefCell<Option<RenderState>>, + texture: RefCell<Option<Texture>>, is_minimized: bool, is_reinit_queued: bool, frame_index: usize, @@ -54,6 +56,7 @@ impl Surreality { for_reinit: RefCell::new(None), window_dressing: RefCell::new(None), render_state: RefCell::new(None), + texture: RefCell::new(None), is_minimized: false, is_reinit_queued: false, frame_index: 0, @@ -69,19 +72,21 @@ impl Surreality { let (permanent, for_reinit, enable_anisotropy, enable_swapchain) = PermanentGraphicsState::new(event_loop)?; + let (texture, mip_count) = Texture::new(&permanent)?; + if enable_swapchain.0 { let window_dressing = WindowDressing::new(&permanent, &for_reinit, - enable_anisotropy)?; + enable_anisotropy, mip_count)?; let mut render_state = RenderState::new(&permanent, &for_reinit, - &window_dressing)?; + &window_dressing, &texture)?; let (vertices, indices) = load_obj()?; - render_state.set_model(Model::new(vertices, indices, - &permanent, &window_dressing)?); + render_state.set_model(Model::new(vertices, indices, &permanent)?); *self.window_dressing.get_mut() = Some(window_dressing); *self.render_state.get_mut() = Some(render_state); } + *self.texture.get_mut() = Some(texture); *self.permanent.get_mut() = Some(permanent); *self.for_reinit.get_mut() = Some(for_reinit); @@ -94,9 +99,10 @@ impl Surreality { && let Some(window_dressing) = self.window_dressing.borrow_mut().as_mut() && let Some(render_state) = self.render_state.borrow_mut().as_mut() + && let Some(texture) = self.texture.borrow_mut().as_mut() { window_dressing.reinit(permanent, for_reinit)?; - render_state.reinit(permanent, for_reinit, &window_dressing)?; + render_state.reinit(permanent, for_reinit, &window_dressing, &texture)?; } Ok(()) @@ -221,12 +227,16 @@ impl Drop for Surreality { if let Some(window_dressing) = self.window_dressing.replace(None) { if let Some(render_state) = self.render_state.replace(None) { - render_state.destroy(&permanent.device, &window_dressing); + render_state.destroy(&permanent); } window_dressing.destroy(&permanent.device); } + if let Some(texture) = self.texture.replace(None) { + texture.destroy(&permanent.device); + } + if let Some(for_reinit) = self.for_reinit.replace(None) { for_reinit.destroy(&permanent.device); } |