diff --git a/scene/2d/cpu_particles_2d.cpp b/scene/2d/cpu_particles_2d.cpp index 721b52edaac..05c2253a5b0 100644 --- a/scene/2d/cpu_particles_2d.cpp +++ b/scene/2d/cpu_particles_2d.cpp @@ -37,8 +37,7 @@ void CPUParticles2D::set_emitting(bool p_emitting) { emitting = p_emitting; - if (emitting) - set_process_internal(true); + set_process_internal(true); } void CPUParticles2D::set_amount(int p_amount) { @@ -966,7 +965,7 @@ void CPUParticles2D::_update_render_thread() { void CPUParticles2D::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - set_process_internal(emitting); + _set_redraw(true); } if (p_what == NOTIFICATION_EXIT_TREE) { @@ -1002,6 +1001,7 @@ void CPUParticles2D::_notification(int p_what) { float delta = get_process_delta_time(); if (emitting) { + _set_redraw(true); inactive_time = 0; } else { inactive_time += delta; @@ -1017,7 +1017,6 @@ void CPUParticles2D::_notification(int p_what) { return; } } - _set_redraw(true); if (time == 0 && pre_process_time > 0.0) { diff --git a/scene/3d/cpu_particles.cpp b/scene/3d/cpu_particles.cpp index 469a1e87db3..85bc2dd5290 100644 --- a/scene/3d/cpu_particles.cpp +++ b/scene/3d/cpu_particles.cpp @@ -47,8 +47,7 @@ PoolVector CPUParticles::get_faces(uint32_t p_usage_flags) const { void CPUParticles::set_emitting(bool p_emitting) { emitting = p_emitting; - if (emitting) - set_process_internal(true); + set_process_internal(true); } void CPUParticles::set_amount(int p_amount) { @@ -1003,11 +1002,9 @@ void CPUParticles::_set_redraw(bool p_redraw) { if (redraw) { VS::get_singleton()->connect("frame_pre_draw", this, "_update_render_thread"); VS::get_singleton()->instance_geometry_set_flag(get_instance(), VS::INSTANCE_FLAG_DRAW_NEXT_FRAME_IF_VISIBLE, true); - VS::get_singleton()->multimesh_set_visible_instances(multimesh, -1); } else { VS::get_singleton()->disconnect("frame_pre_draw", this, "_update_render_thread"); VS::get_singleton()->instance_geometry_set_flag(get_instance(), VS::INSTANCE_FLAG_DRAW_NEXT_FRAME_IF_VISIBLE, false); - VS::get_singleton()->multimesh_set_visible_instances(multimesh, 0); } #ifndef NO_THREADS update_mutex->unlock(); @@ -1032,7 +1029,7 @@ void CPUParticles::_update_render_thread() { void CPUParticles::_notification(int p_what) { if (p_what == NOTIFICATION_ENTER_TREE) { - set_process_internal(emitting); + _set_redraw(true); } if (p_what == NOTIFICATION_EXIT_TREE) { @@ -1051,6 +1048,8 @@ void CPUParticles::_notification(int p_what) { float delta = get_process_delta_time(); if (emitting) { + + _set_redraw(true); inactive_time = 0; } else { inactive_time += delta; @@ -1066,7 +1065,6 @@ void CPUParticles::_notification(int p_what) { return; } } - _set_redraw(true); bool processed = false;