feat(mirada): zwp_linux_dmabuf — clientes que pintan por GPU
Fase 1 del plan «shell»: para que carmen pueda hospedar a `shuma-shell` (y a cualquier app GPUI o navegador acelerado) hace falta que los clientes con GPU puedan compartir su búfer de vídeo. carmen sólo hablaba `wl_shm` (búferes de software) — por eso `foot` corría pero las apps GPUI salían en negro. - `App` lleva un `DmabufState`; `impl DmabufHandler` con `dmabuf_imported` que acepta el búfer (el `GlesRenderer` ya importa DMA-BUF al componer, vía `ImportAll`, así que la validación real ocurre al pintar). - `delegate_dmabuf!(App)`. - `announce_dmabuf` crea el global con los formatos de `dmabuf_formats()` del renderer — se llama en ambos backends una vez creado el renderer. Pendiente del plan: Fase 2 (`wlr-layer-shell`) y Fase 3 (modo launcher de `shuma-shell` — barra + input + cajón de resultados). Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -710,6 +710,9 @@ pub fn run() -> Result<(), Box<dyn Error>> {
|
||||
// 7 · El estado Wayland (Cerebro, teclado, keymap, control).
|
||||
println!("[7/8] armando el estado Wayland …");
|
||||
let Setup { mut display, mut app, keymap_path, keymap_watch, ctl } = crate::build_app()?;
|
||||
// Con el renderer ya creado, anuncia dmabuf — sin esto las apps que
|
||||
// pintan por GPU (GPUI, navegadores acelerados) no pueden conectarse.
|
||||
crate::announce_dmabuf(&mut app, &display.handle(), &renderer);
|
||||
// La salida del Cerebro = el modo del monitor.
|
||||
let ev = app.body.add_output(0, mode_w as i32, mode_h as i32);
|
||||
app.brain_feed(ev);
|
||||
|
||||
Reference in New Issue
Block a user