aboutsummaryrefslogtreecommitdiffstats
path: root/README.md
diff options
context:
space:
mode:
authorgbc dev <gbc@localhost>2026-07-04 22:39:34 +0200
committergbc dev <gbc@localhost>2026-07-04 22:39:34 +0200
commit894ddbe9bcf2bbd1da3af0429b6ed9550c0d4ce3 (patch)
tree4089a0c9bb2a1661f57564e3d2044fcb2df5d23e /README.md
parentdocs: note mem_timing-2 passing (diff)
downloadsl0pboy-894ddbe9bcf2bbd1da3af0429b6ed9550c0d4ce3.tar.gz
sl0pboy-894ddbe9bcf2bbd1da3af0429b6ed9550c0d4ce3.tar.xz
sl0pboy-894ddbe9bcf2bbd1da3af0429b6ed9550c0d4ce3.zip
renderer: inter-frame diffing to minimize terminal output
Only cells that changed since the previous frame are redrawn, using cursor positioning to skip unchanged runs. Static screens write nothing after the first frame (~108x reduction on acid2). SIGWINCH forces a full repaint. Verified pixel-exact against the framebuffer (11520/11520 cells, 0 mismatch).
Diffstat (limited to 'README.md')
-rw-r--r--README.md7
1 files changed, 7 insertions, 0 deletions
diff --git a/README.md b/README.md
index dea2d5c..947211d 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,13 @@ codes and the Unicode upper-half-block trick (`▀`): each character cell packs
two vertical pixels (foreground = top pixel, background = bottom pixel),
giving a 160×144 GB screen in 160×72 terminal cells.
+To keep terminal load low, output is minimized two ways: SGR color escapes
+are only emitted when the fg/bg changes, and **inter-frame diffing** redraws
+only the cells that changed since the previous frame (jumping over unchanged
+runs with `ESC[row;colH`). A fully static screen writes nothing after the
+first frame; on the acid2 screens this cut output from ~7.1 MB to ~65 KB
+over 2 s (~108×). Terminal resize (`SIGWINCH`) triggers a full repaint.
+
## Build & run
```sh