#version 300 es layout(location = 0) in vec2 aQuadPos; // shared unit quad, centered (-0.5..+0.5) layout(location = 1) in vec2 aTexCoord; // quad-corner uv; v=0 = quad top on screen layout(location = 2) in vec3 aPos; // per-instance: world center layout(location = 3) in float aSize; // per-instance: world diameter layout(location = 4) in vec4 aColor; // per-instance: ripple params (x = strength, y = phase01) layout(location = 5) in vec4 aUVRect; layout(location = 6) in vec2 aCosSin; #include "_graphics_uniforms.glsl" #include "_billboard.glsl" out vec2 vTexCoord; out vec4 vColor; // billboard.vert's view-facing expansion, minus fog — the color carries params, not light void main() { vec3 world = billboardWorld(aPos, aQuadPos, aCosSin, aSize); gl_Position = u_viewProjection * vec4(world, 1.0); vTexCoord = mix(aUVRect.xy, aUVRect.zw, aTexCoord); vColor = aColor; }