diff options
author | SaracenOne <SaracenOne@gmail.com> | 2022-02-10 10:04:18 +0000 |
---|---|---|
committer | SaracenOne <SaracenOne@gmail.com> | 2022-02-10 10:04:18 +0000 |
commit | 71eb3f6df5d521adb87561713283e6f2f5ebc175 (patch) | |
tree | 723d5cb47a86db0031eac9dc4c87d5d71f083b29 | |
parent | 79077e6c10db9e8e53a8134f72e326f3ffb9c51c (diff) |
Fix _free_render_buffer_data freeing shared half_texture and half_fb
-rw-r--r-- | servers/rendering/renderer_rd/renderer_scene_render_rd.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp index 43a1812f89..d3928d579a 100644 --- a/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_scene_render_rd.cpp @@ -1818,11 +1818,14 @@ void RendererSceneRenderRD::_free_render_buffer_data(RenderBuffers *rb) { if (rb->blur[i].mipmaps[m].fb.is_valid()) { RD::get_singleton()->free(rb->blur[i].mipmaps[m].fb); } - if (rb->blur[i].mipmaps[m].half_fb.is_valid()) { - RD::get_singleton()->free(rb->blur[i].mipmaps[m].half_fb); - } - if (rb->blur[i].mipmaps[m].half_texture.is_valid()) { - RD::get_singleton()->free(rb->blur[i].mipmaps[m].half_texture); + // texture and framebuffer in both blur mipmaps are shared, so only free from the first one + if (i == 0) { + if (rb->blur[i].mipmaps[m].half_fb.is_valid()) { + RD::get_singleton()->free(rb->blur[i].mipmaps[m].half_fb); + } + if (rb->blur[i].mipmaps[m].half_texture.is_valid()) { + RD::get_singleton()->free(rb->blur[i].mipmaps[m].half_texture); + } } } rb->blur[i].mipmaps.clear(); |