### Godot version

v4.1.1.rc1.official [e709ad4d6]

### System information

Godot v4.1.1.rc1 - Windows 10.0.22621 - Vulkan (Compatibility) - Intel(R) UHD Graphics 620 (Intel Corporation; 30.0.101.1338) - Intel(R) Core(TM) i5-8350U CPU @ 1.70GHz (8 Threads)

### Issue description

When a GPUParticles2D has a random animation offset, particles appear to suddenly switch between frames when the particles are first emitted.

CPUParticles2D do not exhibit this behavior, they exhibit what we'd expect. (Particles start on the random frame and do not change)

In the video, CPUParticles2D is on the left, and GPUParticles2D is on the right. Note the stuttering on GPUParticles2D when the particles are first emitted/spawned.
https://github.com/godotengine/godot/assets/77651264/bba15e03-a0c0-4ca0-a4d1-7b2353fb092b

This behavior is also exhibited when the project is run in debug mode.

https://github.com/godotengine/godot/assets/77651264/cdde483a-4ac4-40c9-a291-a45fa495285d

Notable Observations:
Setting anim_offset_min and anim_offset_max to equal values does not exhibit this stuttering behavior.
I discovered this bug in 4.1 stable while trying to pinpoint another visual bug with GPUParticles2D.

### Steps to reproduce

1. Create a GPUParticles2D node
2. Give it a texture
3. Give it a CanvasItemMaterial, set particles_animation to on, and set either particles_anim_h_frames or particles_anim_v_frames to an integer value greater than 1.
4. Give it a ParticleProcessMaterial, set anim_offset_min and anim_offset_max to unequal values.

### Minimal reproduction project

[ParticleAnimationOffsetIssueMRP.zip](https://github.com/godotengine/godot/files/12062700/ParticleAnimationOffsetIssueMRP.zip)

ADD_PROPERTY(PropertyInfo(Variant::INT, "collision_mode", PROPERTY_HINT_ENUM, "Disabled,Rigid,Hide On Contact"), "set_collision_mode", "get_collision_mode");
	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "collision_friction", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_collision_friction", "get_collision_friction");
	ADD_PROPERTY(PropertyInfo(Variant::FLOAT, "collision_bounce", PROPERTY_HINT_RANGE, "0,1,0.01"), "set_collision_bounce", "get_collision_bounce");
	ADD_PROPERTY(PropertyInfo(Variant::BOOL, "collision_use_scale"), "set_collision_use_scale", "is_collision_using_scale");
	BIND_ENUM_CONSTANT(PARAM_INITIAL_LINEAR_VELOCITY);
	BIND_ENUM_CONSTANT(PARAM_ANGULAR_VELOCITY);
	BIND_ENUM_CONSTANT(PARAM_ORBIT_VELOCITY);
	BIND_ENUM_CONSTANT(PARAM_LINEAR_ACCEL);
	BIND_ENUM_CONSTANT(PARAM_RADIAL_ACCEL);
	BIND_ENUM_CONSTANT(PARAM_TANGENTIAL_ACCEL);
	BIND_ENUM_CONSTANT(PARAM_DAMPING);
	BIND_ENUM_CONSTANT(PARAM_ANGLE);
	BIND_ENUM_CONSTANT(PARAM_SCALE);
	BIND_ENUM_CONSTANT(PARAM_HUE_VARIATION);
	BIND_ENUM_CONSTANT(PARAM_ANIM_SPEED);
	BIND_ENUM_CONSTANT(PARAM_ANIM_OFFSET);
	BIND_ENUM_CONSTANT(PARAM_MAX);
	BIND_ENUM_CONSTANT(PARTICLE_FLAG_ALIGN_Y_TO_VELOCITY);
	BIND_ENUM_CONSTANT(PARTICLE_FLAG_ROTATE_Y);
	BIND_ENUM_CONSTANT(PARTICLE_FLAG_DISABLE_Z);
	BIND_ENUM_CONSTANT(PARTICLE_FLAG_MAX);
	BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINT);
	BIND_ENUM_CONSTANT(EMISSION_SHAPE_SPHERE);
	BIND_ENUM_CONSTANT(EMISSION_SHAPE_SPHERE_SURFACE);
	BIND_ENUM_CONSTANT(EMISSION_SHAPE_BOX);
	BIND_ENUM_CONSTANT(EMISSION_SHAPE_POINTS);
	BIND_ENUM_CONSTANT(EMISSION_SHAPE_DIRECTED_POINTS);
	BIND_ENUM_CONSTANT(EMISSION_SHAPE_RING);
	BIND_ENUM_CONSTANT(EMISSION_SHAPE_MAX);
	BIND_ENUM_CONSTANT(PARAM_TURB_VEL_INFLUENCE);