Fixed framebuffer error
* tweaked swap_system acquire_frame() function * moved fence waiting in acquire_frame() * cleaned minor details
This commit is contained in:
parent
b8dd1890f7
commit
6aa5e8e3c0
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
|
||||
))
|
||||
})
|
||||
.level(log::LevelFilter::Debug)
|
||||
.level(log::LevelFilter::Trace)
|
||||
.chain(std::io::stdout())
|
||||
.chain(fern::log_file("output.log")?)
|
||||
.apply()?;
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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()],
|
||||
|
||||
@ -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)
|
||||
};
|
||||
@ -90,7 +90,7 @@ where
|
||||
Ok( Frame {
|
||||
wait_semaphores,
|
||||
signal_semaphores,
|
||||
fences,
|
||||
fences,
|
||||
command_buffer: ManuallyDrop::new(command_buffer),
|
||||
image_view: None,
|
||||
framebuffer: None,
|
||||
|
||||
Loading…
Reference in New Issue
Block a user