Merge branch '5-framebuffer-destuction-issue' into 'dev'
Resolve "Framebuffer destuction issue" See merge request Steins7/iv!8
This commit is contained in:
commit
84f606ae16
@ -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();
|
||||
}
|
||||
|
||||
|
||||
@ -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(())
|
||||
|
||||
@ -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<B>) {
|
||||
unsafe {
|
||||
use gfx_hal::device::Device;
|
||||
|
||||
gpu.device().destroy_framebuffer(self.framebuffer.take().unwrap());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user