From 90b2d4b844e87c081e8d271ff615192d9433c209 Mon Sep 17 00:00:00 2001 From: Stuart Carnie Date: Tue, 11 Feb 2025 08:17:29 +1100 Subject: [PATCH] 2D: Fix free of invalid ID --- servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp index 172d6e5471..6da4d24e72 100644 --- a/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp +++ b/servers/rendering/renderer_rd/renderer_canvas_render_rd.cpp @@ -3299,6 +3299,8 @@ void RendererCanvasRenderRD::_prepare_batch_texture_info(RID p_texture, TextureS RendererCanvasRenderRD::~RendererCanvasRenderRD() { RendererRD::MaterialStorage *material_storage = RendererRD::MaterialStorage::get_singleton(); + RendererRD::TextureStorage *texture_storage = RendererRD::TextureStorage::get_singleton(); + //canvas state material_storage->material_free(default_canvas_group_material); @@ -3346,7 +3348,9 @@ RendererCanvasRenderRD::~RendererCanvasRenderRD() { } } - RendererRD::TextureStorage::get_singleton()->canvas_texture_free(default_canvas_texture); + // Disable the callback, as we're tearing everything down + texture_storage->canvas_texture_set_invalidation_callback(default_canvas_texture, nullptr, nullptr); + texture_storage->canvas_texture_free(default_canvas_texture); //pipelines don't need freeing, they are all gone after shaders are gone memdelete(shader.default_version_data);