Merge pull request #52475 from tcoxon/fix_43733_3.x

Prevent shaders from generating code before the constructor finishes. [3.x]
This commit is contained in:
Rémi Verschelde 2021-09-21 13:53:17 +02:00 committed by GitHub
commit be6b7b4f9f
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 9 additions and 3 deletions

View file

@ -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();
}

View file

@ -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;

View file

@ -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();
}

View file

@ -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;

View file

@ -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();
}

View file

@ -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;