From da6f245c79f51de67c99bedfc4e196eb4179a46f Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 16 Oct 2018 09:01:14 -0400 Subject: [PATCH] Properly free mesh buffers --- include/renderer.h | 1 + src/main.cpp | 2 ++ src/renderer.cpp | 10 ++++++++++ 3 files changed, 13 insertions(+) diff --git a/include/renderer.h b/include/renderer.h index 5faeb8c..b493850 100644 --- a/include/renderer.h +++ b/include/renderer.h @@ -40,6 +40,7 @@ public: uint32_t findMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties); void fillMeshBuffers(Mesh* mesh); + void destroyMeshBuffers(Mesh* mesh); VkInstance getInstance() const { return instance_; diff --git a/src/main.cpp b/src/main.cpp index 5fd467c..ff58593 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -79,6 +79,8 @@ int main(int, char*[]) { renderer->render(world, target); } + renderer->destroyMeshBuffers(mesh); + renderer->destroyRenderTarget(target); vkDestroySurfaceKHR(renderer->getInstance(), surface, nullptr); diff --git a/src/renderer.cpp b/src/renderer.cpp index 749af60..4b15513 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -347,6 +347,16 @@ void Renderer::fillMeshBuffers(Mesh* mesh) { } } +void Renderer::destroyMeshBuffers(Mesh* mesh) { + vkDeviceWaitIdle(device_); + + vkFreeMemory(device_, mesh->indexMemory, nullptr); + vkDestroyBuffer(device_, mesh->indexBuffer, nullptr); + + vkFreeMemory(device_, mesh->vertexMemory, nullptr); + vkDestroyBuffer(device_, mesh->vertexBuffer, nullptr); +} + void Renderer::createInstance() { uint32_t layerCount = 0; vkEnumerateInstanceLayerProperties(&layerCount, nullptr);