diff --git a/scene/2d/canvas_item.cpp b/scene/2d/canvas_item.cpp index 7e97872469a..f65bd8ddc90 100644 --- a/scene/2d/canvas_item.cpp +++ b/scene/2d/canvas_item.cpp @@ -176,7 +176,7 @@ void CanvasItemMaterial::flush_changes() { void CanvasItemMaterial::_queue_shader_change() { material_mutex.lock(); - if (!element.in_list()) { + if (is_initialized && !element.in_list()) { dirty_materials->add(&element); } @@ -313,6 +313,7 @@ CanvasItemMaterial::CanvasItemMaterial() : current_key.key = 0; current_key.invalid_key = 1; + is_initialized = true; _queue_shader_change(); } diff --git a/scene/2d/canvas_item.h b/scene/2d/canvas_item.h index ae0e638fdfd..9ea94154459 100644 --- a/scene/2d/canvas_item.h +++ b/scene/2d/canvas_item.h @@ -113,6 +113,7 @@ private: _FORCE_INLINE_ void _queue_shader_change(); _FORCE_INLINE_ bool _is_shader_dirty() const; + bool is_initialized = false; BlendMode blend_mode; LightMode light_mode; bool particles_animation; diff --git a/scene/resources/material.cpp b/scene/resources/material.cpp index 36c56847e22..4cf8a83e957 100644 --- a/scene/resources/material.cpp +++ b/scene/resources/material.cpp @@ -1073,7 +1073,7 @@ void SpatialMaterial::flush_changes() { void SpatialMaterial::_queue_shader_change() { material_mutex.lock(); - if (!element.in_list()) { + if (is_initialized && !element.in_list()) { dirty_materials->add(&element); } @@ -2317,6 +2317,7 @@ SpatialMaterial::SpatialMaterial() : current_key.key = 0; current_key.invalid_key = 1; + is_initialized = true; _queue_shader_change(); } diff --git a/scene/resources/material.h b/scene/resources/material.h index e8e772386c6..94ab38304e5 100644 --- a/scene/resources/material.h +++ b/scene/resources/material.h @@ -366,6 +366,7 @@ private: _FORCE_INLINE_ void _queue_shader_change(); _FORCE_INLINE_ bool _is_shader_dirty() const; + bool is_initialized = false; Color albedo; float specular; float metallic; diff --git a/scene/resources/particles_material.cpp b/scene/resources/particles_material.cpp index 74034c56004..ae7008f5b8e 100644 --- a/scene/resources/particles_material.cpp +++ b/scene/resources/particles_material.cpp @@ -690,7 +690,7 @@ void ParticlesMaterial::flush_changes() { void ParticlesMaterial::_queue_shader_change() { material_mutex.lock(); - if (!element.in_list()) { + if (is_initialized && !element.in_list()) { dirty_materials->add(&element); } @@ -1367,6 +1367,7 @@ ParticlesMaterial::ParticlesMaterial() : current_key.key = 0; current_key.invalid_key = 1; + is_initialized = true; _queue_shader_change(); } diff --git a/scene/resources/particles_material.h b/scene/resources/particles_material.h index f82274bde2f..3d564c7880a 100644 --- a/scene/resources/particles_material.h +++ b/scene/resources/particles_material.h @@ -203,6 +203,7 @@ private: _FORCE_INLINE_ void _queue_shader_change(); _FORCE_INLINE_ bool _is_shader_dirty() const; + bool is_initialized = false; Vector3 direction; float spread; float flatness;