Properly clean up presentation resources
This commit is contained in:
parent
3b982362e4
commit
457a32bc06
2 changed files with 32 additions and 0 deletions
|
@ -7,6 +7,7 @@ struct RenderTarget {
|
|||
VkSwapchainKHR swapchain = nullptr;
|
||||
|
||||
VkExtent2D extent = {};
|
||||
uint32_t numImages = 0;
|
||||
|
||||
VkImage* images = nullptr;
|
||||
VkImageView* imageViews = nullptr;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Reference in a new issue