# Rendering
> M1: wgpu + glyphon text rendering.
> Full documentation in M3 (text pipeline) and M5 (3D mode).
## Current stack
- **GPU backend**: Metal (via `wgpu`)
- **Text**: `glyphon` (cosmic-text + swash + wgpu)
- **Font**: OCR A Extended by default, with the user's configured family passed through to `glyphon`
- **Pipeline**: Clear color → optional image background quad → cell/background rectangles → glyphon text → cursor overlay
- **Default look**: near-black base with bright blue accents, blue selection, and high-contrast light text
- **Color space**: configured hex colors are treated as sRGB and converted to linear values before GPU clear/rectangle output
## Background Images
The optional background image layer is intentionally small:
- Decoded once at startup from `appearance.background_image.path`.
- Downscaled on load using `max_dimension` before upload.
- Stored as one `Rgba8UnormSrgb` GPU texture.
- Rendered as a single textured quad behind the terminal grid.
- Supports `cover`, `contain`, and `stretch` fit modes.
This keeps idle cost at zero extra CPU and one extra draw call per frame when enabled.
## Planned milestones
| M2 | Color/attribute support per-cell |
| M3 | Dirty-region redraws, cached text runs |
| M5 | Optional 3D mode (perspective grid, pane depth) |