Partially fixed Framebuffer issues

* tweaked functions order in draw_triangle_frame()
This commit is contained in:
Steins7 2021-02-03 08:51:52 +01:00
parent 8e0b9b9672
commit a36c332ddd
3 changed files with 44 additions and 13 deletions

View File

@ -90,8 +90,8 @@ pub fn run() -> Result<(), &'static str> {
//running controller //running controller
let mut controller = Controller::new(vec![subengine_pipeline]); let mut controller = Controller::new(vec![subengine_pipeline]);
//loop { loop {
for _i in 0..10 { //for _i in 0..40 {
controller.run(); controller.run();
} }

View File

@ -189,7 +189,11 @@ where
//println!("Frame nb : {}", self.frames.len()); //println!("Frame nb : {}", self.frames.len());
//TODO frames number diminish sometimes at resize... //TODO frames number diminish sometimes at resize...
static mut id: i32 = 0;
let mut frame = self.frames.pop_back().unwrap(); let mut frame = self.frames.pop_back().unwrap();
unsafe {
id = (id+1)%3;
}
trace!("Waiting for Frame..."); trace!("Waiting for Frame...");
unsafe { unsafe {
@ -203,7 +207,16 @@ where
.map_err(|_| "Failed to reset Fence"); //TODO error .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 { let image = unsafe {
match self.surface.acquire_image(core::u64::MAX) { match self.surface.acquire_image(core::u64::MAX) {
Ok((image, suboptimal)) => { Ok((image, suboptimal)) => {
@ -215,12 +228,10 @@ where
}}; }};
trace!("Creating Framebuffer..."); trace!("Creating Framebuffer...");
let framebuffer = unsafe { let mut framebuffer = unsafe {
use gfx_hal::device::Device; use gfx_hal::device::Device;
use std::borrow::Borrow; use std::borrow::Borrow;
//frame.command_buffer.reset(true); //TODO may be needed at some point...
gpu.device() gpu.device()
.create_framebuffer(&self.render_pass, .create_framebuffer(&self.render_pass,
vec![image.borrow()], vec![image.borrow()],
@ -228,6 +239,16 @@ where
.unwrap() //TODO improve that .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); frame.link_swapchain_image(gpu, image, framebuffer);
Ok(frame) Ok(frame)
@ -248,6 +269,7 @@ where
.map_err(|_| "Failed to present into the swapchain")?; .map_err(|_| "Failed to present into the swapchain")?;
}; };
frame.destroy_framebuffer(gpu);
self.frames.push_front(frame); self.frames.push_front(frame);
Ok(()) Ok(())

View File

@ -103,13 +103,14 @@ where
framebuffer: B::Framebuffer) { framebuffer: B::Framebuffer) {
use gfx_hal::device::Device; use gfx_hal::device::Device;
match self.framebuffer.replace(framebuffer) { self.framebuffer = Some(framebuffer);
Some(old_framebuffer) => { //match self.framebuffer.replace(framebuffer) {
trace!("Destroying Framebuffer..."); // Some(old_framebuffer) => {
unsafe { gpu.device().destroy_framebuffer(old_framebuffer) }; // trace!("Destroying Framebuffer...");
}, // unsafe { gpu.device().destroy_framebuffer(old_framebuffer) };
None => (), // },
} // None => (),
//}
self.image_view = Some(image); self.image_view = Some(image);
} }
@ -121,5 +122,13 @@ where
.take() .take()
.ok_or("Can not unlink non-linked Frame !") .ok_or("Can not unlink non-linked Frame !")
} }
pub fn destroy_framebuffer(&mut self, gpu: &Gpu<B>) {
unsafe {
use gfx_hal::device::Device;
gpu.device().destroy_framebuffer(self.framebuffer.take().unwrap());
}
}
} }