Merge branch '5-framebuffer-destuction-issue' into 'dev'
Resolve "Framebuffer destuction issue" See merge request Steins7/iv!6
This commit is contained in:
commit
8e0b9b9672
File diff suppressed because one or more lines are too long
2
main.rs
2
main.rs
@ -25,7 +25,7 @@ fn setup_logger() -> Result<(), fern::InitError> {
|
|||||||
message
|
message
|
||||||
))
|
))
|
||||||
})
|
})
|
||||||
.level(log::LevelFilter::Debug)
|
.level(log::LevelFilter::Trace)
|
||||||
.chain(std::io::stdout())
|
.chain(std::io::stdout())
|
||||||
.chain(fern::log_file("output.log")?)
|
.chain(fern::log_file("output.log")?)
|
||||||
.apply()?;
|
.apply()?;
|
||||||
|
|||||||
@ -13,7 +13,6 @@ use winit::{
|
|||||||
window::{WindowBuilder, Window},
|
window::{WindowBuilder, Window},
|
||||||
};
|
};
|
||||||
|
|
||||||
//TODO fix that
|
|
||||||
use crate::{
|
use crate::{
|
||||||
io::{Output, Input, Key, Signal, ReadError},
|
io::{Output, Input, Key, Signal, ReadError},
|
||||||
utils::Rect,
|
utils::Rect,
|
||||||
@ -202,8 +201,10 @@ mod tests {
|
|||||||
use std::mem::ManuallyDrop;
|
use std::mem::ManuallyDrop;
|
||||||
|
|
||||||
let _ = setup_logger();
|
let _ = setup_logger();
|
||||||
let mut window1 = ManuallyDrop::new(WinitWindow::new("IV", Rect {w: 1280, h: 720}).unwrap());
|
let mut window1 = ManuallyDrop::new(WinitWindow::new("IV",
|
||||||
let mut window2 = ManuallyDrop::new(WinitWindow::new("IV 2", Rect {w: 1280, h: 720}).unwrap());
|
Rect {w: 1280, h: 720}).unwrap());
|
||||||
|
let mut window2 = ManuallyDrop::new(WinitWindow::new("IV 2",
|
||||||
|
Rect {w: 1280, h: 720}).unwrap());
|
||||||
|
|
||||||
unsafe {
|
unsafe {
|
||||||
ManuallyDrop::drop(&mut window1);
|
ManuallyDrop::drop(&mut window1);
|
||||||
|
|||||||
@ -90,7 +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 {
|
||||||
controller.run();
|
controller.run();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +122,7 @@ pub fn run() -> Result<(), &'static str> {
|
|||||||
// _ => (),
|
// _ => (),
|
||||||
// }}}
|
// }}}
|
||||||
//
|
//
|
||||||
// Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
// let (input_tx, input_rx) = mpsc::channel();
|
// let (input_tx, input_rx) = mpsc::channel();
|
||||||
|
|||||||
@ -193,7 +193,6 @@ where
|
|||||||
{
|
{
|
||||||
use gfx_hal::{
|
use gfx_hal::{
|
||||||
window::AcquireError,
|
window::AcquireError,
|
||||||
device::Device,
|
|
||||||
queue::Submission,
|
queue::Submission,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -213,16 +212,6 @@ where
|
|||||||
_ => Err("Could not acquire Frame from SwapSystem")?,
|
_ => 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...");
|
trace!("Uploading triangle data...");
|
||||||
let points = triangle.points_flat();
|
let points = triangle.points_flat();
|
||||||
self.pipelines[0].write_vertex_buffer(&self.gpu, 0, (&points).to_vec())?; //TODO meh
|
self.pipelines[0].write_vertex_buffer(&self.gpu, 0, (&points).to_vec())?; //TODO meh
|
||||||
|
|||||||
@ -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);
|
let mut frames = VecDeque::with_capacity(frame_nb);
|
||||||
for _ in 0..frame_nb {
|
for _ in 0..frame_nb {
|
||||||
let frame = Frame::new(gpu)
|
let frame = Frame::new(gpu)
|
||||||
@ -187,6 +187,22 @@ where
|
|||||||
|
|
||||||
pub fn acquire_frame(&mut self, gpu: &Gpu<B>) -> Result<Frame<B>, AcquireError> {
|
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...");
|
trace!("Acquiring Frame...");
|
||||||
let image = unsafe {
|
let image = unsafe {
|
||||||
match self.surface.acquire_image(core::u64::MAX) {
|
match self.surface.acquire_image(core::u64::MAX) {
|
||||||
@ -197,15 +213,14 @@ where
|
|||||||
}},
|
}},
|
||||||
Err(err) => return Err(err),
|
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...");
|
trace!("Creating Framebuffer...");
|
||||||
let framebuffer = unsafe {
|
let 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()],
|
||||||
|
|||||||
@ -71,7 +71,7 @@ where
|
|||||||
let fences = vec!(
|
let fences = vec!(
|
||||||
gpu.device()
|
gpu.device()
|
||||||
.create_fence(true)
|
.create_fence(true)
|
||||||
.map_err(|_| "Could not create Semaphore")?);
|
.map_err(|_| "Could not create Fence")?);
|
||||||
|
|
||||||
(wait_semaphores, signal_semaphores, fences)
|
(wait_semaphores, signal_semaphores, fences)
|
||||||
};
|
};
|
||||||
@ -90,7 +90,7 @@ where
|
|||||||
Ok( Frame {
|
Ok( Frame {
|
||||||
wait_semaphores,
|
wait_semaphores,
|
||||||
signal_semaphores,
|
signal_semaphores,
|
||||||
fences,
|
fences,
|
||||||
command_buffer: ManuallyDrop::new(command_buffer),
|
command_buffer: ManuallyDrop::new(command_buffer),
|
||||||
image_view: None,
|
image_view: None,
|
||||||
framebuffer: None,
|
framebuffer: None,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user