diff --git a/docs/guide_shaders_and_window.md b/docs/guide_shaders_and_window.md index 8739fea6..5c16f65f 100644 --- a/docs/guide_shaders_and_window.md +++ b/docs/guide_shaders_and_window.md @@ -42,9 +42,9 @@ The [NERV Technical Console](https://en.wikipedia.org/wiki/Nerv) theme (`src/the - **Black Void Palette:** Near-black backgrounds with sharp, high-contrast accents. - **Zero-Rounding Geometry:** No rounded corners on panels, buttons, or frames. Sharp rectangles. -- **CRT Scanlines:** A repeating horizontal line overlay applied via the `custom_background` callback. The scanline intensity is configurable via `config.toml` → `[nerv].scanline_alpha`. -- **Status Flickering:** The active tier indicator and other "operational status" elements flicker at a low frequency (configurable rate) to simulate a tactical display. -- **Alert Animations:** When MMA state transitions to "blocked" or "error", a red border pulse animation runs for ~1.5 seconds. +- **CRT Scanlines:** A repeating horizontal line overlay drawn into the foreground draw list by `CRTFilter.render(width, height)` in `src/theme_nerv_fx.py:8-65`. Alphas are hard-coded (0.08 major / 0.04 minor) — not config-driven. +- **Status Flickering:** `StatusFlicker.get_alpha()` in `src/theme_nerv_fx.py:67-73` returns a hard-coded 3.18 Hz sine (angular frequency 20.0 rad/s). Not wired into a production caller as of 2026-06-10. +- **Alert Animations:** `AlertPulsing.update(status)` at `src/theme_nerv_fx.py:79-83` activates the red border pulse for any `status.lower().startswith("error")`; the pulse persists for the duration of that status (no auto-decay). ### Implementation Files @@ -54,10 +54,10 @@ The [NERV Technical Console](https://en.wikipedia.org/wiki/Nerv) theme (`src/the ### Activation -The NERV theme is selected via the GUI's theme picker (User Menu → Theme → NERV). When activated, `theme_nerv.py` swaps the active color set, geometry style, and font. The FX layer is enabled/disabled via the `[nerv].fx_enabled` config flag. +The NERV theme is selected via the GUI's theme picker (NERV is one of the built-in syntax palettes in the multi-theme TOML system). When activated, `theme_nerv.apply_nerv()` swaps the active color set and zero-rounding geometry. The FX layer's `CRTFilter.enabled` is toggled per-frame by the caller of `theme_2.render_post_fx(crt_enabled=...)` — there is no `[nerv].fx_enabled` config key. ### Performance Considerations -CRT scanlines use the FBO pipeline and run at full window resolution. On a 1920×1080 display, the scanline pass adds ~1-2ms per frame. For lower-end GPUs, reduce `[nerv].scanline_alpha` (cheaper blending) or disable FX entirely (`[nerv].fx_enabled = false`). +CRT scanlines run at full window resolution via `CRTFilter.render()`'s draw-list calls (no FBO/shader pass in the current implementation). On a 1920×1080 display, the per-frame cost is on the order of 1-2ms. For lower-end GPUs, the only knob is `CRTFilter.enabled` (set by the caller of `theme_2.render_post_fx(crt_enabled=...)`); the scanline alpha and noise density are hard-coded in `src/theme_nerv_fx.py`. See [guide_nerv_theme.md](guide_nerv_theme.md) (placeholder; written in Task 10) for the full theme API, configuration keys, and customization options.