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);