summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorskal <pascal.massimino@gmail.com>2026-02-16 23:54:15 +0100
committerskal <pascal.massimino@gmail.com>2026-02-16 23:54:15 +0100
commit340dd11c44077ac121f9da27752ae97b3b7566e8 (patch)
treeb19052b760b379718fc10497c41fa2e175ac7d96 /common
parent3b2bee705cfe5a250bb6049a90b5d734d3125f73 (diff)
fix: correct Heptagon effect rendering and SDF implementation
- Change draw call from 21 to 3 vertices (fullscreen triangle) - Replace broken folding-based SDF with IQ's atan-based regular polygon formula - Simplify test timeline to render Heptagon directly to sink - Reduce heptagon radius from 0.5 to 0.3 for better visibility The effect was not visible due to incorrect vertex count and broken SDF returning negative values everywhere (showing only fill color). Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Diffstat (limited to 'common')
-rw-r--r--common/shaders/heptagon.wgsl13
1 files changed, 6 insertions, 7 deletions
diff --git a/common/shaders/heptagon.wgsl b/common/shaders/heptagon.wgsl
index 3bfc59d..078978a 100644
--- a/common/shaders/heptagon.wgsl
+++ b/common/shaders/heptagon.wgsl
@@ -19,12 +19,11 @@ struct VertexOutput {
}
fn sdf_heptagon(p: vec2<f32>, r: f32) -> f32 {
- let k = vec3<f32>(0.868516, -0.495754, 0.357407);
- var p_abs = abs(p);
- p_abs -= 2.0 * k.xy * min(dot(k.xy, p_abs), 0.0);
- p_abs -= 2.0 * vec2<f32>(-k.x, k.y) * min(dot(vec2<f32>(-k.x, k.y), p_abs), 0.0);
- p_abs -= vec2<f32>(clamp(p_abs.x, -k.z * r, k.z * r), r);
- return length(p_abs) * sign(p_abs.y);
+ let an = 3.141593 / 7.0; // PI/7 for heptagon
+ let acs = vec2<f32>(cos(an), sin(an));
+ let bn = (atan2(p.x, p.y) % (2.0 * an)) - an;
+ let q = length(p) * vec2<f32>(cos(bn), abs(sin(bn)));
+ return length(q - r * acs) * sign(q.x - r * acs.x);
}
@fragment fn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {
@@ -39,7 +38,7 @@ fn sdf_heptagon(p: vec2<f32>, r: f32) -> f32 {
uv.x * s + uv.y * c
);
- let dist = sdf_heptagon(rot_uv, 0.5);
+ let dist = sdf_heptagon(rot_uv, 0.3);
let color = mix(vec3<f32>(0.2, 0.4, 0.8), vec3<f32>(1.0, 0.8, 0.2),
smoothstep(0.01, -0.01, dist));