diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-26 15:58:55 +0200 |
---|---|---|
committer | Rémi Verschelde <rverschelde@gmail.com> | 2023-10-26 15:58:55 +0200 |
commit | 253711ec98d0eddb78953f38dc78ac41385aa1be (patch) | |
tree | 5e222456f28e7bb5fb98de491e2baeb6fddf5a1f /drivers/gles3/storage/texture_storage.cpp | |
parent | 23b1f213a8bd1e0355f0affcd7f0286a68372c8d (diff) | |
parent | a67559931b09cc19cef1cecc82e6f6dbf596bfec (diff) | |
download | redot-engine-253711ec98d0eddb78953f38dc78ac41385aa1be.tar.gz |
Merge pull request #82430 from RandomShaper/fix_gles3_tex_free
[GLES3] Avoid freeing proxy textures clearing onwer's data
Diffstat (limited to 'drivers/gles3/storage/texture_storage.cpp')
-rw-r--r-- | drivers/gles3/storage/texture_storage.cpp | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/drivers/gles3/storage/texture_storage.cpp b/drivers/gles3/storage/texture_storage.cpp index b7b62d78a0..fcc1dee3e2 100644 --- a/drivers/gles3/storage/texture_storage.cpp +++ b/drivers/gles3/storage/texture_storage.cpp @@ -713,18 +713,20 @@ void TextureStorage::texture_free(RID p_texture) { memdelete(t->canvas_texture); } - if (t->tex_id != 0) { - if (!t->is_external) { - GLES3::Utilities::get_singleton()->texture_free_data(t->tex_id); + bool must_free_data = false; + if (t->is_proxy) { + if (t->proxy_to.is_valid()) { + Texture *proxy_to = texture_owner.get_or_null(t->proxy_to); + if (proxy_to) { + proxy_to->proxies.erase(p_texture); + } } - t->tex_id = 0; + } else { + must_free_data = t->tex_id != 0 && !t->is_external; } - - if (t->is_proxy && t->proxy_to.is_valid()) { - Texture *proxy_to = texture_owner.get_or_null(t->proxy_to); - if (proxy_to) { - proxy_to->proxies.erase(p_texture); - } + if (must_free_data) { + GLES3::Utilities::get_singleton()->texture_free_data(t->tex_id); + t->tex_id = 0; } texture_atlas_remove_texture(p_texture); |