Archived
1
Fork 0

Properly clean up post processing resources

This commit is contained in:
Joshua Goins 2018-10-17 10:12:34 -04:00
parent a084d8fe45
commit 34795d2376
4 changed files with 23 additions and 0 deletions

View file

@ -8,6 +8,7 @@ struct RenderTarget;
class PostPass {
public:
PostPass(Renderer& renderer);
~PostPass();
void render(VkCommandBuffer commandBuffer, RenderTarget* target);

View file

@ -10,6 +10,15 @@ PostPass::PostPass(Renderer& renderer) : renderer_(renderer) {
createSampler();
}
PostPass::~PostPass() {
vkDestroySampler(renderer_.getDevice(), offscreenSampler_, nullptr);
vkDestroyPipelineLayout(renderer_.getDevice(), pipelineLayout_, nullptr);
vkDestroyPipeline(renderer_.getDevice(), pipeline_, nullptr);
vkDestroyDescriptorSetLayout(renderer_.getDevice(), setLayout_, nullptr);
}
void PostPass::render(VkCommandBuffer commandBuffer, RenderTarget* target) {
vkCmdBindPipeline(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline_);
vkCmdBindDescriptorSets(commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, pipelineLayout_, 0, 1, &target->postSets[target->currentImage], 0, nullptr);

View file

@ -28,8 +28,11 @@ Renderer::Renderer() {
Renderer::~Renderer() {
vkDeviceWaitIdle(device_);
delete postPass_;
delete worldPass_;
vkDestroyDescriptorPool(device_, descriptorPool_, nullptr);
vkDestroyRenderPass(device_, presentationRenderPass_, nullptr);
vkDestroyCommandPool(device_, commandPool_, nullptr);
@ -312,7 +315,14 @@ void Renderer::destroyRenderTarget(RenderTarget* target) {
delete[] target->commandBuffers;
vkFreeDescriptorSets(device_, descriptorPool_, target->numImages, target->postSets);
for(uint32_t i = 0; i < target->numImages; i++) {
vkDestroyFramebuffer(device_, target->offscreenFramebuffers[i], nullptr);
vkDestroyImageView(device_, target->offscreenImageViews[i], nullptr);
vkFreeMemory(device_, target->offscreenMemory[i], nullptr);
vkDestroyImage(device_, target->offscreenImages[i], nullptr);
vkDestroyFramebuffer(device_, target->swapchainFramebuffers[i], nullptr);
vkDestroyImageView(device_, target->swapchainImageViews[i], nullptr);
}
@ -595,6 +605,7 @@ void Renderer::createDescriptorPool() {
VkDescriptorPoolCreateInfo poolInfo = {};
poolInfo.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
poolInfo.flags = VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT;
poolInfo.poolSizeCount = 1;
poolInfo.pPoolSizes = &poolSize;
poolInfo.maxSets = 15;

View file

@ -13,6 +13,8 @@ WorldPass::WorldPass(Renderer& renderer) : renderer_(renderer) {
}
WorldPass::~WorldPass() {
vkDestroyRenderPass(renderer_.getDevice(), renderPass_, nullptr);
vkDestroyPipeline(renderer_.getDevice(), pipeline_, nullptr);
vkDestroyPipelineLayout(renderer_.getDevice(), pipelineLayout_, nullptr);
}