Subj : src/doors/syncconquer/door/door_io.c To : Git commit to main/sbbs/master From : Rob Swindell (on Debian Linux) Date : Tue Jul 14 2026 21:04:15 https://gitlab.synchro.net/main/sbbs/-/commit/d9d8d36916532df76f9616c2 Modified Files: src/doors/syncconquer/door/door_io.c Log Message: syncconquer: Phase-2 dirty-rect JXL rendering (~2.5x bandwidth cut) On the JXL tier, only re-send the parts of the map that actually changed between frames instead of re-encoding the whole 640x400 canvas every time. Each changed frame is diffed against the previous one at 16x16-tile granularity; the dirty tiles are coalesced into a small set of tight bounding boxes (4-connected component labeling plus a short-gap merge pass), and each box is shipped as its own pixel-positioned JXL blob (DrawJXLBlob) that composites in place over the retained frame. A frame that changes too much (>= DR_FALLBACK_PCT of tiles) or produces too many boxes falls back to a normal full-frame encode, as does the first frame, a palette change, or any fit/geometry change. Live-measured on real play this drops a moving map from 50+ KB/frame to under 20 KB/frame. The path is gated by a data//dirtyrect flag that is re-checked about every 1.5s, so it can be toggled on and off mid- session without relaunching the door. Stats bar (Ctrl-S) tweaks that go with it: KB/f now reports the recent windowed per-frame cost (from the ~1s bits/s + fps windows) instead of the lifetime cumulative average, so toggling dirty-rect shows an immediate drop; and the redundant cell-size field was removed and KB/f moved to the front of the row so it no longer gets chopped. Co-Authored-By: Claude Opus 4.8 (1M context) --- þ Synchronet þ Vertrauen þ Home of Synchronet þ [vert/cvs/bbs].synchro.net .