[GLES3] Avoid freeing proxy textures clearing onwer's data

This commit is contained in:
Pedro J. Estébanez 2023-09-27 10:35:50 +02:00
parent 7e67b496ff
commit a67559931b

View file

@ -713,19 +713,21 @@ void TextureStorage::texture_free(RID p_texture) {
memdelete(t->canvas_texture); memdelete(t->canvas_texture);
} }
if (t->tex_id != 0) { bool must_free_data = false;
if (!t->is_external) { if (t->is_proxy) {
GLES3::Utilities::get_singleton()->texture_free_data(t->tex_id); if (t->proxy_to.is_valid()) {
}
t->tex_id = 0;
}
if (t->is_proxy && t->proxy_to.is_valid()) {
Texture *proxy_to = texture_owner.get_or_null(t->proxy_to); Texture *proxy_to = texture_owner.get_or_null(t->proxy_to);
if (proxy_to) { if (proxy_to) {
proxy_to->proxies.erase(p_texture); proxy_to->proxies.erase(p_texture);
} }
} }
} else {
must_free_data = t->tex_id != 0 && !t->is_external;
}
if (must_free_data) {
GLES3::Utilities::get_singleton()->texture_free_data(t->tex_id);
t->tex_id = 0;
}
texture_atlas_remove_texture(p_texture); texture_atlas_remove_texture(p_texture);