rearming works
parent
8fc9fd6c9d
commit
75e6b20c3f
|
@ -33,8 +33,8 @@ pub struct Instance<WT> {
|
||||||
framebuffers: Vec<Arc<dyn vf::FramebufferAbstract + Send + Sync>>,
|
framebuffers: Vec<Arc<dyn vf::FramebufferAbstract + Send + Sync>>,
|
||||||
command_buffers: Vec<Arc<vc::AutoCommandBuffer>>,
|
command_buffers: Vec<Arc<vc::AutoCommandBuffer>>,
|
||||||
|
|
||||||
|
armed: bool,
|
||||||
previous_frame_end: Option<Box<FlipFuture<WT>>>,
|
previous_frame_end: Option<Box<FlipFuture<WT>>>,
|
||||||
recreate_swap_chain: bool,
|
|
||||||
fps_counter: crate::util::counter::Counter,
|
fps_counter: crate::util::counter::Counter,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ impl<WT: 'static + Send + Sync> Instance<WT> {
|
||||||
command_buffers: vec![],
|
command_buffers: vec![],
|
||||||
|
|
||||||
previous_frame_end: None,
|
previous_frame_end: None,
|
||||||
recreate_swap_chain: false,
|
armed: false,
|
||||||
fps_counter: crate::util::counter::Counter::new(time::Duration::from_millis(100)),
|
fps_counter: crate::util::counter::Counter::new(time::Duration::from_millis(100)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,7 @@ impl<WT: 'static + Send + Sync> Instance<WT> {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn arm(&mut self) {
|
fn arm(&mut self) {
|
||||||
self.swapchains = Some(swapchains::Swapchains::new(self.binding.as_ref().unwrap(), None));
|
self.swapchains = Some(swapchains::Swapchains::new(self.binding.as_ref().unwrap(), self.swapchains.as_ref()));
|
||||||
|
|
||||||
let device = self.binding.as_ref().unwrap().device.clone();
|
let device = self.binding.as_ref().unwrap().device.clone();
|
||||||
let chain = self.get_swapchain();
|
let chain = self.get_swapchain();
|
||||||
|
@ -102,7 +102,8 @@ impl<WT: 'static + Send + Sync> Instance<WT> {
|
||||||
let pipeline = shaders::pipeline_triangle(device.clone(), chain.dimensions(), render_pass);
|
let pipeline = shaders::pipeline_triangle(device.clone(), chain.dimensions(), render_pass);
|
||||||
self.create_command_buffers(pipeline);
|
self.create_command_buffers(pipeline);
|
||||||
|
|
||||||
self.previous_frame_end = None
|
self.previous_frame_end = None;
|
||||||
|
self.armed = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -113,8 +114,20 @@ impl<WT: 'static + Send + Sync> Instance<WT> {
|
||||||
Some(future) => future.wait(None).unwrap(),
|
Some(future) => future.wait(None).unwrap(),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if !self.armed {
|
||||||
|
self.arm();
|
||||||
|
}
|
||||||
|
|
||||||
let chain = self.get_swapchain();
|
let chain = self.get_swapchain();
|
||||||
let (image_index, acquire_future) = vs::acquire_next_image(chain.clone(), None).unwrap();
|
let (image_index, acquire_future) = match vs::acquire_next_image(chain.clone(), None) {
|
||||||
|
Ok(r) => r,
|
||||||
|
Err(vs::AcquireError::OutOfDate) => {
|
||||||
|
self.armed = false;
|
||||||
|
self.previous_frame_end = None;
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
Err(err) => panic!("{:?}", err),
|
||||||
|
};
|
||||||
let command_buffer = self.command_buffers[image_index].clone();
|
let command_buffer = self.command_buffers[image_index].clone();
|
||||||
|
|
||||||
let gq = self.binding.as_ref().unwrap().graphics_queue.clone();
|
let gq = self.binding.as_ref().unwrap().graphics_queue.clone();
|
||||||
|
@ -124,11 +137,19 @@ impl<WT: 'static + Send + Sync> Instance<WT> {
|
||||||
.then_execute(gq, command_buffer)
|
.then_execute(gq, command_buffer)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.then_swapchain_present(pq, chain, image_index)
|
.then_swapchain_present(pq, chain, image_index)
|
||||||
.then_signal_fence_and_flush()
|
.then_signal_fence_and_flush();
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
self.previous_frame_end = Some(Box::new(future));
|
match future {
|
||||||
|
Ok(_) => (),
|
||||||
|
Err(vulkano::sync::FlushError::OutOfDate) => {
|
||||||
|
self.armed = false;
|
||||||
|
self.previous_frame_end = None;
|
||||||
|
return;
|
||||||
|
},
|
||||||
|
Err(err) => panic!("{:?}", err),
|
||||||
|
};
|
||||||
|
|
||||||
|
self.previous_frame_end = Some(Box::new(future.unwrap()));
|
||||||
match self.fps_counter.tick() {
|
match self.fps_counter.tick() {
|
||||||
Some(rate) => log::info!("FPS: {}", rate),
|
Some(rate) => log::info!("FPS: {}", rate),
|
||||||
None => ()
|
None => ()
|
||||||
|
|
Loading…
Reference in New Issue