Merge branch '5-framebuffer-destuction-issue' into 'dev'

Resolve "Framebuffer destuction issue"

See merge request Steins7/iv!6
This commit is contained in:
Steins7 2021-02-02 11:24:56 +01:00
commit 8e0b9b9672
7 changed files with 30 additions and 24 deletions

File diff suppressed because one or more lines are too long

View File

@ -25,7 +25,7 @@ fn setup_logger() -> Result<(), fern::InitError> {
message
))
})
.level(log::LevelFilter::Debug)
.level(log::LevelFilter::Trace)
.chain(std::io::stdout())
.chain(fern::log_file("output.log")?)
.apply()?;

View File

@ -13,7 +13,6 @@ use winit::{
window::{WindowBuilder, Window},
};
//TODO fix that
use crate::{
io::{Output, Input, Key, Signal, ReadError},
utils::Rect,
@ -202,8 +201,10 @@ mod tests {
use std::mem::ManuallyDrop;
let _ = setup_logger();
let mut window1 = ManuallyDrop::new(WinitWindow::new("IV", Rect {w: 1280, h: 720}).unwrap());
let mut window2 = ManuallyDrop::new(WinitWindow::new("IV 2", Rect {w: 1280, h: 720}).unwrap());
let mut window1 = ManuallyDrop::new(WinitWindow::new("IV",
Rect {w: 1280, h: 720}).unwrap());
let mut window2 = ManuallyDrop::new(WinitWindow::new("IV 2",
Rect {w: 1280, h: 720}).unwrap());
unsafe {
ManuallyDrop::drop(&mut window1);

View File

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

View File

@ -193,7 +193,6 @@ where
{
use gfx_hal::{
window::AcquireError,
device::Device,
queue::Submission,
};
@ -213,16 +212,6 @@ where
_ => Err("Could not acquire Frame from SwapSystem")?,
}};
trace!("Waiting for Frame...");
unsafe {
let _ = self.gpu.device()
.wait_for_fence(&frame.fences[0], !0)
.map_err(|_| "Failed to wait for Fence")?;
let _ = self.gpu.device()
.reset_fence(&frame.fences[0])
.map_err(|_| "Failed to reset fence")?;
}
trace!("Uploading triangle data...");
let points = triangle.points_flat();
self.pipelines[0].write_vertex_buffer(&self.gpu, 0, (&points).to_vec())?; //TODO meh

View File

@ -131,7 +131,7 @@ where
}
};
warn!("Generating hard-coded number of frames !");
warn!("Generating hard-coded number of frames ({}) !", frame_nb);
let mut frames = VecDeque::with_capacity(frame_nb);
for _ in 0..frame_nb {
let frame = Frame::new(gpu)
@ -187,6 +187,22 @@ where
pub fn acquire_frame(&mut self, gpu: &Gpu<B>) -> Result<Frame<B>, AcquireError> {
//println!("Frame nb : {}", self.frames.len());
//TODO frames number diminish sometimes at resize...
let mut frame = self.frames.pop_back().unwrap();
trace!("Waiting for Frame...");
unsafe {
use gfx_hal::device::Device;
let _ = gpu.device()
.wait_for_fence(&frame.fences[0], !0)
.map_err(|_| "Failed to wait for Fence"); //TODO error
let _ = gpu.device()
.reset_fence(&frame.fences[0])
.map_err(|_| "Failed to reset Fence"); //TODO error
}
trace!("Acquiring Frame...");
let image = unsafe {
match self.surface.acquire_image(core::u64::MAX) {
@ -197,15 +213,14 @@ where
}},
Err(err) => return Err(err),
}};
//println!("Frame nb : {}", self.frames.len());
//frames number diminish sometimes at resize...
let mut frame = self.frames.pop_back().unwrap();
trace!("Creating Framebuffer...");
let 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()],

View File

@ -71,7 +71,7 @@ where
let fences = vec!(
gpu.device()
.create_fence(true)
.map_err(|_| "Could not create Semaphore")?);
.map_err(|_| "Could not create Fence")?);
(wait_semaphores, signal_semaphores, fences)
};