summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
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