Partially fixed Framebuffer issues
* tweaked functions order in draw_triangle_frame()
This commit is contained in:
parent
8e0b9b9672
commit
a36c332ddd
@ -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();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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(())
|
||||||
|
|||||||
@ -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());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user