diff options
Diffstat (limited to 'src/vk/view.cpp')
-rw-r--r-- | src/vk/view.cpp | 60 |
1 files changed, 23 insertions, 37 deletions
diff --git a/src/vk/view.cpp b/src/vk/view.cpp index 16ee60c..b4ef722 100644 --- a/src/vk/view.cpp +++ b/src/vk/view.cpp @@ -76,41 +76,6 @@ unload_2d_uniform_buffer(void *obj) } void -load_descriptor_pool(void *obj) -{ - auto self = static_cast<VK::View*>(obj); - - uint32_t uniform_buffer_count = self->ub_3d.size() + self->ub_2d.size(); - - VkDescriptorPoolSize descriptor_pool_size{}; - descriptor_pool_size.type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER; - descriptor_pool_size.descriptorCount = uniform_buffer_count; - - VkDescriptorPoolCreateInfo pool_info{}; - pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO; - pool_info.pNext = nullptr; - pool_info.flags = 0; - pool_info.maxSets = uniform_buffer_count; - pool_info.poolSizeCount = 1; - pool_info.pPoolSizes = &descriptor_pool_size; - - if(vkCreateDescriptorPool( - cg_core.vk_device_with_swapchain->device, &pool_info, nullptr, - &self->descriptor_pool) != VK_SUCCESS) - throw CommandError{"Failed to create a Vulkan descriptor pool."}; -} - -void -unload_descriptor_pool(void *obj) -{ - auto self = static_cast<VK::View*>(obj); - - vkDestroyDescriptorPool( - cg_core.vk_device_with_swapchain->device, self->descriptor_pool, - nullptr); -} - -void load_descriptor_sets_3d(void *obj) { auto self = static_cast<VK::View*>(obj); @@ -228,9 +193,11 @@ load_resources_to_descriptor_sets_2d(void *obj) const CommandChain loader{ {&load_3d_uniform_buffer, &unload_3d_uniform_buffer}, - {&load_2d_uniform_buffer, &unload_2d_uniform_buffer}, - {&load_descriptor_pool, &unload_descriptor_pool}, + {&load_2d_uniform_buffer, &unload_2d_uniform_buffer} // By destroying the pool the sets are also destroyed. +}; + +const CommandChain descriptor_sets_loader{ {&load_descriptor_sets_3d, nullptr}, {&load_descriptor_sets_2d, nullptr}, {&load_resources_to_descriptor_sets_3d, nullptr}, @@ -244,6 +211,7 @@ namespace VK View::View(glm::vec4 region): region{region}, + descriptor_pool{VK_NULL_HANDLE}, camera_position{std::make_shared<glm::vec3>(0.0f, 0.0f, 0.0f)}, camera_rotation{std::make_shared<glm::vec3>(0.0f, 0.0f, 0.0f)}, sprites_to_draw{cg_core.vk_swapchain->images_count} @@ -256,4 +224,22 @@ View::~View() loader.revert(this); } +void +View::load_descriptor_sets(VkDescriptorPool descriptor_pool) +{ + if(this->descriptor_pool != VK_NULL_HANDLE) return; + + this->descriptor_pool = descriptor_pool; + descriptor_sets_loader.execute(this); +} + +void +View::unload_descriptor_sets() +{ + if(this->descriptor_pool == VK_NULL_HANDLE) return; + + this->descriptor_pool = VK_NULL_HANDLE; + descriptor_sets_loader.revert(this); +} + } |