radar-gi/shaders/line.vert
2024-07-10 15:49:05 +08:00

39 lines
866 B
GLSL

uniform vec2 resolution;
uniform float antialias;
layout() float thickness;
attribute vec2 p0, p1, uv;
varying float v_alpha, v_thickness;
varying vec2 v_p0, v_p1, v_p;
void main() {
if( abs(thickness) < 1.0 ) {
v_thickness = 1.0;
v_alpha = abs(thickness);
} else {
v_thickness = abs(thickness);
v_alpha = 1.0;
}
float t = v_thickness/2.0 + antialias;
float l = length(p1-p0);
float u = 2.0*uv.x - 1.0;
float v = 2.0*uv.y - 1.0;
// Screen space
vec2 T = normalize(p1-p0);
vec2 O = vec2(-T.y , T.x);
vec2 p = p0 + vec2(0.5,0.5) + uv.x*T*l + u*T*t + v*O*t;
gl_Position = vec4(2.0*p/resolution-1.0, 0.0, 1.0);
// Local space
T = vec2(1.0, 0.0);
O = vec2(0.0, 1.0);
p = uv.x*T*l + u*T*t + v*O*t;
v_p0 = vec2(0.0, 0.0);
v_p1 = vec2( l, 0.0);
v_p = p;
}