31 lines
918 B
GLSL
31 lines
918 B
GLSL
in vec2 a_pos;
|
|
in float a_radius;
|
|
in vec2 a_flags;
|
|
|
|
uniform vec2 u_viewport_size;
|
|
|
|
out float v_radius;
|
|
out vec2 v_extrude;
|
|
out float v_collision;
|
|
|
|
void main() {
|
|
float radius = a_radius;
|
|
float collision = a_flags.x;
|
|
float vertexIdx = a_flags.y;
|
|
|
|
vec2 quadVertexOffset = vec2(
|
|
mix(-1.0, 1.0, float(vertexIdx >= 2.0)),
|
|
mix(-1.0, 1.0, float(vertexIdx >= 1.0 && vertexIdx <= 2.0)));
|
|
|
|
vec2 quadVertexExtent = quadVertexOffset * radius;
|
|
|
|
// Apply small padding for the anti-aliasing effect to fit the quad
|
|
// Note that v_radius and v_extrude are in screen coordinates already
|
|
float padding_factor = 1.2;
|
|
v_radius = radius;
|
|
v_extrude = quadVertexExtent * padding_factor;
|
|
v_collision = collision;
|
|
|
|
gl_Position = vec4((a_pos / u_viewport_size * 2.0 - 1.0) * vec2(1.0, -1.0), 0.0, 1.0) + vec4(quadVertexExtent * padding_factor / u_viewport_size * 2.0, 0.0, 0.0);
|
|
}
|