diff --git a/include/ecs.h b/include/ecs.h index e8ef7bb..bac9a69 100644 --- a/include/ecs.h +++ b/include/ecs.h @@ -56,6 +56,23 @@ namespace ECS { inline std::map worlds; inline EntityID lastID = 1; + static inline void destructResources() { + for(const auto& [id, info] : infos) + delete info; + + for(const auto& [id, transform] : transforms) + delete transform; + + for(const auto& [id, mesh] : meshes) + delete mesh; + + for(const auto& [id, light] : lights) + delete light; + + for(const auto& [id, camera] : cameras) + delete camera; + } + static inline EntityID createEntity(World* world) { EntityID newID = lastID++; worlds[newID] = world; diff --git a/src/main.cpp b/src/main.cpp index 2882e11..71d94d9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -274,6 +274,8 @@ int main(int argc, char* argv[]) { delete renderer; + ECS::destructResources(); + writeConfig(); SDL_DestroyWindow(window); diff --git a/src/renderer.cpp b/src/renderer.cpp index 926945c..f1f0368 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -871,6 +871,7 @@ void Renderer::destroyRenderTarget(RenderTarget* target) { vkDestroyImageView(device_, target->swapchainImageViews[i], nullptr); } + // imgui delete[] target->imguiIndexBufferSizes; delete[] target->imguiIndexMemorys; delete[] target->imguiIndexBuffers; @@ -879,6 +880,22 @@ void Renderer::destroyRenderTarget(RenderTarget* target) { delete[] target->imguiVertexMemorys; delete[] target->imguiVertexBuffers; + // smaa + delete[] target->blendDescriptorSets; + + delete[] target->blendFramebuffers; + delete[] target->blendImageViews; + delete[] target->blendMemorys; + delete[] target->blendImages; + + delete[] target->edgeDescriptorSets; + + delete[] target->edgeFramebuffers; + delete[] target->edgeImageViews; + delete[] target->edgeMemorys; + delete[] target->edgeImages; + + // dof delete[] target->nearFieldFramebuffers; delete[] target->nearFieldImageViews; delete[] target->nearFieldMemory; @@ -889,6 +906,13 @@ void Renderer::destroyRenderTarget(RenderTarget* target) { delete[] target->farFieldMemory; delete[] target->farFieldImages; + // sobel + delete[] target->sobelFramebuffers; + delete[] target->sobelImageViews; + delete[] target->sobelMemorys; + delete[] target->sobelImages; + + // offscreen delete[] target->offscreenFramebuffers; delete[] target->offscreenDepthImageViews; @@ -899,12 +923,11 @@ void Renderer::destroyRenderTarget(RenderTarget* target) { delete[] target->offscreenColorMemory; delete[] target->offscreenColorImages; + // swapchain delete[] target->swapchainFramebuffers; delete[] target->swapchainImageViews; delete[] target->swapchainImages; - delete[] target->blendDescriptorSets; - delete[] target->edgeDescriptorSets; delete[] target->dofSets; delete[] target->postSets; diff --git a/src/smaapass.cpp b/src/smaapass.cpp index 8b76cfc..dc71445 100644 --- a/src/smaapass.cpp +++ b/src/smaapass.cpp @@ -115,6 +115,8 @@ void SMAAPass::createDescriptorSets(RenderTarget* target) { vkAllocateDescriptorSets(renderer.getDevice(), &allocInfo, target->blendDescriptorSets); + delete[] layouts; + for(int i = 0; i < target->numImages; i++) { // edge { diff --git a/src/worldmanager.cpp b/src/worldmanager.cpp index ff02709..3333add 100644 --- a/src/worldmanager.cpp +++ b/src/worldmanager.cpp @@ -44,5 +44,8 @@ void WorldManager::destructResources(Renderer* renderer) { for(const auto& [id, mesh] : meshes) { renderer->destroyMeshBuffers(mesh->mesh); renderer->destroyMaterialBuffers(mesh->material); + + delete mesh->mesh; + delete mesh->material; } }