summaryrefslogtreecommitdiff
path: root/docs
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
commita007457cb007b03f310bca55c339e8cd5d9baafc (patch)
tree31e57644c6df2eef04fb3c2a200482571c6e6857 /docs
parent1ed34e1538f45daecc2c8a551dc0fb7aba5f3f54 (diff)
downloadpardes-a007457cb007b03f310bca55c339e8cd5d9baafc.tar.gz
pardes-a007457cb007b03f310bca55c339e8cd5d9baafc.zip
Ripple and Glitch are gone; Crt stays
The user tried them live and wants them removed entirely: the builtins, their levels, config keys and leader paths (tR, tg), their slots in the built-in chain, their shaders (source and prebuilt), EffectCode paths, and on macOS their scene flags (pardes.h), the Metal kernel's coordinate warps and the Swift pointer mapping that mirrored them. Docs say so (decision 8 in docs/render-pipeline.md); config.md documents Crt's levels, Shader and ShaderAnimation instead. Shared files touched: macos.zig (flags). Not touched: pardes.zig, Messages.zig, mouse.zig, gui.zig, detached/*.
Diffstat (limited to 'docs')
-rw-r--r--docs/config.md15
-rw-r--r--docs/design.typ5
-rw-r--r--docs/macos.md21
-rw-r--r--docs/render-pipeline.md19
-rw-r--r--docs/web.md2
5 files changed, 30 insertions, 32 deletions
diff --git a/docs/config.md b/docs/config.md
index 9c51f329..16fd59e5 100644
--- a/docs/config.md
+++ b/docs/config.md
@@ -513,18 +513,19 @@ immediately and remains the one authoritative geometry. DOM web intentionally
does not expose these builtins: its renderer is selectable HTML/CSS and has no
canvas or shader stage.
-The scene effects are independent switches and can be combined:
+The scene effect is `Crt`, at a level from 0 (off) to 3; `on` is 2:
```text
Crt
-Ripple
-Glitch
+Crt 3
```
-They share one full-scene shader pass in SDL and macOS. With all three off the
-pass is bypassed. CRT works in linear light with restrained scanlines, mask,
-bloom, curvature, and noise rather than remapping the theme to a strong fixed
-palette; Ripple and Glitch primarily perturb sample coordinates.
+The SDL GUI runs it as the bundled pass of its post chain, which also takes
+Shadertoy files written for ghostty (`Shader ~/crt.glsl`, `Shader off`), and
+`ShaderAnimation off|on|always` says when the chain animates on its own. With
+the chain empty the pass is bypassed. CRT works in linear light with restrained
+scanlines, mask, bloom and vignette, and no curvature, so clicks land where
+they are drawn.
`EffectCode PanelAscii` or `EffectCode Crt` lists the current backend's
build-embedded source paths under `/virtual`. Look opens each full file;
diff --git a/docs/design.typ b/docs/design.typ
index 234c3692..caa35b37 100644
--- a/docs/design.typ
+++ b/docs/design.typ
@@ -913,8 +913,9 @@ while its geometry moves and placed again on the last active sample.
SDL supplies old/new glyph data, diff flags, final/presented boxes, and effect
parameters to the glyph and native-image shaders. Pixel attachments bypass ASCII
because they have no character byte. macOS passes the same records across its
-plain C ABI and composites old/new panel images in Metal and Core Image. Scene
-`Crt`, `Ripple` and `Glitch` bits share one full-window pass in each native GUI.
+plain C ABI and composites old/new panel images in Metal and Core Image. The
+scene `Crt` is one full-window pass in each native GUI; the SDL GUI's post
+chain also runs Shadertoy files (`Shader`).
DOM web is a separate platform, not a shader GUI: retaining selectable HTML and
CSS is more important than duplicating the renderer in canvas, so it exposes
diff --git a/docs/macos.md b/docs/macos.md
index e104d3a6..5166e2d5 100644
--- a/docs/macos.md
+++ b/docs/macos.md
@@ -102,8 +102,8 @@ asking for a thin insert caret instead of a block. `Surface.images` crosses
separately as `pardes_frame_images` / `pardes_frame_image_list` — see "Pixel
attachments" below.
-`pardes_scene` is the matching full-window snapshot: a bit each for CRT,
-ripple, and glitch, plus the 60 Hz time/frame that animates them. It is returned
+`pardes_scene` is the matching full-window snapshot: a bit for CRT, plus the
+60 Hz time/frame that animates it. It is returned
by value, so the renderer never holds a pointer into live core state. A zero
flags word is also the fast-path contract: draw the CoreText frame directly.
@@ -662,8 +662,7 @@ longer leaves a dark titlebar over a cream grid.
## Scene effects
-`Crt`, `Ripple`, and `Glitch` are three switches over one postprocess, not three
-stacked filters. Their canonical macOS source is `shaders/crt.ci.metal`, which
+`Crt` is one full-window postprocess. Its canonical macOS source is `shaders/crt.ci.metal`, which
the build installs as `pardes.app/Contents/Resources/crt.ci.metal`. The Swift
shell loads that exact asset with `CIKernel.kernels(withMetalString:)` and runs
it through a `CIContext` created from the system Metal device. The source is
@@ -673,14 +672,12 @@ The ordinary CoreText/attachment/cursor pass is one function. With any scene
bit or panel track it targets a retained, backing-scale bitmap; kernels then
sample the complete frame into the flipped view. PDFs, image panes, taglines,
rules, and the caret therefore receive the same effect. With every bit off and
-no panel track the bitmap and Core Image context are bypassed entirely. Ripple
-and glitch alter sample coordinates only, preserving theme colors; CRT works
+no panel track the bitmap and Core Image context are bypassed entirely. CRT works
in linear light with restrained bloom, scan/mask, vignette, hum, and noise
instead of applying a broad color remap.
The scene kernel alone receives a `clampedToExtent` image and the final output
-is cropped back to the original finite extent. Coordinate tears and chroma
-samples therefore clamp to the edge exactly like SDL's scene sampler instead
+is cropped back to the original finite extent. Chroma samples therefore clamp to the edge exactly like SDL's scene sampler instead
of acquiring transparent-black seams from Core Image's finite source image.
The Zig side owns the clock. `pardes_animation_tick` increments its wrapped
@@ -689,8 +686,8 @@ from that integer. Input bursts cannot accelerate the shader.
Pointer input follows the same destination-to-source transform as the last
presented scene frame before it is divided by the cell metrics. The view keeps
-that exact `pardes_scene_s` snapshot and mirrors the Metal barrel, ripple and
-glitch sampling arithmetic in `ScenePostprocessor.sourcePoint`; pixels outside
+that exact `pardes_scene_s` snapshot and mirrors the Metal barrel arithmetic
+in `ScenePostprocessor.sourcePoint`; pixels outside
the CRT tube have no cell. The resulting displayed-grid cell then reaches the
core, whose panel-track mapping resolves it to canonical pane content.
@@ -716,8 +713,8 @@ while `pardesComposedInCore` effects only clip the already-composed core cells;
pixel attachments have no character value and pass through unchanged.
Because the input is the finished bitmap rather than a glyph-only
batch, backgrounds, glyphs, taglines, rules, the caret, PDF pages, and image
-panes move and dissolve together. Scene CRT/ripple/glitch runs once after the
-panel composition.
+panes move and dissolve together. The scene CRT runs once after the panel
+composition.
With no scene bit and no panel track the retained bitmap, Core Image context,
and Metal passes are bypassed. `EffectCode Panel*` links to this Metal
diff --git a/docs/render-pipeline.md b/docs/render-pipeline.md
index 2fd6045b..7c94fbea 100644
--- a/docs/render-pipeline.md
+++ b/docs/render-pipeline.md
@@ -505,16 +505,14 @@ Mirror ghostty 1.3.2 (`zig-pkg/ghostty-*/src/renderer/shadertoy.zig`,
`custom-shader-animation`): off = redraw only when content changes; on =
continuous while the window is focused; always = continuous. Continuous means
the shell redraws its retained Surface (3.1), never a core tick or render.
-- **Existing crt/ripple/glitch** become bundled Shadertoy files in
- `shaders/post/` selected by the same builtins (decision 2: kept, polished);
- `scene_effects` and `crt.frag.glsl`/`crt.zig` are deleted. Each bundled pass
- takes a level, `Crt 0..3` (0 off, `on` the default 2, `off` and bare still
- work), passed as `pardesLevel`: 2 is the polished rewrite, 3 at least as
- strong as the old effects (pixels changed by more than 8 in a channel,
- against a plain frame: Crt 18.3% vs 17.4% old, Ripple 11.1% vs 9.5%, Glitch
- 9.3% a frame vs 8.1%); a Glitch level raises how often it slips as well as
- how hard. The chain is
- `Crt`, `Ripple`, `Glitch` and `Shader <path>` in the order they were put in
+- **Existing crt** becomes a bundled Shadertoy file in `shaders/post/` under
+ the same builtin; `scene_effects` and `crt.frag.glsl`/`crt.zig` are deleted.
+ It takes a level, `Crt 0..3` (0 off, `on` the default 2, `off` and bare
+ still work), passed as `pardesLevel`: 2 is the polished rewrite, 3 at least
+ as strong as the old CRT (pixels changed by more than 8 in a channel against
+ a plain frame: 18.3% vs 17.4%). Ripple and Glitch were rewritten too, then
+ removed at the user's word after a live look (decision 8). The chain is
+ `Crt` and `Shader <path>` in the order they were put in
(`Shader off` empties it of files), `ShaderAnimation off|on|always`
(default on). The core keeps no clock for it: level A redraws are the
shell's.
@@ -905,3 +903,4 @@ goldens; ssh/tty byte budgets; wire version bump breaks mixed-version attach.
5. The animation pacing fix goes into the no-visual-change phase.
6. Cursor blink is on by default.
7. The bundled CRT has no barrel distortion, so clicks stay exact.
+8. (After trying them live) Ripple and Glitch are removed entirely; Crt stays.
diff --git a/docs/web.md b/docs/web.md
index 3a68f958..bbbed8a3 100644
--- a/docs/web.md
+++ b/docs/web.md
@@ -42,7 +42,7 @@ shells, and two comptime capability flags say so once each. It exposes no
`PanelAscii`, `PanelVertical`, `PanelEdges`, `PanelFall`, `PanelWave`,
`PanelCurtain`, `PanelScramble`, `PanelType`) because
`capabilities.panel_transitions` is `pardes.hosted`, and no
-`Crt`/`Ripple`/`Glitch` because `capabilities.scene_shaders` is
+`Crt` or `Shader` because `capabilities.scene_shaders` is
`platform == .gui or platform == .macos` (`builtins.capabilities`; the words
themselves carry those availabilities in `config.Runtime.settings`).
Applying either faithfully would require a second canvas renderer and give up