graphics: equal-z images stack in a different order from kitty and can reorder on reattach #155
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis#155
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Overlapping images at the same z stack in a different order from kitty, and the order can change on reattach.
kitty sorts visible image refs by
(z_index, image internal_id, ref internal_id)(kitty/graphics.c, theltcomparator before theQSORTofrender_data). Internal ids increase in creation order, with three properties a client mirror cannot reconstruct today:free_image_resourceson the existingImageand keeps itsinternal_id(handle_add_command).compose_image_rehydrate(crates/felis-daemon/src/serve/streaming.rs) replays images inImageStore::iter_ids()order and all direct placements before all virtual ones, so a fresh client shadow sees a different arrival order from the live one.felis instead orders equal-z draws by client-shadow arrival order: direct placements first, then placeholder tiles in cell row-major order. Differing z stacks correctly; only exact ties diverge.
Matching kitty needs creation-order metadata on the wire (or a rehydrate order that reconstructs it), so it is a protocol change rather than a renderer fix. Once the placement layout is shared in
felis-client-core, the fix lands in that one function for every frontend.A test should render two overlapping equal-z images live and after reattach, and after re-transmitting the older one, and compare against kitty.