From 71befd8eaf7244badb0188b751066afacb8d8ee3 Mon Sep 17 00:00:00 2001 From: Danny Holman Date: Fri, 25 Oct 2024 22:57:43 -0500 Subject: render: create the rendering subsystem Create the rendering subsystem and populate it with a basic Vulkan renderer. This renderer is not yet functional and should not be used yet. Signed-off-by: Danny Holman --- render/vulkan/framebuffer.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 render/vulkan/framebuffer.c (limited to 'render/vulkan/framebuffer.c') diff --git a/render/vulkan/framebuffer.c b/render/vulkan/framebuffer.c new file mode 100644 index 0000000..36d90c0 --- /dev/null +++ b/render/vulkan/framebuffer.c @@ -0,0 +1,34 @@ +#include "framebuffer.h" +#include "vkassert.h" +#include +#include + +struct vkframebuffer* create_vkframebuffer(struct vkdev *dev, struct vkrendpass *rendpass, uint32_t width, uint32_t height, uint32_t at_count, VkImageView *at) { + struct vkframebuffer *ret = rune_alloc(sizeof(struct vkframebuffer)); + ret->at_count = at_count; + ret->attachments = rune_alloc(sizeof(VkImageView) * at_count); + for (uint32_t i = 0; i < at_count; i++) + ret->attachments[i] = at[i]; + ret->rendpass = rendpass; + + VkFramebufferCreateInfo fbinfo; + fbinfo.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO; + fbinfo.pNext = NULL; + fbinfo.flags = 0; + fbinfo.renderPass = rendpass->handle; + fbinfo.attachmentCount = ret->at_count; + fbinfo.pAttachments = ret->attachments; + fbinfo.width = width; + fbinfo.height = height; + fbinfo.layers = 1; + vkassert(vkCreateFramebuffer(dev->ldev, &fbinfo, NULL, &ret->handle), "Failed to create Vulkan framebuffer"); + + return ret; +} + +void destroy_vkframebuffer(struct vkframebuffer *framebuffer, struct vkdev *dev) { + vkDestroyFramebuffer(dev->ldev, framebuffer->handle, NULL); + if (framebuffer->attachments) + rune_free(framebuffer->attachments); + rune_free(framebuffer); +} -- cgit v1.2.3