crystal-vk 0.1.1

Graphics wrapper for Vulkan
Documentation
use std::{error::Error, sync::Arc};

use ash::vk;

use crate::device::Device;

pub struct Semaphore {
    pub handle: vk::Semaphore,
    device: Arc<Device>,
}

unsafe impl Send for Semaphore {}
unsafe impl Sync for Semaphore {}

impl Drop for Semaphore {
    fn drop(&mut self) {
        unsafe { self.device.handle.destroy_semaphore(self.handle, None) }
    }
}

impl Semaphore {
    pub fn new(device: Arc<Device>) -> Result<Arc<Self>, Box<dyn Error>> {
        let create_info = vk::SemaphoreCreateInfo::default();
        let handle = unsafe { device.handle.create_semaphore(&create_info, None) }?;
        Ok(Arc::new(Self { handle, device }))
    }
}