39 lines
866 B
GLSL
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;
|
|
} |