#version 430 uniform mat4 projection; uniform mat4 view; uniform vec3 quad1, quad2; layout(points) in; layout(triangle_strip) out; layout(max_vertices = 4) out; in vec3 color_pass[]; in float lifetime_pass[]; in float size_pass[]; in int type_pass[]; smooth out vec2 tex_coords; flat out vec4 color_part; void main() { if(type_pass[0] != 0) { // This is not a generator particle vec3 old_pos = gl_in[0].gl_Position.xyz; float size = size_pass[0]; mat4 view_projection_matrix = projection * view; color_part = vec4(color_pass[0], lifetime_pass[0]); vec3 pos = old_pos + (-quad1 - quad2) * size; tex_coords = vec2(0.0, 0.0); gl_Position = view_projection_matrix * vec4(pos, 1.0); EmitVertex(); pos = old_pos + (-quad1 + quad2) * size; tex_coords = vec2(0.0, 1.0); gl_Position = view_projection_matrix * vec4(pos, 1.0); EmitVertex(); pos = old_pos + (quad1 - quad2) * size; tex_coords = vec2(1.0, 0.0); gl_Position = view_projection_matrix * vec4(pos, 1.0); EmitVertex(); pos = old_pos + (quad1 + quad2) * size; tex_coords = vec2(1.0, 1.0); gl_Position = view_projection_matrix * vec4(pos, 1.0); EmitVertex(); EndPrimitive(); } }