diff options
author | Per Melin <git@melin.net> | 2024-03-02 18:39:24 +0100 |
---|---|---|
committer | Per Melin <git@melin.net> | 2024-03-02 18:41:38 +0100 |
commit | 24b58c655a28cb545f51eefd498dfb9493baca1e (patch) | |
tree | f2933301ccf67ad5ea8dca06f876e45c5ca47fff /drivers | |
parent | f2045ba822bff7d34964901393581a3117c394a9 (diff) | |
download | redot-engine-24b58c655a28cb545f51eefd498dfb9493baca1e.tar.gz |
Fix USERDATA built-ins for GLES3 particle shaders
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gles3/shaders/particles.glsl | 30 | ||||
-rw-r--r-- | drivers/gles3/storage/particles_storage.cpp | 6 |
2 files changed, 28 insertions, 8 deletions
diff --git a/drivers/gles3/shaders/particles.glsl b/drivers/gles3/shaders/particles.glsl index 64ef26b075..d95f7f4309 100644 --- a/drivers/gles3/shaders/particles.glsl +++ b/drivers/gles3/shaders/particles.glsl @@ -112,22 +112,22 @@ layout(location = 4) in highp vec4 xform_2; layout(location = 5) in highp vec4 xform_3; #endif #ifdef USERDATA1_USED -layout(location = 6) in highp vec4 userdata1; +in highp vec4 userdata1; #endif #ifdef USERDATA2_USED -layout(location = 7) in highp vec4 userdata2; +in highp vec4 userdata2; #endif #ifdef USERDATA3_USED -layout(location = 8) in highp vec4 userdata3; +in highp vec4 userdata3; #endif #ifdef USERDATA4_USED -layout(location = 9) in highp vec4 userdata4; +in highp vec4 userdata4; #endif #ifdef USERDATA5_USED -layout(location = 10) in highp vec4 userdata5; +in highp vec4 userdata5; #endif #ifdef USERDATA6_USED -layout(location = 11) in highp vec4 userdata6; +in highp vec4 userdata6; #endif out highp vec4 out_color; //tfb: @@ -219,6 +219,24 @@ void main() { #endif xform = transpose(xform); flags = floatBitsToUint(velocity_flags.w); +#ifdef USERDATA1_USED + out_userdata1 = userdata1; +#endif +#ifdef USERDATA2_USED + out_userdata2 = userdata2; +#endif +#ifdef USERDATA3_USED + out_userdata3 = userdata3; +#endif +#ifdef USERDATA4_USED + out_userdata4 = userdata4; +#endif +#ifdef USERDATA5_USED + out_userdata5 = userdata5; +#endif +#ifdef USERDATA6_USED + out_userdata6 = userdata6; +#endif } //clear started flag if set diff --git a/drivers/gles3/storage/particles_storage.cpp b/drivers/gles3/storage/particles_storage.cpp index c5a97bdbd5..8e48d0695a 100644 --- a/drivers/gles3/storage/particles_storage.cpp +++ b/drivers/gles3/storage/particles_storage.cpp @@ -728,8 +728,10 @@ void ParticlesStorage::_particles_process(Particles *p_particles, double p_delta ParticlesShaderGLES3::ShaderVariant variant = ParticlesShaderGLES3::MODE_DEFAULT; uint32_t specialization = 0; - for (uint32_t i = 0; i < p_particles->userdata_count; i++) { - specialization |= (1 << i); + for (uint32_t i = 0; i < PARTICLES_MAX_USERDATAS; i++) { + if (m->shader_data->userdatas_used[i]) { + specialization |= ParticlesShaderGLES3::USERDATA1_USED << i; + } } if (p_particles->mode == RS::ParticlesMode::PARTICLES_MODE_3D) { |