From 5662542526f95c57cb43c72e8f9804cdb2cd8906 Mon Sep 17 00:00:00 2001 From: clayjohn Date: Tue, 7 Mar 2023 10:33:48 -0800 Subject: Avoid copying CanvasTexture when updating proxy (cherry picked from commit 84482ef90bf5f902f14594d957af8c0e3866f88c) --- drivers/gles3/storage/texture_storage.cpp | 2 ++ servers/rendering/renderer_rd/storage_rd/texture_storage.cpp | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/drivers/gles3/storage/texture_storage.cpp b/drivers/gles3/storage/texture_storage.cpp index ce66943328..dae722186c 100644 --- a/drivers/gles3/storage/texture_storage.cpp +++ b/drivers/gles3/storage/texture_storage.cpp @@ -832,6 +832,8 @@ void TextureStorage::texture_proxy_update(RID p_texture, RID p_proxy_to) { tex->is_render_target = false; tex->is_proxy = true; tex->proxies.clear(); + tex->canvas_texture = nullptr; + tex->tex_id = 0; proxy_to->proxies.push_back(p_texture); } diff --git a/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp b/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp index 50b324a9fd..a1346661e1 100644 --- a/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp +++ b/servers/rendering/renderer_rd/storage_rd/texture_storage.cpp @@ -1193,6 +1193,9 @@ void TextureStorage::texture_proxy_update(RID p_texture, RID p_proxy_to) { prev_tex->proxies.erase(p_texture); } + // Copy canvas_texture so it doesn't leak. + CanvasTexture *canvas_texture = tex->canvas_texture; + *tex = *proxy_to; tex->proxy_to = p_proxy_to; @@ -1200,6 +1203,7 @@ void TextureStorage::texture_proxy_update(RID p_texture, RID p_proxy_to) { tex->is_proxy = true; tex->proxies.clear(); proxy_to->proxies.push_back(p_texture); + tex->canvas_texture = canvas_texture; tex->rd_view.format_override = tex->rd_format; tex->rd_texture = RD::get_singleton()->texture_create_shared(tex->rd_view, proxy_to->rd_texture); -- cgit v1.2.3