Merge pull request #71520 from conradhappeliv/fix-71480

Fix GPUParticles2D not recomputing transforms each frame
This commit is contained in:
Rémi Verschelde 2023-01-17 10:14:32 +01:00
commit e1e30f9fc7
No known key found for this signature in database
GPG Key ID: C3336907360768E1

View File

@ -1415,7 +1415,6 @@ void ParticlesStorage::update_particles() {
}
bool zero_time_scale = Engine::get_singleton()->get_time_scale() <= 0.0;
bool updated = false;
if (particles->clear && particles->pre_process_time > 0.0) {
double frame_time;
@ -1430,7 +1429,6 @@ void ParticlesStorage::update_particles() {
while (todo >= 0) {
_particles_process(particles, frame_time);
todo -= frame_time;
updated = true;
}
}
@ -1452,10 +1450,9 @@ void ParticlesStorage::update_particles() {
}
double todo = particles->frame_remainder + delta;
while (todo >= frame_time || (particles->clear && !updated)) {
while (todo >= frame_time || particles->clear) {
_particles_process(particles, frame_time);
todo -= decr;
updated = true;
}
particles->frame_remainder = todo;
@ -1463,16 +1460,16 @@ void ParticlesStorage::update_particles() {
} else {
if (zero_time_scale) {
_particles_process(particles, 0.0);
updated = true;
} else {
_particles_process(particles, RendererCompositorRD::singleton->get_frame_delta_time());
updated = true;
}
}
//copy particles to instance buffer
// Ensure that memory is initialized (the code above should ensure that _particles_process is always called at least once upon clearing).
DEV_ASSERT(!particles->clear);
if (updated && particles->draw_order != RS::PARTICLES_DRAW_ORDER_VIEW_DEPTH && particles->transform_align != RS::PARTICLES_TRANSFORM_ALIGN_Z_BILLBOARD && particles->transform_align != RS::PARTICLES_TRANSFORM_ALIGN_Z_BILLBOARD_Y_TO_VELOCITY) {
// Copy particles to instance buffer.
if (particles->draw_order != RS::PARTICLES_DRAW_ORDER_VIEW_DEPTH && particles->transform_align != RS::PARTICLES_TRANSFORM_ALIGN_Z_BILLBOARD && particles->transform_align != RS::PARTICLES_TRANSFORM_ALIGN_Z_BILLBOARD_Y_TO_VELOCITY) {
//does not need view dependent operation, do copy here
ParticlesShader::CopyPushConstant copy_push_constant;