diff options
Diffstat (limited to 'servers/rendering/renderer_rd/shaders')
| -rw-r--r-- | servers/rendering/renderer_rd/shaders/particles.glsl | 18 | ||||
| -rw-r--r-- | servers/rendering/renderer_rd/shaders/particles_copy.glsl | 36 | 
2 files changed, 36 insertions, 18 deletions
diff --git a/servers/rendering/renderer_rd/shaders/particles.glsl b/servers/rendering/renderer_rd/shaders/particles.glsl index d691ea2fdf..1b1051ecfa 100644 --- a/servers/rendering/renderer_rd/shaders/particles.glsl +++ b/servers/rendering/renderer_rd/shaders/particles.glsl @@ -112,6 +112,24 @@ struct ParticleData {  	uint flags;  	vec4 color;  	vec4 custom; +#ifdef USERDATA1_USED +	vec4 userdata1; +#endif +#ifdef USERDATA2_USED +	vec4 userdata2; +#endif +#ifdef USERDATA3_USED +	vec4 userdata3; +#endif +#ifdef USERDATA4_USED +	vec4 userdata4; +#endif +#ifdef USERDATA5_USED +	vec4 userdata5; +#endif +#ifdef USERDATA6_USED +	vec4 userdata6; +#endif  };  layout(set = 1, binding = 1, std430) restrict buffer Particles { diff --git a/servers/rendering/renderer_rd/shaders/particles_copy.glsl b/servers/rendering/renderer_rd/shaders/particles_copy.glsl index bb11e4c78d..b991880cd9 100644 --- a/servers/rendering/renderer_rd/shaders/particles_copy.glsl +++ b/servers/rendering/renderer_rd/shaders/particles_copy.glsl @@ -16,6 +16,9 @@ struct ParticleData {  	uint flags;  	vec4 color;  	vec4 custom; +#ifdef USERDATA_COUNT +	vec4 userdata[USERDATA_COUNT]; +#endif  };  layout(set = 0, binding = 1, std430) restrict readonly buffer Particles { @@ -57,7 +60,7 @@ layout(push_constant, std430) uniform Params {  	bool order_by_lifetime;  	uint lifetime_split;  	bool lifetime_reverse; -	uint pad; +	bool copy_mode_2d;  }  params; @@ -201,25 +204,22 @@ void main() {  		txform = mat4(vec4(0.0), vec4(0.0), vec4(0.0), vec4(0.0)); //zero scale, becomes invisible  	} -#ifdef MODE_2D - -	uint write_offset = gl_GlobalInvocationID.x * (2 + 1 + 1); //xform + color + custom +	if (params.copy_mode_2d) { +		uint write_offset = gl_GlobalInvocationID.x * (2 + 1 + 1); //xform + color + custom -	instances.data[write_offset + 0] = txform[0]; -	instances.data[write_offset + 1] = txform[1]; -	instances.data[write_offset + 2] = particles.data[particle].color; -	instances.data[write_offset + 3] = particles.data[particle].custom; - -#else - -	uint write_offset = gl_GlobalInvocationID.x * (3 + 1 + 1); //xform + color + custom +		instances.data[write_offset + 0] = txform[0]; +		instances.data[write_offset + 1] = txform[1]; +		instances.data[write_offset + 2] = particles.data[particle].color; +		instances.data[write_offset + 3] = particles.data[particle].custom; +	} else { +		uint write_offset = gl_GlobalInvocationID.x * (3 + 1 + 1); //xform + color + custom -	instances.data[write_offset + 0] = txform[0]; -	instances.data[write_offset + 1] = txform[1]; -	instances.data[write_offset + 2] = txform[2]; -	instances.data[write_offset + 3] = particles.data[particle].color; -	instances.data[write_offset + 4] = particles.data[particle].custom; -#endif //MODE_2D +		instances.data[write_offset + 0] = txform[0]; +		instances.data[write_offset + 1] = txform[1]; +		instances.data[write_offset + 2] = txform[2]; +		instances.data[write_offset + 3] = particles.data[particle].color; +		instances.data[write_offset + 4] = particles.data[particle].custom; +	}  #endif  }  |