diff --git a/CHANGELOG.md b/CHANGELOG.md index b0f4bcd..7c3c845 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -90,7 +90,7 @@ the round-trip metadata (width/height/format) so callers can confirm the protocol path works. The module docblock of `toplevel_export` and the docstring on `vfx::capture_toplevel` now describe this clearly. - Real pixel read is a follow-up after the gbm_bo_map work. + Real pixel read is shipped (commit `0ba3c59`) via a runtime dlopen of `libgbm.so.1`; setup needs no `libgbm-dev` build dep. - **T9 (overlay live render):** already shipped as part of the T7..T15 batch (). creates a wl_shm pool from a temp file containing pixels, diff --git a/README.md b/README.md index a0585b8..45c22b1 100644 --- a/README.md +++ b/README.md @@ -113,7 +113,7 @@ The GUI's **Teams** menu is the first thing to use when you have not configured | --- | --- | --- | | `ENBOXER_ALLOW_LAYOUT` | Permit `layout-apply`, swap, reset | unset = off | | `ENBOXER_ENABLE_OVERLAY` | Spawn the live `wlr-layer-shell` slot overlay | unset = stub (geometry + routing only) | -| `ENBOXER_ENABLE_TOPLEVEL` | Spawn the live `wlr_export_dmabuf_unstable_v1` capture path | unset = stub (grim fallback) | +| `ENBOXER_ENABLE_TOPLEVEL` | Spawn the live `wlr_export_dmabuf_unstable_v1` capture path | unset = grim fallback | `cargo test` and `enboxer doctor` never set these gates, so they cannot touch the user's Hyprland session. diff --git a/docs/MACROS.md b/docs/MACROS.md index 646dda8..6a1fa3b 100644 --- a/docs/MACROS.md +++ b/docs/MACROS.md @@ -1,6 +1,8 @@ # In-game macros (no addon, retail-shaped) -enBoxer only sends keystrokes. Bind these in WoW on **every** account. **The example profile targets retail (The War Within era, 2026).** Forever is not out yet, so the macro set is whatever current retail uses. If Interact with Target is missing on a client, the loot map will not walk or loot until a later helper (not shipped). +enBoxer only sends keystrokes. Bind these in WoW on **every** account. **The example profile targets retail (The War Within era, 2026).** + +If `Interact with Target` is missing on a particular client (private servers, classic, custom UIs that hide it), open the per-character macro override in the GUI and rebind `game_binds.interact` + `game_binds.ctm_on` / `ctm_off` to whatever those clients accept. The daemon's routing logic is unchanged; only the per-client WoW-side keybind changes. Match keys to `game_binds` in the profile. diff --git a/docs/VIDEO.md b/docs/VIDEO.md index 69511d1..a09d3d5 100644 --- a/docs/VIDEO.md +++ b/docs/VIDEO.md @@ -23,6 +23,6 @@ It is not a second monitor and not a window swap. The other client can sit behin The dispatcher in `src/vfx.rs::capture_for_source` checks `is_window_visible(monitors, client)`. If the source window sits on a visible output, `grim` captures it. If the window is covered and the operator has opted in to compositor-side capture (`ENBOXER_ENABLE_TOPLEVEL=1`), the dispatcher routes to `capture_toplevel` (zwlr_export_dmabuf_unstable_v1). With the gate off, covered windows fall through to `grim` and the operator sees whatever is currently on top of those pixels — exactly the previous behaviour. -So: keep the source window **on a visible output** for the default `grim` path. Set `ENBOXER_ENABLE_TOPLEVEL=1` when you want a stacked layout where some sources are fully covered by another; the live toplevel-export client is a follow-up and the dispatcher is ready for it. +So: keep the source window **on a visible output** for the default `grim` path. Set `ENBOXER_ENABLE_TOPLEVEL=1` when you want a stacked layout where some sources are fully covered by another; the live toplevel-export client reads pixels through `gbm_bo_map` (dlopen'd at runtime from `libgbm.so.1`) and writes a real RGBA8 PNG via the `png` crate. The overlay itself is an `mpv` window (`class: enboxer-vfx`) that reloads each `grim` frame.