From 1eee48d4a4f371b71a9bfe9660a77fce168257c7 Mon Sep 17 00:00:00 2001 From: codereader Date: Mon, 1 Nov 2021 08:53:29 +0100 Subject: [PATCH] #5584: Purge any shaders that have not been used the last frame, to prevent introducing a long-running memory leak. Re-using the CamRenderer container memory reduces the time needed to render 100 frames from 8.7 to 7.7 seconds. --- libs/render/CamRenderer.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/libs/render/CamRenderer.h b/libs/render/CamRenderer.h index 798c45c10e..a2f68a659c 100644 --- a/libs/render/CamRenderer.h +++ b/libs/render/CamRenderer.h @@ -104,9 +104,17 @@ class CamRenderer : { // Keep the shader map intact, but clear the renderables vectors, // so that we don't have to re-allocate the whole memory every frame - for (auto& pair : _litRenderables) + // Purge the ones that have not been used in this render round + for (auto i = _litRenderables.begin(); i != _litRenderables.end();) { - pair.second.clear(); + if (i->second.empty()) + { + // This shader has not been used at all in the last frame, free the memory + _litRenderables.erase(i++); + continue; + } + + (i++)->second.clear(); } _sceneLights.clear();