godotengine / godotengine/godot
On a GPUParticles2D, when using Compatibility renderer, "reverse lifetime" draw order and non-local coords don't play nice.
- Dominant language
- C++
- Stars
- 117k
- Forks
- 26.8k
- PR merge metrics
- PR metrics pending
Description
### Tested versions
Tested in:
v4.2.2.stable.official [15073afe3]
v4.3.rc2.official [3978628c6]
### System information
Godot v4.3.rc2 - Manjaro Linux #1 SMP PREEMPT_DYNAMIC Mon Jul 15 21:39:34 UTC 2024 - X11 - GLES3 (Compatibility) - NVIDIA GeForce GTX 1070 Ti (nvidia; 550.100) - Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz (8 Threads)
### Issue description
Particles belonging to a GPUParticles2D node with draw_order set to "reverse lifetime", and local_coords set to false, don't properly stay in place when the node is moved around. This happens only in the Compatibility renderer.
https://github.com/user-attachments/assets/5fa5bbb0-f09b-45ef-bfa3-c9f458cdb682
### Steps to reproduce
- Using the Compatibility renderer, make a GPUParticles2D node with a basic particle material and these settings:

- Move it around, either in the editor or in-game.
(or open the MRP)
### Minimal reproduction project (MRP)
[MRP reverse lifetime bug.zip](https://github.com/user-attachments/files/16462721/MRP.reverse.lifetime.bug.zip)
Contributor guide
Research direction
Start by running the attached minimal reproduction project with the Compatibility renderer and inspect GPUParticles2D behavior using reverse lifetime, non-local coordinates, and node movement. Compare the result with other renderers or draw orders to isolate the Compatibility-specific path. Done means particles remain in place as the node moves without breaking the reported settings.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp
- Domain
- computer-graphics, game-dev
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100