Overlay in HDR
- ImGui draws sRGB colours, and the overlay wrote them straight into the
game's HDR buffer, where they came out far too bright and washed out.
The DX12 backend's pixel shader now converts them: to scRGB for an FP16
buffer, and to HDR10 (BT.2020, PQ) for a 10-bit buffer while the display
is in HDR, with white at 200 nits. An SDR buffer is drawn as before.
- The log says which was chosen ("Overlay output: ..."), and now also says
when the game presents in a format the overlay does not draw to, which
left its menus hidden with no reason given.
- Not seen on an HDR display. The changed shader compiles with the D3D
compiler.
DualSense
- While a menu holds the game's input, the reports the game reads from a
PlayStation pad are rewritten as untouched. USB and Bluetooth lay a
report out differently, and the two were told apart by the size of the
buffer the game read into. A USB DualSense read into a larger buffer had
its d-pad byte written as "up", which placed a session marker whenever T
or Insert opened something. The device's own report length decides now.
- The log line for the first rewritten report gives the pad, USB or
Bluetooth, the report and the two lengths.
- Not tested with a DualSense.
Launcher
- The controller pointer learned where the right stick rests while no pad
was being read, which includes the launcher being in the background, and
took the middle for it. A stick that rests off the middle, or a wheel or
throttle on that axis, then steered the pointer for good once the
launcher had the focus again, and the mouse stopped responding until a
restart. Nothing is learned while no pad is read, and a pad that goes
away gives the pointer back. Two tests for it.
Item search
- The cosmetic search bar showed in the world: a grid keeps its focused
item after its screen has gone. It needs the game's menu to be up, and
to have been for a second, as well.
- The trackpad pointer follows the whole swipe; Steam stops the tilt when
the thumb lifts, so nothing has to be cut off.
- Up and down stay inside the mod lists and leave a row from any of its
parts (tick, switch, buttons) in one press.
- Left from anywhere in a list reaches the nearest rail tile, BACK included.
- The focus no longer falls back to a tab when ImGui lets go of a row the
list only partly shows.
- The focus starts on PLAY when the launcher opens with a pad connected, and
on the open tab (GAME, MY MODS) when the pad opens Settings or the Mod
manager.
- List rows act as one item: up and down go from row to row in one press,
and a row's buttons take the focus only from the row (D-pad right).
- D-pad left and right between the rail and a list: ImGui looks to the side
only along a thin band through the focus and missed items level with the
gap between two rows, so a side move that finds nothing looks again across
the focus's full height.
- The left stick scrolls the panel under the pointer directly instead of
through wheel events, which queued behind the pointer's moves.
- On a Steam Deck (SteamDeck=1) the right stick gets a trackpad's feel: small
swipes move the pointer, and the glide after the thumb lifts is cut.
ImGui 1.91 moves the focus with the D-pad only; its left stick scrolls the
focused window, which under a pointer is usually the page itself. The stick
also handed the screen from the pointer to the focus, so scrolling flipped
between the two.
The launcher now scrolls itself: the nearest scrollable panel around the
focus while the focus is shown, else the panel under the pointer or the
mouse (as wheel notches). Scrolling no longer switches between them.
- Settings' and Mods' rails, pages and lists are NavFlattened children, so
the D-pad crosses between them instead of treating each as one item that
only B could leave.
- The pad's pointer no longer moves the system cursor. Under Proton that
move came back late as a mouse move and dropped the pointer; now a mouse
move counts only when it lands somewhere new.
- The first R3 only shows the pointer, so a stray click does not press
whatever the mouse last rested on.
The launcher read no controller at all. Started from Steam (Desktop or Game
Mode on a Steam Deck), Steam Input applies the game's gamepad layout to it,
where the right trackpad is the right stick and its click is R3, so the
trackpad did nothing; only the touch screen, which arrives as mouse
messages, worked.
- Every XInput pad is merged (Xbox, Steam Input's virtual pad), else a
DualShock 4 / DualSense is read over HID with the reader the in-game menu
already uses, now its own library (dingosdk_playstation_input).
- D-pad and left stick move ImGui's focus, outlined in the launcher's blue;
A / Cross presses. The hand-drawn tiles, switches and menu buttons take
part in navigation (ImGuiButtonFlags_EnableNav).
- B / Circle closes an open combo or menu and leaves a text field, and is
Escape otherwise, which the launcher's pages already go back on. Escape
now also closes the mod overviews and answers Cancel in the uninstall and
replace confirmations; closing an overview no longer also leaves the page.
- The right stick (the trackpad) moves a pointer that ImGui draws, and R3
(the trackpad's click) is the left button. The system cursor follows it;
a mouse move or a touch elsewhere takes the pointer back.
- The ImGui Win32 backend's own gamepad code (slot 0 only) is compiled out
so it cannot fight the launcher's events; nothing else used it.