summaryrefslogtreecommitdiff
path: root/src/window.cpp
diff options
context:
space:
mode:
authorJonathan Bradley <jcb@pikum.xyz>2025-01-30 16:27:36 -0500
committerJonathan Bradley <jcb@pikum.xyz>2025-01-30 16:27:36 -0500
commit61cb835291af07cfc59c123241c3641a2fba185f (patch)
tree8f0d9695f13bbe6e1c45757857a44beed9e6fb48 /src/window.cpp
parent6b83da3f955adb9067415f26628fb92046cb676a (diff)
pke: render and present 2d buffer
Diffstat (limited to 'src/window.cpp')
-rw-r--r--src/window.cpp55
1 files changed, 31 insertions, 24 deletions
diff --git a/src/window.cpp b/src/window.cpp
index c825c99..0cefba9 100644
--- a/src/window.cpp
+++ b/src/window.cpp
@@ -9,6 +9,7 @@
#include "asset-manager.hpp"
#include "camera.hpp"
#include "ecs.hpp"
+#include "font.hpp"
#include "game-settings.hpp"
#include "math-helpers.hpp"
#include "plugins.hpp"
@@ -979,9 +980,9 @@ void CreateSwapchain() {
}
void UpdatePresentDescriptorSets() {
- VkWriteDescriptorSet *writeDescriptorSets = pk_new<VkWriteDescriptorSet>(swapchainLength);
- VkDescriptorImageInfo *descriptorImageInfo = pk_new<VkDescriptorImageInfo>(swapchainLength);
- for (long i = 0; i < swapchainLength; ++i) {
+ VkWriteDescriptorSet *writeDescriptorSets = pk_new<VkWriteDescriptorSet>(swapchainLength * 2);
+ VkDescriptorImageInfo *descriptorImageInfo = pk_new<VkDescriptorImageInfo>(swapchainLength * 2);
+ for (long i = 0; i < swapchainLength * 2; ++i) {
writeDescriptorSets[i].sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
writeDescriptorSets[i].pNext = nullptr;
writeDescriptorSets[i].dstBinding = 0U;
@@ -992,15 +993,17 @@ void UpdatePresentDescriptorSets() {
writeDescriptorSets[i].pTexelBufferView = nullptr;
descriptorImageInfo[i].imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;
descriptorImageInfo[i].sampler = global_sampler;
-
- descriptorImageInfo[i].imageView = pkvk_3d.image_views_color_resolve[i];
- writeDescriptorSets[i].pImageInfo = &descriptorImageInfo[i];
writeDescriptorSets[i].dstSet = pkvk_present.descriptor_sets[i];
+ writeDescriptorSets[i].pImageInfo = &descriptorImageInfo[i];
+ }
+ for (long i = 0; i < swapchainLength; ++i) {
+ descriptorImageInfo[(i * 2)].imageView = pkvk_3d.image_views_color_resolve[i];
+ descriptorImageInfo[(i * 2) + 1].imageView = pkvk_2d.image_views_color_resolve[i];
}
- vkUpdateDescriptorSets(vkDevice, swapchainLength, writeDescriptorSets, 0, nullptr);
- pk_delete<VkWriteDescriptorSet>(writeDescriptorSets, swapchainLength);
- pk_delete<VkDescriptorImageInfo>(descriptorImageInfo, swapchainLength);
+ vkUpdateDescriptorSets(vkDevice, swapchainLength * 2, writeDescriptorSets, 0, nullptr);
+ pk_delete<VkWriteDescriptorSet>(writeDescriptorSets, swapchainLength * 2);
+ pk_delete<VkDescriptorImageInfo>(descriptorImageInfo, swapchainLength * 2);
}
void UpdateCamera() {
@@ -1348,33 +1351,33 @@ void CreatePresentPipeline() {
VkDescriptorPoolSize vkDescriptorPoolSize;
vkDescriptorPoolSize.type = VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER;
- vkDescriptorPoolSize.descriptorCount = swapchainLength;
+ vkDescriptorPoolSize.descriptorCount = swapchainLength * 2;
VkDescriptorPoolCreateInfo descriptorPoolCreateInfo;
descriptorPoolCreateInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
descriptorPoolCreateInfo.pNext = nullptr;
descriptorPoolCreateInfo.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT;
- descriptorPoolCreateInfo.maxSets = swapchainLength;
+ descriptorPoolCreateInfo.maxSets = swapchainLength * 2;
descriptorPoolCreateInfo.poolSizeCount = 1;
descriptorPoolCreateInfo.pPoolSizes = &vkDescriptorPoolSize;
vkResult = vkCreateDescriptorPool(vkDevice, &descriptorPoolCreateInfo, vkAllocator, &pkvk_present.descriptor_pool);
assert(vkResult == VK_SUCCESS);
- VkDescriptorSetLayout *setLayouts = pk_new<VkDescriptorSetLayout>(swapchainLength);
- for (long i = 0; i < swapchainLength; ++i) {
+ VkDescriptorSetLayout *setLayouts = pk_new<VkDescriptorSetLayout>(swapchainLength * 2);
+ for (long i = 0; i < swapchainLength * 2; ++i) {
setLayouts[i] = pkvk_present.descriptor_set_layout;
}
VkDescriptorSetAllocateInfo allocInfo;
allocInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
allocInfo.pNext = nullptr;
allocInfo.descriptorPool = pkvk_present.descriptor_pool;
- allocInfo.descriptorSetCount = swapchainLength;
+ allocInfo.descriptorSetCount = swapchainLength * 2;
allocInfo.pSetLayouts = setLayouts;
- pkvk_present.descriptor_sets = pk_new<VkDescriptorSet>(swapchainLength, MemBkt_Vulkan);
+ pkvk_present.descriptor_sets = pk_new<VkDescriptorSet>(swapchainLength * 2, MemBkt_Vulkan);
vkResult = vkAllocateDescriptorSets(vkDevice, &allocInfo, pkvk_present.descriptor_sets);
- pk_delete<VkDescriptorSetLayout>(setLayouts, swapchainLength);
+ pk_delete<VkDescriptorSetLayout>(setLayouts, swapchainLength * 2);
// setLayouts = CAFE_BABE(VkDescriptorSetLayout);
if (vkResult != VK_SUCCESS) {
throw "failed to allocate present descriptor sets";
@@ -2469,7 +2472,7 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) {
throw "failed to begin recording command buffer";
}
- // VkClearColorValue clearColorTransparent = {{0.0f, 0.0f, 0.0f, 0.0f}};
+ VkClearColorValue clearColorTransparent = {{0.0f, 0.0f, 0.0f, 0.0f}};
VkClearColorValue clearColorBlack = {{0.0f, 0.0f, 0.0f, 1.0f}};
VkClearValue clearValues[3];
clearValues[0].color = clearColorBlack;
@@ -2563,7 +2566,6 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) {
vkCmdEndRenderPass(commandBuffer);
// 2d overlay pass
- /*
renderPassInfo.renderPass = pkvk_2d.render_pass;
renderPassInfo.framebuffer = pkvk_2d.framebuffers[imageIndex];
renderPassInfo.clearValueCount = 1;
@@ -2592,7 +2594,6 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) {
vkCmdDrawIndexed(commandBuffer, ft->bindings.indexCount, ft->bindings.instanceCounter, 0, 0, 0);
}
vkCmdEndRenderPass(commandBuffer);
- */
// present pass
renderPassInfo.renderPass = pkvk_present.render_pass;
@@ -2601,12 +2602,18 @@ void RecordCommandBuffer(VkCommandBuffer commandBuffer, uint32_t imageIndex) {
clearValues[0].color = clearColorBlack;
vkCmdBeginRenderPass(commandBuffer, &renderPassInfo, VK_SUBPASS_CONTENTS_INLINE);
- vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pkvk_present.pipeline_layout, 0, 1, &pkvk_present.descriptor_sets[imageIndex], 0, nullptr);
- vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pkvk_present.pipeline);
-
vkCmdSetViewport(commandBuffer, 0, 1, &viewport);
vkCmdSetScissor(commandBuffer, 0, 1, &scissor);
+ vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pkvk_present.pipeline);
+
// reminder that present.vert is a triangle
+
+ // 3d
+ vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pkvk_present.pipeline_layout, 0, 1, &pkvk_present.descriptor_sets[(imageIndex * 2)], 0, nullptr);
+ vkCmdDraw(commandBuffer, 3, 1, 0, 0);
+
+ // 2d
+ vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pkvk_present.pipeline_layout, 0, 1, &pkvk_present.descriptor_sets[(imageIndex * 2) + 1], 0, nullptr);
vkCmdDraw(commandBuffer, 3, 1, 0, 0);
// ImGui
@@ -2862,8 +2869,8 @@ void DestroyWindow() {
vkDestroyCommandPool(vkDevice, pkvk_shared.command_pool.transfer, vkAllocator);
vkDestroyPipeline(vkDevice, pkvk_present.pipeline, vkAllocator);
vkDestroyPipelineLayout(vkDevice, pkvk_present.pipeline_layout, vkAllocator);
- vkFreeDescriptorSets(vkDevice, pkvk_present.descriptor_pool, swapchainLength, pkvk_present.descriptor_sets);
- pk_delete<VkDescriptorSet>(pkvk_present.descriptor_sets, swapchainLength, MemBkt_Vulkan);
+ vkFreeDescriptorSets(vkDevice, pkvk_present.descriptor_pool, swapchainLength * 2, pkvk_present.descriptor_sets);
+ pk_delete<VkDescriptorSet>(pkvk_present.descriptor_sets, swapchainLength * 2, MemBkt_Vulkan);
pkvk_present.descriptor_sets = CAFE_BABE(VkDescriptorSet);
vkDestroyDescriptorPool(vkDevice, pkvk_present.descriptor_pool, vkAllocator);
vkDestroyDescriptorPool(vkDevice, imGuiDescriptorPool, vkAllocator);