2013-12-29 18:23:36 +00:00
|
|
|
#version 130
|
|
|
|
uniform int dt;
|
2013-12-30 13:57:55 +00:00
|
|
|
uniform mat4 sourcematrix;
|
2014-01-01 19:13:57 +00:00
|
|
|
uniform mat4 tinvsourcematrix;
|
2013-12-29 18:23:36 +00:00
|
|
|
|
2013-12-31 17:25:10 +00:00
|
|
|
in vec3 particle_position_initial;
|
|
|
|
in float lifetime_initial;
|
2014-01-01 01:11:44 +00:00
|
|
|
in vec3 particle_velocity_initial;
|
|
|
|
in float size_initial;
|
2013-12-31 17:25:10 +00:00
|
|
|
|
2013-12-29 18:23:36 +00:00
|
|
|
in vec3 particle_position;
|
|
|
|
in float lifetime;
|
2014-01-01 01:11:44 +00:00
|
|
|
in vec3 particle_velocity;
|
|
|
|
in float size;
|
2013-12-29 18:23:36 +00:00
|
|
|
|
|
|
|
out vec3 new_particle_position;
|
|
|
|
out float new_lifetime;
|
2014-01-01 01:11:44 +00:00
|
|
|
out vec3 new_particle_velocity;
|
|
|
|
out float new_size;
|
2013-12-29 18:23:36 +00:00
|
|
|
|
|
|
|
void main(void)
|
|
|
|
{
|
2013-12-31 17:25:10 +00:00
|
|
|
vec4 initialposition = sourcematrix * vec4(particle_position_initial, 1.0);
|
2014-01-01 19:13:57 +00:00
|
|
|
vec4 adjusted_initial_velocity = tinvsourcematrix * vec4(particle_velocity_initial, 1.0);
|
|
|
|
adjusted_initial_velocity /= adjusted_initial_velocity.w;
|
2014-01-02 17:20:26 +00:00
|
|
|
float adjusted_lifetime = lifetime + (float(dt)/lifetime_initial);
|
|
|
|
new_particle_position = (adjusted_lifetime < 1.) ? particle_position + particle_velocity.xyz * float(dt) : initialposition.xyz;
|
|
|
|
new_lifetime = (adjusted_lifetime < 1.) ? adjusted_lifetime : 0.;
|
|
|
|
new_particle_velocity = (adjusted_lifetime < 1.) ? particle_velocity : adjusted_initial_velocity.xyz;
|
2014-01-05 18:44:52 +00:00
|
|
|
new_size = (adjusted_lifetime < 1.) ? size : size_initial;
|
2013-12-29 18:23:36 +00:00
|
|
|
gl_Position = vec4(0.);
|
|
|
|
}
|