use super::VkDevice; use ash::vk; use std::sync::Arc; pub struct VkFence { device: Arc, pub(super) handle: vk::Fence, } impl VkFence { pub fn new(device: &Arc) -> anyhow::Result { let fence_info = vk::FenceCreateInfo::default() .flags(vk::FenceCreateFlags::SIGNALED); let fence = unsafe { device.handle.create_fence(&fence_info, None)? }; log::debug!("Fence created ({fence:?})"); Ok(Self { device: device.clone(), handle: fence, }) } } impl Drop for VkFence { fn drop(&mut self) { unsafe { self.device.handle.destroy_fence(self.handle, None) }; log::debug!("Fence destroyed ({:?})", self.handle); } }