summaryrefslogtreecommitdiff
path: root/src/vk/view.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/vk/view.cpp')
-rw-r--r--src/vk/view.cpp60
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);
+}
+
}