diff options
author | Ibrahn Sahir <ibrahn.sahir@gmail.com> | 2018-11-21 15:48:05 +0000 |
---|---|---|
committer | Ibrahn Sahir <ibrahn.sahir@gmail.com> | 2018-11-21 15:51:50 +0000 |
commit | c1f5233217f35d59849fc920f4147f9a8b3f0885 (patch) | |
tree | b631e42da562f3a8236bf6610629724967f94c42 /scene/resources/particles_material.cpp | |
parent | 03bd4d28a541c626e9ad70e4520a17b6f45e900a (diff) | |
download | redot-engine-c1f5233217f35d59849fc920f4147f9a8b3f0885.tar.gz |
Moved dirty material lists from static to lifetime controlled by main.
As with 7d82bed4f4cac8f5227d935c0496290e24eb48c8,
The list is now destroyed before the OS object, so can print errors if
there are unfreed materials.
Diffstat (limited to 'scene/resources/particles_material.cpp')
-rw-r--r-- | scene/resources/particles_material.cpp | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp index dae01e8d96..92c185712a 100644 --- a/scene/resources/particles_material.cpp +++ b/scene/resources/particles_material.cpp @@ -31,7 +31,7 @@ #include "particles_material.h" Mutex *ParticlesMaterial::material_mutex = NULL; -SelfList<ParticlesMaterial>::List ParticlesMaterial::dirty_materials; +SelfList<ParticlesMaterial>::List *ParticlesMaterial::dirty_materials = NULL; Map<ParticlesMaterial::MaterialKey, ParticlesMaterial::ShaderData> ParticlesMaterial::shader_map; ParticlesMaterial::ShaderNames *ParticlesMaterial::shader_names = NULL; @@ -41,6 +41,8 @@ void ParticlesMaterial::init_shaders() { material_mutex = Mutex::create(); #endif + dirty_materials = memnew(SelfList<ParticlesMaterial>::List); + shader_names = memnew(ShaderNames); shader_names->spread = "spread"; @@ -106,12 +108,15 @@ void ParticlesMaterial::finish_shaders() { memdelete(material_mutex); #endif + memdelete(dirty_materials); + dirty_materials = NULL; + memdelete(shader_names); } void ParticlesMaterial::_update_shader() { - dirty_materials.remove(&element); + dirty_materials->remove(&element); MaterialKey mk = _compute_key(); if (mk.key == current_key.key) @@ -584,9 +589,9 @@ void ParticlesMaterial::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) @@ -599,7 +604,7 @@ void ParticlesMaterial::_queue_shader_change() { material_mutex->lock(); if (!element.in_list()) { - dirty_materials.add(&element); + dirty_materials->add(&element); } if (material_mutex) |