better dir-link visualization
[vrfileman] / sdr / chrome_font.p.glsl
diff --git a/sdr/chrome_font.p.glsl b/sdr/chrome_font.p.glsl
new file mode 100644 (file)
index 0000000..9817257
--- /dev/null
@@ -0,0 +1,52 @@
+uniform sampler2D tex;
+uniform float smoothness;
+uniform float height;
+uniform vec2 pix_sz;
+
+varying vec2 local_pt;
+
+void gradcurves(float t, out float over, out float under);
+
+#define HALF_PI 1.570796326794897
+
+void main()
+{
+       vec2 uv = gl_TexCoord[0].st;
+       float dist = texture2D(tex, uv).a;
+
+       float dfdu = texture2D(tex, uv + vec2(pix_sz.x, 0.0)).a - dist;
+       float dfdv = texture2D(tex, uv + vec2(0.0, pix_sz.y)).a - dist;
+       vec2 grad = normalize(vec2(dfdu, dfdv));
+
+       float glyph = smoothstep(0.47 - smoothness, 0.47 + smoothness, dist);
+       float outline = smoothstep(0.54 - smoothness, 0.54 + smoothness, dist);
+
+       // --- face gradients ---
+       float t = local_pt.y / height;
+
+       float c_over, c_under;
+       float tlow = min(2.0 * t, 1.0);
+       gradcurves(tlow, c_over, c_under);
+       vec3 color_low = vec3(c_over, c_under, c_over);
+
+       float thigh = max(2.0 * t - 1.0, 0.0);
+       gradcurves(thigh, c_over, c_under);
+       vec3 color_high = vec3(c_under, c_under, c_over);
+
+       vec3 color = mix(color_low, color_high, step(0.5, t));
+
+       // --- bevel gradients ---
+       float bv_shade = mod(1.0 * dot(grad, normalize(vec2(0.1, 1.0))) * 0.5 + 0.5, 1.0);
+
+       gradcurves(1.0 - bv_shade, c_over, c_under);
+       vec3 bv_col = vec3(c_under, c_under, c_over);
+
+       gl_FragColor.rgb = mix(bv_col, color, outline);
+       gl_FragColor.a = glyph;
+}
+
+void gradcurves(float t, out float over, out float under)
+{
+       over = cos(t * HALF_PI);
+       under = cos(t * HALF_PI + HALF_PI) + 1.0;
+}