[package] name = "punktfunk-client-windows" description = "Native Windows punktfunk/1 client — WinUI 3 (windows-reactor) shell, D3D11/SwapChainPanel present, FFmpeg decode, WASAPI audio, SDL3 gamepads" version.workspace = true edition.workspace = true rust-version.workspace = true license.workspace = true authors.workspace = true repository.workspace = true [[bin]] name = "punktfunk-client" path = "src/main.rs" # Everything is Windows-gated so `cargo build --workspace` stays green on Linux/macOS (the # other native clients live in clients/linux and clients/apple); on other # platforms this builds as a stub binary. Mirrors the Linux client's cfg(target_os="linux") # gating exactly. [target.'cfg(windows)'.dependencies] # The protocol core, linked directly (no C ABI) — same as the GTK Linux client. NativeClient # is Sync (mutexed plane receivers), so it drops into a UI app cleanly. punktfunk-core = { path = "../../crates/punktfunk-core", features = ["quic"] } # WinUI 3 UI via windows-reactor (a declarative React-like framework backed by WinUI). Its # `build.rs` downloads the Windows App SDK NuGets and stages the bootstrap DLL + resources.pri # next to the exe; it requires `CARGO_WORKSPACE_DIR` to be set in the build env. Unpublished # (version 0.0.0) and fast-moving, so pinned to a verified commit. windows-reactor = { git = "https://github.com/microsoft/windows-rs", rev = "b4129fcc1ae81eec8bf1217539883db821bca3a1" } # Win32 / Direct3D11 / DXGI for the SwapChainPanel composition swapchain. Pulled from the SAME # windows-rs commit as windows-reactor so their `windows-core` unifies — the `IDXGISwapChain1` # we hand to `SwapChainPanelHandle::set_swap_chain` must satisfy reactor's `windows_core::Interface`. windows = { git = "https://github.com/microsoft/windows-rs", rev = "b4129fcc1ae81eec8bf1217539883db821bca3a1", features = [ "Win32_Foundation", "Win32_Graphics_Dxgi", "Win32_Graphics_Dxgi_Common", "Win32_Graphics_Direct3D", "Win32_Graphics_Direct3D11", "Win32_Graphics_Direct3D_Fxc", "Win32_Graphics_Gdi", "Win32_System_Console", "Win32_System_LibraryLoader", "Win32_UI_Input_KeyboardAndMouse", "Win32_UI_WindowsAndMessaging", ] } # Video decode (same FFmpeg pin as the host/Linux client) — software HEVC on the GPU-less dev # box; D3D11VA hardware decode is a follow-up for the real-GPU box. ffmpeg-next = "8" opus = "0.3" # Audio render + mic capture (the WASAPI analogue of the Linux client's PipeWire backend). wasapi = "0.23" # Gamepads: capture + feedback (full DualSense fidelity needs hidapi). SDL3 is cross-platform; # built from source via the bundled CMake on Windows (no system SDL3). sdl3 = { version = "0.18", features = ["build-from-source", "hidapi"] } mdns-sd = "0.20" async-channel = "2" serde = { version = "1", features = ["derive"] } serde_json = "1" anyhow = "1" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] }