dotfiles_chezmoi/dot_config/ghostty/shaders/cash_money_frame.glsl
2026-07-13 15:12:44 -04:00

43 lines
1.4 KiB
GLSL

#define PI 3.141592653589793
float diamondAt(vec2 uv, vec2 c, float r) {
vec2 q = (uv - c) * vec2(iResolution.x / iResolution.y, 1.0);
return 1.0 - smoothstep(r * 0.20, r, abs(q.x) + abs(q.y));
}
void mainImage(out vec4 fragColor, in vec2 fragCoord) {
vec2 uv = fragCoord.xy / iResolution.xy;
vec4 base = texture(iChannel0, uv);
vec3 col = base.rgb;
float edgeD = min(min(uv.x, 1.0 - uv.x), min(uv.y, 1.0 - uv.y));
float frame = 1.0 - smoothstep(0.0, 0.055, edgeD);
float chrome = pow(
0.5 + 0.5 * sin((uv.x * 5.0 + uv.y * 3.0) * PI * 2.0 - iTime * 2.0),
3.0
);
float bead = pow(
0.5 + 0.5 * sin((uv.x + uv.y) * 120.0 + iTime * 1.7),
14.0
);
vec3 darkGold = vec3(0.23, 0.11, 0.02);
vec3 hotGold = vec3(1.00, 0.82, 0.30);
vec3 frameColor = mix(darkGold, hotGold, chrome);
col = mix(col, col + frameColor * (0.20 + 0.35 * bead), frame * 0.55);
// Big fake diamonds in the corners.
float corners = 0.0;
corners += diamondAt(uv, vec2(0.035, 0.045), 0.040);
corners += diamondAt(uv, vec2(0.965, 0.045), 0.040);
corners += diamondAt(uv, vec2(0.035, 0.955), 0.040);
corners += diamondAt(uv, vec2(0.965, 0.955), 0.040);
float twinkle = 0.75 + 0.25 * sin(iTime * 5.0);
col += corners * vec3(1.0, 0.90, 0.55) * twinkle * 0.80;
fragColor = vec4(clamp(col, 0.0, 1.0), base.a);
}