use crate::prelude::*; use anyhow::Result; use std::sync::Arc; #[derive(Debug)] pub struct RenderPass { device: Arc, render_pass: VkRenderPass, } impl RenderPass { pub fn new( device: Arc, sub_passes: &[VkSubpassDescription], attachments: &[VkAttachmentDescription], dependencies: &[VkSubpassDependency], ) -> Result> { let render_pass_ci = VkRenderPassCreateInfo::new( VK_RENDERPASS_CREATE_NULL_BIT, attachments, sub_passes, dependencies, ); let render_pass = device.create_render_pass(&render_pass_ci)?; Ok(Arc::new(RenderPass { device, render_pass, })) } } impl VulkanDevice for RenderPass { fn device(&self) -> &Arc { &self.device } } impl_vk_handle!(RenderPass, VkRenderPass, render_pass); impl Drop for RenderPass { fn drop(&mut self) { self.device.destroy_render_pass(self.render_pass); } }