diff options
author | Rémi Verschelde <rverschelde@gmail.com> | 2018-12-11 18:05:19 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-12-11 18:05:19 +0100 |
commit | 3f9c0541630a168efc4acad541b95c4565580f46 (patch) | |
tree | 002ee4c41d11de3e9b885949226c4c5063e441c9 /scene/resources/material.cpp | |
parent | 4c41e29c8e796f97a714da784a7cecae8933b202 (diff) | |
parent | c1f5233217f35d59849fc920f4147f9a8b3f0885 (diff) | |
download | redot-engine-3f9c0541630a168efc4acad541b95c4565580f46.tar.gz |
Merge pull request #23887 from ibrahn/dirty-material-list-lifetime
Moved dirty material lists from static to lifetime controlled by main.
Diffstat (limited to 'scene/resources/material.cpp')
-rw-r--r-- | scene/resources/material.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index cc3c882169..f6dc60900f 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -258,7 +258,7 @@ ShaderMaterial::~ShaderMaterial() { ///////////////////////////////// Mutex *SpatialMaterial::material_mutex = NULL; -SelfList<SpatialMaterial>::List SpatialMaterial::dirty_materials; +SelfList<SpatialMaterial>::List *SpatialMaterial::dirty_materials = NULL; Map<SpatialMaterial::MaterialKey, SpatialMaterial::ShaderData> SpatialMaterial::shader_map; SpatialMaterial::ShaderNames *SpatialMaterial::shader_names = NULL; @@ -268,6 +268,8 @@ void SpatialMaterial::init_shaders() { material_mutex = Mutex::create(); #endif + dirty_materials = memnew(SelfList<SpatialMaterial>::List); + shader_names = memnew(ShaderNames); shader_names->albedo = "albedo"; @@ -348,12 +350,15 @@ void SpatialMaterial::finish_shaders() { memdelete(material_mutex); #endif + memdelete(dirty_materials); + dirty_materials = NULL; + memdelete(shader_names); } void SpatialMaterial::_update_shader() { - dirty_materials.remove(&element); + dirty_materials->remove(&element); MaterialKey mk = _compute_key(); if (mk.key == current_key.key) @@ -1002,9 +1007,9 @@ void SpatialMaterial::flush_changes() { if (material_mutex) material_mutex->lock(); - while (dirty_materials.first()) { + while (dirty_materials->first()) { - dirty_materials.first()->self()->_update_shader(); + dirty_materials->first()->self()->_update_shader(); } if (material_mutex) @@ -1017,7 +1022,7 @@ void SpatialMaterial::_queue_shader_change() { material_mutex->lock(); if (!element.in_list()) { - dirty_materials.add(&element); + dirty_materials->add(&element); } if (material_mutex) |