Quake-III-Arena-VS/src/engine/renderer/vk_resource_manager.cpp
2017-04-11 19:24:39 +03:00

97 lines
3.2 KiB
C++

#include "vk_resource_manager.h"
static Resource_Manager resource_manager;
Resource_Manager* get_resource_manager() {
return &resource_manager;
}
void Resource_Manager::initialize(VkDevice device) {
this->device = device;
}
void Resource_Manager::release_resources() {
for (auto semaphore : semaphores) {
vkDestroySemaphore(device, semaphore, nullptr);
}
semaphores.clear();
for (auto descriptor_pool : descriptor_pools) {
vkDestroyDescriptorPool(device, descriptor_pool, nullptr);
}
descriptor_pools.clear();
for (auto buffer : buffers) {
vkDestroyBuffer(device, buffer, nullptr);
}
buffers.clear();
for (auto sampler : samplers) {
vkDestroySampler(device, sampler, nullptr);
}
samplers.clear();
for (auto descriptor_set_layout : descriptor_set_layouts) {
vkDestroyDescriptorSetLayout(device, descriptor_set_layout, nullptr);
}
descriptor_set_layouts.clear();
for (auto pipeline_layout : pipeline_layouts) {
vkDestroyPipelineLayout(device, pipeline_layout, nullptr);
}
pipeline_layouts.clear();
}
VkSemaphore Resource_Manager::create_semaphore() {
VkSemaphoreCreateInfo desc;
desc.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
desc.pNext = nullptr;
desc.flags = 0;
VkSemaphore semaphore;
VkResult result = vkCreateSemaphore(device, &desc, nullptr, &semaphore);
check_vk_result(result, "vkCreateSemaphore");
semaphores.push_back(semaphore);
return semaphore;
}
VkDescriptorPool Resource_Manager::create_descriptor_pool(const VkDescriptorPoolCreateInfo& desc) {
VkDescriptorPool descriptor_pool;
VkResult result = vkCreateDescriptorPool(device, &desc, nullptr, &descriptor_pool);
check_vk_result(result, "vkCreateDescriptorPool");
descriptor_pools.push_back(descriptor_pool);
return descriptor_pool;
}
VkBuffer Resource_Manager::create_buffer(const VkBufferCreateInfo& desc) {
VkBuffer buffer;
VkResult result = vkCreateBuffer(device, &desc, nullptr, &buffer);
check_vk_result(result, "vkCreateBuffer");
buffers.push_back(buffer);
return buffer;
}
VkSampler Resource_Manager::create_sampler(const VkSamplerCreateInfo& desc) {
VkSampler sampler;
VkResult result = vkCreateSampler(device, &desc, nullptr, &sampler);
check_vk_result(result, "vkCreateSampler");
samplers.push_back(sampler);
return sampler;
}
VkDescriptorSetLayout Resource_Manager::create_descriptor_set_layout(const VkDescriptorSetLayoutCreateInfo& desc) {
VkDescriptorSetLayout descriptor_set_layout;
VkResult result = vkCreateDescriptorSetLayout(device, &desc, nullptr, &descriptor_set_layout);
check_vk_result(result, "vkCreateDescriptorSetLayout");
descriptor_set_layouts.push_back(descriptor_set_layout);
return descriptor_set_layout;
}
VkPipelineLayout Resource_Manager::create_pipeline_layout(const VkPipelineLayoutCreateInfo& desc) {
VkPipelineLayout pipeline_layout;
VkResult result = vkCreatePipelineLayout(device, &desc, nullptr, &pipeline_layout);
check_vk_result(result, "vkCreatePipelineLayout");
pipeline_layouts.push_back(pipeline_layout);
return pipeline_layout;
}