-
v0.10.4: volume slider + XInput multi-DLL fallback
release / Build Windows .zip (push) Canceled after 0sreleased this
2026-06-01 22:10:09 +03:00 | 33 commits to main since this releaseVolume control (item #2):
internal/audio/volume_windows.go — IAudioEndpointVolume off the
default render endpoint (IMMDevice.Activate). Exposed
GetVolume / StepUp(n) / StepDown(n) / SetMute as App methods.
Step-based rather than absolute-set because
SetMasterVolumeLevelScalar takes a float in XMM1 which
syscall.SyscallN can't target without inline assembly; the
Step* variants take only (this, ctx*) so they work via the
existing callVTable helper. One step ≈ 2% (driver-defined).Frontend VolumePicker.tsx — full-screen modal, 21-segment
horizontal bar visualising current step/stepCount + percentage,
hot orange on the top 4 segments as a "loud" cue. Controller:
←→ ±1 step, LB/RB ±5 steps, A toggles mute, ↑ unmutes (matches
VK_VOLUME_UP), ↓ mutes, B/Esc closes.Wired into DevicesMenu as a 4th tile (🔊 Громкость). Grid
re-flowed to 4 columns.XInput multi-DLL fallback (item #1, palliative):
internal/controller/xinput_windows.go — probe ALL three XInput
DLL versions on init (1_4 / 1_3 / 9_1_0) plus the
undocumented ordinal-100 XInputGetStateEx export from 1_3 (same
XINPUT_STATE struct, also reports the Guide button). Try them
in order on every poll until ONE backend reports a connected
controller; stick with that (backend, slot) pair until it
disconnects.Background: Moonlight / Sunshine ViGEm virtual gamepads
sometimes register as XInput-class but only respond to specific
XInput DLL versions, or only to GetStateEx. Without this the
user had to launch Steam (Steam Input woke the slot) before
GameSaver saw the pad. We now probe all four entry points.This is a palliative — the proper fix is a Windows.Gaming.Input
fallback (WinRT API, also covers DualSense and other non-Xbox
controllers natively). Saving for v0.11.0 with its own ADR
because WinRT plumbing from Go is a substantial chunk
(~400 LOC) that wants its own design pass.Co-Authored-By: Claude Opus 4.7 (1M context) noreply@anthropic.com
Downloads