summaryrefslogtreecommitdiff
path: root/shaders/ui.vert.glsl
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-28 16:44:51 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:15 -0300
commitdeeb8ac54f71d4322a778336db9a7aec411c23ce (patch)
treea1ccddd6dc7acf31a88a0d27153848b053ac10d1 /shaders/ui.vert.glsl
parent3267d276ab2553adb412183eb92390ed579b494f (diff)
downloadpardes-deeb8ac54f71d4322a778336db9a7aec411c23ce.tar.gz
pardes-deeb8ac54f71d4322a778336db9a7aec411c23ce.zip
G1: Lift, soft elevation shadows (off by default)
`Lift` (a GUI toggle, capability lift) lifts the focused pane on a critically damped spring (animation.Spring: closed form, about 240 ms to settle, velocity kept across retargets, settled = no frames) and floats notices. The core puts the lift on the regions (Region.lift, on the wire); the GUI casts from it: a soft shadow is decor, an erf rectangle on one quad grown by 3 sigma (decor.frag, flag 0x10000000), in the quad's own space so a track's transform carries it; darken-only, the caster's rect left alone, alpha pre-warped for linear light and IGN-dithered. Cast last in its group, so a neighbour's rails and rules darken with its text; a notice's before its rule. Strength is capped per theme so text over the darkest shadow keeps min(its contrast, 4.5) (test over the native themes). Opt-in until the focus lift/dim default is decided. Feel review material: docs/effects.md. Test-mode PARDES_TEST_SERIES keeps every captured frame. Shared files touched: pardes.zig (two fields, one nextWake line), detached/wire.zig (lift on the region), config.zig, builtins.zig (capability), gui.zig. Not touched: Messages.zig, mouse.zig, tty, host_io.
Diffstat (limited to 'shaders/ui.vert.glsl')
-rw-r--r--shaders/ui.vert.glsl8
1 files changed, 4 insertions, 4 deletions
diff --git a/shaders/ui.vert.glsl b/shaders/ui.vert.glsl
index c1779add..5551f3f1 100644
--- a/shaders/ui.vert.glsl
+++ b/shaders/ui.vert.glsl
@@ -14,9 +14,9 @@ layout(location = 3) in vec3 a_bg;
layout(location = 4) in vec4 a_panel_rect;
layout(location = 5) in vec4 a_present_rect;
// effect id, eased-progress float bits, pane serial, local row/column packed
-// into one uint. The THREE high effect bits are flags — the frozen-old cell
-// layer, a see-through cell background and an opaque block-cursor fill — so
-// the id is what is left below them; integer transport preserves the exact
+// into one uint. The FOUR high effect bits are flags — the frozen-old cell
+// layer, a see-through cell background, an opaque block-cursor fill and a
+// soft shadow (decor.frag.glsl) — so the id is what is left below them; integer transport preserves the exact
// cross-backend hash.
layout(location = 6) in uvec4 a_effect;
// A clip rectangle in target pixels (x0, y0, x1, y1): the fragment shader
@@ -61,7 +61,7 @@ void main() {
v_cell_uv = vec2(0.0, 1.0);
}
- uint effect = a_effect.x & 0x1fffffffu;
+ uint effect = a_effect.x & 0x0fffffffu;
if (effect == 1u || effect == 2u || effect == 5u) {
// NDC y points up, so a top-left/bottom-right box has a NEGATIVE y
// delta. Preserve that sign or every local y is mirrored/outside.