Browse Source

Avoid copying CanvasTexture when updating proxy

clayjohn 2 years ago
parent
commit
84482ef90b

+ 2 - 0
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);
 }
 

+ 4 - 0
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);