use crate::vulkan::VkDevice; use ash::vk; use std::sync::Arc; pub struct VkSemaphore { device: Arc, pub(super) handle: vk::Semaphore, } impl VkSemaphore { pub fn new(device: &Arc) -> anyhow::Result { let semaphore_info = vk::SemaphoreCreateInfo::default(); let semaphore = unsafe { device.handle.create_semaphore(&semaphore_info, None)? }; log::debug!("Semaphore created ({semaphore:?})"); Ok(Self { device: device.clone(), handle: semaphore, }) } } impl Drop for VkSemaphore { fn drop(&mut self) { unsafe { self.device.handle.destroy_semaphore(self.handle, None) }; log::debug!("Semaphore destroyed ({:?})", self.handle); } }