mirror of
https://github.com/godotengine/godot.git
synced 2024-11-24 05:04:10 +00:00
Merge pull request #71520 from conradhappeliv/fix-71480
Fix GPUParticles2D not recomputing transforms each frame
This commit is contained in:
commit
e1e30f9fc7
@ -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;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user