[package] name = "llimphi-hal" version.workspace = true edition.workspace = true license.workspace = true authors.workspace = true publish.workspace = true description = "Surface/device HAL for the llimphi UI framework (wgpu) — one scene tree across Wayland/X11/Win32/Android/bare-metal." repository.workspace = true [dependencies] wgpu = { workspace = true } raw-window-handle = { workspace = true } winit = { workspace = true } pollster = { workspace = true } # `dup2` para poner `/dev/null` en el descriptor 2 cuando `stderr` se rompe. # Ver `src/aviso.rs`: sin eso, el próximo `eprintln!` de CUALQUIER dependencia # vuelve a ser fatal. Nada más se usa de libc acá. [target.'cfg(unix)'.dependencies] libc = { workspace = true } # El sumidero de avisos en Android. `avisar!` escribe en `stderr`, y el `stderr` # de una app de Android no llega a ningún lado; el chasis instala # `android_logger`, que escucha a este crate. Ver `src/aviso.rs`. [target.'cfg(target_os = "android")'.dependencies] log = "0.4" [target.'cfg(target_arch = "wasm32")'.dependencies] # El `` al que se ata [`CanvasSurface`]. Sólo se usan los tipos DOM # mínimos: el elemento, sus atributos width/height y el `devicePixelRatio` de # la ventana. Nada de eventos ni de `requestAnimationFrame` — eso es del # eventloop (winit ya lo hace). web-sys = { version = "0.3", features = [ "Document", "Element", "HtmlCanvasElement", "Window", ] } # `webgl` habilita el backend GL de wgpu sobre WebGL2, el fallback para los # navegadores sin WebGPU (Safari viejo, Firefox sin flag). Va target-gated # para que el escritorio NO lo arrastre: allí el backend GL de Mesa tiene el # bug de teardown documentado en `Hal::new_inner`, y justamente por eso el # default de escritorio es `Backends::PRIMARY`. wgpu = { workspace = true, features = ["webgl"] } [target.'cfg(target_arch = "wasm32")'.dev-dependencies] # Sólo para el example `canvas_clear`: `spawn_local` (el arranque del `Hal` es # async y el main thread del navegador no se puede bloquear), `console` para el # log, y `JsCast` para bajar de `Element` a `HtmlCanvasElement`. wasm-bindgen = "0.2" wasm-bindgen-futures = "0.4" web-sys = { version = "0.3", features = ["console"] } [[example]] name = "clear_screen" path = "examples/clear_screen.rs" # El HAL del navegador. En targets nativos es un `main` que sólo avisa: así # `cargo check --workspace --examples` lo cubre sin romperse, y # `--target wasm32-unknown-unknown --examples` compila el camino real. [[example]] name = "canvas_clear" path = "examples/canvas_clear.rs"