Merge pull request #71346 from Chaosus/material_fix_freezing

Clear material arrays to prevent freeing of invalid texture RID
This commit is contained in:
Rémi Verschelde 2023-01-14 00:44:18 +01:00
commit a51ca2beaf
No known key found for this signature in database
GPG key ID: C3336907360768E1
2 changed files with 16 additions and 0 deletions

View file

@ -2765,6 +2765,14 @@ void MaterialStorage::material_free(RID p_rid) {
Material *material = material_owner.get_or_null(p_rid);
ERR_FAIL_COND(!material);
// Need to clear texture arrays to prevent spin locking of their RID's.
// This happens when the app is being closed.
for (KeyValue<StringName, Variant> &E : material->params) {
if (E.value.get_type() == Variant::ARRAY) {
Array(E.value).clear();
}
}
material_set_shader(p_rid, RID()); //clean up shader
material->dependency.deleted_notify(p_rid);

View file

@ -2685,6 +2685,14 @@ void MaterialStorage::material_free(RID p_rid) {
Material *material = material_owner.get_or_null(p_rid);
ERR_FAIL_COND(!material);
// Need to clear texture arrays to prevent spin locking of their RID's.
// This happens when the app is being closed.
for (KeyValue<StringName, Variant> &E : material->params) {
if (E.value.get_type() == Variant::ARRAY) {
Array(E.value).clear();
}
}
material_set_shader(p_rid, RID()); //clean up shader
material->dependency.deleted_notify(p_rid);