summaryrefslogtreecommitdiff
path: root/render/vulkan/framebuffer.c
diff options
context:
space:
mode:
authorDanny Holman <dholman@gymli.org>2024-10-25 22:57:43 -0500
committerDanny Holman <dholman@gymli.org>2024-10-25 22:57:43 -0500
commit71befd8eaf7244badb0188b751066afacb8d8ee3 (patch)
treeca1c6bac49f68083556cb1492136078aff8a35b1 /render/vulkan/framebuffer.c
parentc20adaa0c494edf1a04d88b925ca887f42e71bf1 (diff)
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 <dholman@gymli.org>
Diffstat (limited to 'render/vulkan/framebuffer.c')
-rw-r--r--render/vulkan/framebuffer.c34
1 files changed, 34 insertions, 0 deletions
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 <rune/core/alloc.h>
+#include <rune/core/logging.h>
+
+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);
+}