### 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)

if (tex_parameters[PARAM_SCALE].is_valid()) {
		code += "uniform sampler2D scale_texture : repeat_disable;\n";
	}
	if (tex_parameters[PARAM_HUE_VARIATION].is_valid()) {
		code += "uniform sampler2D hue_variation_texture : repeat_disable;\n";
	}
	if (tex_parameters[PARAM_ANIM_SPEED].is_valid()) {
		code += "uniform sampler2D anim_speed_texture : repeat_disable;\n";
	}
	if (tex_parameters[PARAM_ANIM_OFFSET].is_valid()) {
		code += "uniform sampler2D anim_offset_texture : repeat_disable;\n";
	}
	if (collision_mode == COLLISION_RIGID) {
		code += "uniform float collision_friction;\n";
		code += "uniform float collision_bounce;\n";
	}
	if (turbulence_enabled) {
		code += "uniform float turbulence_noise_strength;\n";
		code += "uniform float turbulence_noise_scale;\n";
		code += "uniform float turbulence_influence_min;\n";
		code += "uniform float turbulence_influence_max;\n";
		code += "uniform float turbulence_initial_displacement_min;\n";
		code += "uniform float turbulence_initial_displacement_max;\n";
		code += "uniform float turbulence_noise_speed_random;\n";
		code += "uniform vec3 turbulence_noise_speed = vec3(1.0, 1.0, 1.0);\n";
		if (tex_parameters[PARAM_TURB_INFLUENCE_OVER_LIFE].is_valid()) {
			code += "uniform sampler2D turbulence_influence_over_life;\n";
		}
		if (turbulence_color_ramp.is_valid()) {
			code += "uniform sampler2D turbulence_color_ramp;\n";