use ash::vk;
use crate::core::{CommandPool, CommandPoolBuilder, Device, VulkanResult};
pub struct CommandPoolPerFrame {
command_pool: CommandPool,
command_buffers: Vec<Vec<vk::CommandBuffer>>,
}
impl CommandPoolPerFrame {
pub fn destroy(&self, device: &Device) {
self.command_pool.destroy(device);
}
pub fn new(device: &Device) -> VulkanResult<Self> {
let pool = CommandPoolBuilder::reset(device).build()?;
Ok(Self {
command_pool: pool,
command_buffers: vec![],
})
}
pub fn allocate_cmd_buffers(
&mut self,
device: &Device,
image_index: u32,
frame_count: usize,
pass_count: usize,
) -> VulkanResult<&Vec<vk::CommandBuffer>> {
while self.command_buffers.len() < frame_count {
self.command_buffers.push(vec![]);
}
Ok(&self.command_buffers[image_index as usize])
}
}