ValveSoftware / openvr

OpenVR SDK
http://steamvr.com
BSD 3-Clause "New" or "Revised" License
6.07k stars 1.28k forks source link

How to get raw input? #1655

Open Flutterish opened 2 years ago

Flutterish commented 2 years ago

I'm writing an app which uses the new input system, but I would also like to have access to raw input, so the users can bind controller buttons and such to custom game mode actions (which are loaded at runtime, so I have no way to define them in the action manifest). I thought using Prop_SupportedButtons_Uint64 and GetControllerState would provide me that, but it seems they reflect the actions defined in my action manifest. In a new project, I didn't declare any manifest, but steamVR still loaded its "legacy bindings", which resulted in 4 buttons on my controller. However, if done very quickly, before the first call to GetControllerState and before the default manifest loads, Prop_SupportedButtons_Uint64 gives me 6 buttons, presumably the raw ones (because there are 6 physical button-like elements on my controller), so I assume what I ask for is possible, but I can't find how to do it.

Rectus commented 2 years ago

The new input system is intentionally designed to not allow raw access to inputs. The idea seems to be that any rebinding is done through the SteamVR menu. If I remember right, once you load the manifest, it will disable the legacy input system in favor for the new one.

Flutterish commented 2 years ago

That's a shame. So I guess what I have to do is provide a new action set with a bunch optional actions, which then could be bound to the dynamically loaded game mode actions by the user in my own binding menu. Ideally I wouldn't have to use this new set and just reuse the standard actions such as clicking or vector2 scrolling, but you can't really predict what custom game modes might need.

Rectus commented 2 years ago

Yeah, having a set of optional actions is probably the best solution. This seems to be a big limitation with abstracted inputs like this, both with SteamVR and OpenXR.