diff --git a/src/lib.rs b/src/lib.rs index 7930672..33b0421 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -90,8 +90,8 @@ pub fn run() -> Result<(), &'static str> { //running controller let mut controller = Controller::new(vec![subengine_pipeline]); - //loop { - for _i in 0..10 { + loop { + //for _i in 0..40 { controller.run(); } diff --git a/src/renderer/swap_system.rs b/src/renderer/swap_system.rs index 483c4c4..cffe1a0 100644 --- a/src/renderer/swap_system.rs +++ b/src/renderer/swap_system.rs @@ -189,7 +189,11 @@ where //println!("Frame nb : {}", self.frames.len()); //TODO frames number diminish sometimes at resize... + static mut id: i32 = 0; let mut frame = self.frames.pop_back().unwrap(); + unsafe { + id = (id+1)%3; + } trace!("Waiting for Frame..."); unsafe { @@ -203,7 +207,16 @@ where .map_err(|_| "Failed to reset Fence"); //TODO error } - trace!("Acquiring Frame..."); + trace!("Reseting CommandBuffer..."); + unsafe { + use gfx_hal::command::CommandBuffer; + + frame.command_buffer.reset(false); //TODO may be needed at some point... + }; + + unsafe { + trace!("Acquiring Frame {}...", id); + } let image = unsafe { match self.surface.acquire_image(core::u64::MAX) { Ok((image, suboptimal)) => { @@ -215,12 +228,10 @@ where }}; trace!("Creating Framebuffer..."); - let framebuffer = unsafe { + let mut framebuffer = unsafe { use gfx_hal::device::Device; use std::borrow::Borrow; - //frame.command_buffer.reset(true); //TODO may be needed at some point... - gpu.device() .create_framebuffer(&self.render_pass, vec![image.borrow()], @@ -228,6 +239,16 @@ where .unwrap() //TODO improve that }; + unsafe { + use gfx_hal::{ + device::Device, + command::CommandBuffer, + }; + + gpu.device() + .set_framebuffer_name(&mut framebuffer, format!("frambuffer {}", id).as_str()); + } + frame.link_swapchain_image(gpu, image, framebuffer); Ok(frame) @@ -248,6 +269,7 @@ where .map_err(|_| "Failed to present into the swapchain")?; }; + frame.destroy_framebuffer(gpu); self.frames.push_front(frame); Ok(()) diff --git a/src/renderer/swap_system/frame.rs b/src/renderer/swap_system/frame.rs index 4fdbbd7..1d0b2af 100644 --- a/src/renderer/swap_system/frame.rs +++ b/src/renderer/swap_system/frame.rs @@ -103,13 +103,14 @@ where framebuffer: B::Framebuffer) { use gfx_hal::device::Device; - match self.framebuffer.replace(framebuffer) { - Some(old_framebuffer) => { - trace!("Destroying Framebuffer..."); - unsafe { gpu.device().destroy_framebuffer(old_framebuffer) }; - }, - None => (), - } + self.framebuffer = Some(framebuffer); + //match self.framebuffer.replace(framebuffer) { + // Some(old_framebuffer) => { + // trace!("Destroying Framebuffer..."); + // unsafe { gpu.device().destroy_framebuffer(old_framebuffer) }; + // }, + // None => (), + //} self.image_view = Some(image); } @@ -121,5 +122,13 @@ where .take() .ok_or("Can not unlink non-linked Frame !") } + + pub fn destroy_framebuffer(&mut self, gpu: &Gpu) { + unsafe { + use gfx_hal::device::Device; + + gpu.device().destroy_framebuffer(self.framebuffer.take().unwrap()); + } + } }