Files
QuaternionEngine/src/core/frame/resources.cpp

54 lines
2.1 KiB
C++

#include "resources.h"
#include <span>
#include "core/descriptor/descriptors.h"
#include "core/device/device.h"
#include "core/util/initializers.h"
#include "core/types.h"
void FrameResources::init(DeviceManager *deviceManager,
std::span<DescriptorAllocatorGrowable::PoolSizeRatio> framePoolSizes)
{
VkCommandPoolCreateInfo commandPoolInfo = vkinit::command_pool_create_info(
deviceManager->graphicsQueueFamily(), VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT);
VK_CHECK(vkCreateCommandPool(deviceManager->device(), &commandPoolInfo, nullptr, &_commandPool));
VkCommandBufferAllocateInfo cmdAllocInfo = vkinit::command_buffer_allocate_info(_commandPool, 1);
VK_CHECK(vkAllocateCommandBuffers(deviceManager->device(), &cmdAllocInfo, &_mainCommandBuffer));
VkFenceCreateInfo fenceCreateInfo = vkinit::fence_create_info(VK_FENCE_CREATE_SIGNALED_BIT);
VkSemaphoreCreateInfo semaphoreCreateInfo = vkinit::semaphore_create_info();
VK_CHECK(vkCreateFence(deviceManager->device(), &fenceCreateInfo, nullptr, &_renderFence));
VK_CHECK(vkCreateSemaphore(deviceManager->device(), &semaphoreCreateInfo, nullptr, &_swapchainSemaphore));
VK_CHECK(vkCreateSemaphore(deviceManager->device(), &semaphoreCreateInfo, nullptr, &_renderSemaphore));
_frameDescriptors.init(deviceManager->device(), 1000, framePoolSizes);
}
void FrameResources::cleanup(DeviceManager *deviceManager)
{
_frameDescriptors.destroy_pools(deviceManager->device());
if (_commandPool)
{
vkDestroyCommandPool(deviceManager->device(), _commandPool, nullptr);
_commandPool = VK_NULL_HANDLE;
}
if (_renderFence)
{
vkDestroyFence(deviceManager->device(), _renderFence, nullptr);
_renderFence = VK_NULL_HANDLE;
}
if (_renderSemaphore)
{
vkDestroySemaphore(deviceManager->device(), _renderSemaphore, nullptr);
_renderSemaphore = VK_NULL_HANDLE;
}
if (_swapchainSemaphore)
{
vkDestroySemaphore(deviceManager->device(), _swapchainSemaphore, nullptr);
_swapchainSemaphore = VK_NULL_HANDLE;
}
}