summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-03-24 01:16:48 +0100
committerRémi Verschelde <rverschelde@gmail.com>2024-03-24 01:16:48 +0100
commit70c05f63daf6fe25d2cd34f051d4fc2a6bdfe6cb (patch)
treeb5dd203c19b4257f4f09411875155410a6365b21
parent5940fd5d071d827b2c5fb474c49d273a02805e8a (diff)
parentdfa326ef55ee7c973afef6527b42844e7179a0ff (diff)
downloadredot-engine-70c05f63daf6fe25d2cd34f051d4fc2a6bdfe6cb.tar.gz
Merge pull request #89531 from sullyscience/fix-resource-leaks
Fix mobile renderer RID leaks
-rw-r--r--servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp5
-rw-r--r--servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp7
2 files changed, 12 insertions, 0 deletions
diff --git a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
index ac93aca6bb..2f307c62f3 100644
--- a/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
+++ b/servers/rendering/renderer_rd/forward_mobile/render_forward_mobile.cpp
@@ -2835,6 +2835,11 @@ RenderForwardMobile::~RenderForwardMobile() {
for (const RID &rid : scene_state.uniform_buffers) {
RD::get_singleton()->free(rid);
}
+ for (uint32_t i = 0; i < RENDER_LIST_MAX; i++) {
+ if (scene_state.instance_buffer[i].is_valid()) {
+ RD::get_singleton()->free(scene_state.instance_buffer[i]);
+ }
+ }
RD::get_singleton()->free(scene_state.lightmap_buffer);
RD::get_singleton()->free(scene_state.lightmap_capture_buffer);
memdelete_arr(scene_state.lightmap_captures);
diff --git a/servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp b/servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp
index 8dc74820e2..c5d74d395f 100644
--- a/servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp
+++ b/servers/rendering/renderer_rd/storage_rd/render_scene_buffers_rd.cpp
@@ -128,6 +128,13 @@ void RenderSceneBuffersRD::cleanup() {
free_named_texture(E.value);
}
named_textures.clear();
+
+ // Clear weight_buffer / blur textures.
+ for (const WeightBuffers &weight_buffer : weight_buffers) {
+ if (weight_buffer.weight.is_valid()) {
+ RD::get_singleton()->free(weight_buffer.weight);
+ }
+ }
}
void RenderSceneBuffersRD::configure(const RenderSceneBuffersConfiguration *p_config) {