Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pub fn do_draw(
- &mut self,
- _window: &winit::window::Window,
- _time_state: &TimeState
- )
- -> Result<(), ash::vk::Result>
- {
- let frame_fence = self.swapchain.in_flight_fences[self.sync_frame_index];
- // Wait if two frame are already in flight
- unsafe {
- self.device.logical_device.wait_for_fences(&[frame_fence], true, std::u64::MAX).unwrap();
- self.device.logical_device.reset_fences(&[frame_fence]).unwrap();
- }
- let (present_index, _is_suboptimal) = unsafe {
- self.swapchain
- .swapchain_loader
- .acquire_next_image(
- self.swapchain.swapchain,
- std::u64::MAX,
- self.swapchain.image_available_semaphores[self.sync_frame_index],
- vk::Fence::null(),
- )?
- };
- let wait_semaphores = [self.swapchain.image_available_semaphores[self.sync_frame_index]];
- let signal_semaphores = [self.swapchain.render_finished_semaphores[self.sync_frame_index]];
- let wait_dst_stage_mask = [vk::PipelineStageFlags::COLOR_ATTACHMENT_OUTPUT];
- let command_buffers = [self.pipeline.command_buffers[present_index as usize]];
- //add fence to queue submit
- let submit_info = [
- vk::SubmitInfo::builder()
- .wait_semaphores(&wait_semaphores)
- .signal_semaphores(&signal_semaphores)
- .wait_dst_stage_mask(&wait_dst_stage_mask)
- .command_buffers(&command_buffers)
- .build()
- ];
- unsafe {
- self.device.logical_device
- .queue_submit(self.device.queues.graphics_queue, &submit_info, frame_fence)
- .expect("queue submit failed.");
- }
- let wait_semaphors = [self.swapchain.render_finished_semaphores[self.sync_frame_index]];
- let swapchains = [self.swapchain.swapchain];
- let image_indices = [present_index];
- let present_info = vk::PresentInfoKHR::builder()
- .wait_semaphores(&wait_semaphors) // &base.rendering_complete_semaphore)
- .swapchains(&swapchains)
- .image_indices(&image_indices);
- unsafe {
- self.swapchain.swapchain_loader
- .queue_present(self.device.queues.present_queue, &present_info)
- .unwrap();
- }
- self.sync_frame_index = (self.sync_frame_index + 1) % MAX_FRAMES_IN_FLIGHT;
- Ok(())
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement