46 lines
1.3 KiB
GLSL
46 lines
1.3 KiB
GLSL
uniform sampler2D tex0;// signed distance
|
|
uniform vec4 skeletonColor;
|
|
uniform vec4 backgroundColor;
|
|
uniform vec4 foregroundColor;
|
|
uniform float angleTreshold;
|
|
|
|
in vec2 v_texCoord0;
|
|
|
|
out vec4 o_color;
|
|
|
|
void main() {
|
|
vec4 ct = texture(tex0, v_texCoord0);
|
|
vec2 cd = normalize(ct.xy);
|
|
vec2 step = 1.0 / vec2(textureSize(tex0, 0));
|
|
|
|
float minDistance = 1000.0;
|
|
|
|
vec4 nt = texture(tex0, v_texCoord0 + step * vec2(0.0, -1.0));
|
|
vec2 nd = normalize(nt.xy);
|
|
vec4 et = texture(tex0, v_texCoord0 + step * vec2(1.0, 0.0));
|
|
vec2 ed = normalize(et.xy);
|
|
vec4 wt = texture(tex0, v_texCoord0 + step * vec2(-1.0, 0.0));
|
|
vec2 wd = normalize(wt.xy);
|
|
vec4 st = texture(tex0, v_texCoord0 + step * vec2(0.0, 1.0));
|
|
vec2 sd = normalize(st.xy);
|
|
|
|
float d0 = dot(cd, nd);
|
|
float d1 = dot(cd, ed);
|
|
float d2 = dot(cd, wd);
|
|
float d3 = dot(cd, sd);
|
|
|
|
float r = (d0+d1+d2+d3);
|
|
|
|
vec4 fc = vec4(0.0);
|
|
|
|
if (ct.z > 0.0) {
|
|
fc += foregroundColor * foregroundColor.a;
|
|
} else {
|
|
fc += backgroundColor * backgroundColor.a;
|
|
}
|
|
|
|
if ((d0 < angleTreshold || d1 < angleTreshold || d2 < angleTreshold || d3 < angleTreshold) && ct.z > 0.0 && length(ct.xy) > 4.0) {
|
|
fc = fc * (1.0 - skeletonColor.a) + (skeletonColor * skeletonColor.a);
|
|
}
|
|
o_color = fc;
|
|
} |