use super::VkDevice; use ash::prelude::VkResult; use ash::vk; use std::sync::Arc; pub struct VkCommandPool { device: Arc, pub(super) handle: vk::CommandPool, } impl VkCommandPool { pub fn new(device: &Arc) -> VkResult { let command_pool_info = vk::CommandPoolCreateInfo::default() .flags(vk::CommandPoolCreateFlags::RESET_COMMAND_BUFFER) .queue_family_index(device.queue_family_index); let command_pool = unsafe { device .handle .create_command_pool(&command_pool_info, None)? }; log::debug!("Command pool created ({command_pool:?})"); Ok(Self { device: device.clone(), handle: command_pool, }) } } impl Drop for VkCommandPool { fn drop(&mut self) { unsafe { self.device.handle.destroy_command_pool(self.handle, None) }; log::debug!("Command pool destroyed ({:?})", self.handle); } }