diff options
| author | hachem <im@hachem.wtf> | 2026-09-21 20:55:02 +0200 |
|---|---|---|
| committer | hachem <im@hachem.wtf> | 2026-09-21 20:55:02 +0200 |
| commit | ec2839ecbfc3f28b3f335489ae7611b60fba82c5 (patch) | |
| tree | 68dae417deac323eb3878a540895f1e2ff1a2807 /src/platform | |
| parent | aa9dcb5bd9210c074c530b4f6f5ffbdd32beb717 (diff) | |
feat: update ui
Diffstat (limited to 'src/platform')
| -rw-r--r-- | src/platform/opengl/shader.cpp | 1 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_common.h | 1 | ||||
| -rw-r--r-- | src/platform/vulkan/vulkan_device.cpp | 23 |
3 files changed, 20 insertions, 5 deletions
diff --git a/src/platform/opengl/shader.cpp b/src/platform/opengl/shader.cpp index 3831177..b815021 100644 --- a/src/platform/opengl/shader.cpp +++ b/src/platform/opengl/shader.cpp @@ -5,6 +5,7 @@ #include <fstream> #include <iostream> +#include <vector> namespace Donut { diff --git a/src/platform/vulkan/vulkan_common.h b/src/platform/vulkan/vulkan_common.h index bc92988..4f93fdc 100644 --- a/src/platform/vulkan/vulkan_common.h +++ b/src/platform/vulkan/vulkan_common.h @@ -318,6 +318,7 @@ namespace Donut::RHI std::vector<VkDescriptorPool> m_frame_pools; VkDescriptorPool m_imgui_pool = VK_NULL_HANDLE; + VkDescriptorPool m_offscreen_pool = VK_NULL_HANDLE; bool m_imgui = false; VkCommandListR m_cmds; diff --git a/src/platform/vulkan/vulkan_device.cpp b/src/platform/vulkan/vulkan_device.cpp index d744883..b4c2630 100644 --- a/src/platform/vulkan/vulkan_device.cpp +++ b/src/platform/vulkan/vulkan_device.cpp @@ -119,7 +119,18 @@ namespace Donut::RHI auto VulkanDevice::run_offscreen(const std::function<void(CommandList&)>& record) -> void { vkDeviceWaitIdle(m_device); - vkResetDescriptorPool(m_device, m_frame_pools[0], 0); + + if (m_offscreen_pool == VK_NULL_HANDLE) + { + VkDescriptorPoolSize sizes[2] = { + { VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, 32 }, + { VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, 32 }, + }; + VkDescriptorPoolCreateInfo dpci{ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO }; + dpci.maxSets = 16; dpci.poolSizeCount = 2; dpci.pPoolSizes = sizes; + vkCreateDescriptorPool(m_device, &dpci, nullptr, &m_offscreen_pool); + } + vkResetDescriptorPool(m_device, m_offscreen_pool, 0); VkCommandBufferAllocateInfo cbai{ VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO }; cbai.commandPool = m_command_pool; cbai.level = VK_COMMAND_BUFFER_LEVEL_PRIMARY; cbai.commandBufferCount = 1; @@ -127,10 +138,11 @@ namespace Donut::RHI VkCommandBufferBeginInfo bi{ VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO }; bi.flags = VK_COMMAND_BUFFER_USAGE_ONE_TIME_SUBMIT_BIT; vkBeginCommandBuffer(cmd, &bi); - m_cmds.m_device = m_device; m_cmds.m_cmd = cmd; - m_cmds.m_swapchain_rp = m_swapchain_rp; m_cmds.m_swapchain_fb = VK_NULL_HANDLE; m_cmds.m_extent = m_extent; - m_cmds.m_frame_pool = m_frame_pools[0]; m_cmds.m_pipe = nullptr; - record(m_cmds); + VkCommandListR ocmds; + ocmds.m_device = m_device; ocmds.m_cmd = cmd; + ocmds.m_swapchain_rp = m_swapchain_rp; ocmds.m_swapchain_fb = VK_NULL_HANDLE; ocmds.m_extent = m_extent; + ocmds.m_frame_pool = m_offscreen_pool; ocmds.m_pipe = nullptr; + record(ocmds); vkEndCommandBuffer(cmd); VkSubmitInfo si{ VK_STRUCTURE_TYPE_SUBMIT_INFO }; si.commandBufferCount = 1; si.pCommandBuffers = &cmd; @@ -262,6 +274,7 @@ namespace Donut::RHI if (m_imgui_pool) vkDestroyDescriptorPool(m_device, m_imgui_pool, nullptr); for (auto p : m_frame_pools) vkDestroyDescriptorPool(m_device, p, nullptr); m_frame_pools.clear(); + if (m_offscreen_pool) { vkDestroyDescriptorPool(m_device, m_offscreen_pool, nullptr); m_offscreen_pool = VK_NULL_HANDLE; } for (auto s : m_render_finished) vkDestroySemaphore(m_device, s, nullptr); for (auto s : m_image_available) vkDestroySemaphore(m_device, s, nullptr); for (auto f : m_in_flight) vkDestroyFence(m_device, f, nullptr); |
