1#ifndef VULKAN_RENDERPASS
2#define VULKAN_RENDERPASS
4#include <vulkan/vulkan.h>
33 template<std::same_as<RenderPassOptions::Subpass>... S>
34 RenderPass(
const LogicalDevice& virtualGpu,
const std::vector<RenderPassOptions::AttachmentDescription::BoundAttachmentDescription>& attachments,
const S&... subpasses) : virtualGpu{ virtualGpu } {
36 std::vector<VkAttachmentDescription> attachmentDescriptions;
37 for (
const auto& attachment : attachments) {
38 attachmentDescriptions.push_back(+attachment);
40 attachmentCount = attachmentDescriptions.size();
43 std::vector<VkSubpassDescription> subpassesDescriptions;
45 subpassesDescriptions.push_back(+subpass);
46 this->subpasses.push_back(subpass);
50 VkRenderPassCreateInfo renderPassInfo{};
51 renderPassInfo.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
52 renderPassInfo.attachmentCount = attachmentDescriptions.size();
53 renderPassInfo.pAttachments = attachmentDescriptions.data();
54 renderPassInfo.subpassCount = subpassesDescriptions.size();
55 renderPassInfo.pSubpasses = subpassesDescriptions.data();
57 if (VkResult result = vkCreateRenderPass(+virtualGpu, &renderPassInfo,
nullptr, &renderPass); result != VK_SUCCESS) {
68 vkDestroyRenderPass(+virtualGpu, renderPass,
nullptr);
92 return attachmentCount;
96 VkRenderPass renderPass;
98 std::vector<RenderPassOptions::Subpass> subpasses;
A logical device is an abstraction of the physical GPU which we can mainly use to send commands.
Definition: LogicalDevice.h:15
A RenderPass is the set of attachments, the way they are used, and the rendering work that is perform...
Definition: RenderPass.h:20
RenderPassOptions::Subpass getSubpass(unsigned int i) const
Returns the subpasses of this render pass.
Definition: RenderPass.h:87
RenderPass(const LogicalDevice &virtualGpu, const std::vector< RenderPassOptions::AttachmentDescription::BoundAttachmentDescription > &attachments, const S &... subpasses)
Creates a RenderPass given its Subpass(es) and its BoundAttachmentDescription(s).
Definition: RenderPass.h:34
RenderPass & operator=(RenderPass &&)=delete
RenderPass & operator=(const RenderPass &)=delete
RenderPass(RenderPass &&)=delete
const VkRenderPass & operator+() const
Returns the underlying VkRenderPass object.
Definition: RenderPass.h:77
int getAttachmentCount() const
Definition: RenderPass.h:91
RenderPass(const RenderPass &)=delete
~RenderPass()
Definition: RenderPass.h:67
A Subpass is a step of a RenderPass.
Definition: Subpass.h:28
Generic runtime exception thrown by Vulkan-related functions.
Definition: VulkanException.h:13
Definition: Attachment.h:11