Archived
1
Fork 0

Properly clean up presentation resources

This commit is contained in:
Joshua Goins 2018-10-01 20:20:16 -04:00
parent 3b982362e4
commit 457a32bc06
2 changed files with 32 additions and 0 deletions

View file

@ -7,6 +7,7 @@ struct RenderTarget {
VkSwapchainKHR swapchain = nullptr;
VkExtent2D extent = {};
uint32_t numImages = 0;
VkImage* images = nullptr;
VkImageView* imageViews = nullptr;

View file

@ -20,6 +20,12 @@ Renderer::Renderer() {
}
Renderer::~Renderer() {
vkDeviceWaitIdle(device_);
vkDestroyRenderPass(device_, presentationRenderPass_, nullptr);
vkDestroyCommandPool(device_, commandPool_, nullptr);
#ifdef DEBUG
destroyMessenger_(instance_, messenger_, nullptr);
#endif
@ -134,6 +140,8 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface) {
uint32_t swapchainImageCount = 0;
vkGetSwapchainImagesKHR(device_, target->swapchain, &swapchainImageCount, nullptr);
target->numImages = swapchainImageCount;
target->images = new VkImage[swapchainImageCount];
vkGetSwapchainImagesKHR(device_, target->swapchain, &swapchainImageCount, target->images);
@ -194,6 +202,29 @@ RenderTarget* Renderer::createSurfaceRenderTarget(VkSurfaceKHR surface) {
}
void Renderer::destroyRenderTarget(RenderTarget* target) {
vkDeviceWaitIdle(device_);
for(uint32_t i = 0; i < target->numImages; i++)
vkDestroyFence(device_, target->fences[i], nullptr);
delete[] target->fences;
vkDestroySemaphore(device_, target->renderFinishedSemaphore, nullptr);
vkDestroySemaphore(device_, target->imageAvailableSemaphore, nullptr);
vkFreeCommandBuffers(device_, commandPool_, target->numImages, target->commandBuffers);
delete[] target->commandBuffers;
for(uint32_t i = 0; i < target->numImages; i++) {
vkDestroyFramebuffer(device_, target->framebuffers[i], nullptr);
vkDestroyImageView(device_, target->imageViews[i], nullptr);
}
delete[] target->framebuffers;
delete[] target->imageViews;
delete[] target->images;
vkDestroySwapchainKHR(device_, target->swapchain, nullptr);
vkDestroySurfaceKHR(instance_, target->surface, nullptr);