diff options
| author | Jonathan Bradley <jcb@pikum.xyz> | 2025-01-30 16:27:36 -0500 |
|---|---|---|
| committer | Jonathan Bradley <jcb@pikum.xyz> | 2025-01-30 16:27:36 -0500 |
| commit | 61cb835291af07cfc59c123241c3641a2fba185f (patch) | |
| tree | 8f0d9695f13bbe6e1c45757857a44beed9e6fb48 | |
| parent | 6b83da3f955adb9067415f26628fb92046cb676a (diff) | |
pke: render and present 2d buffer
| -rw-r--r-- | src/window.cpp | 55 |
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); |
