Currently applications can only send binding suggestions to the runtime at startup, and have no way of checking where an action is bound or modifying the binding. Input rebinding can only be done on the runtime, but currently most runtime vendors do not seem willing to provide support for rebinding interfaces.
This means there is no generalized way of guaranteeing that users will be able to change the bindings. The only guaranteed way to provide multiple bindings is to create multiple redundant actions, and let the user toggle between them inside the application. This in turn causes the settings to be split up into multiple locations when a runtime binding interface is available, and will add multiple versions of each action into the binding interface with no way for the user to tell if it is active or not. This all makes for a bad user experience.
I’d like to see support for being able to implement the binding interface on the application side. That way the application can provide a way to rebind actions that doesn’t require support for binding interfaces on the runtime.
For basic support it seems like it would require functions for retrieving and updating action bindings, as well as detecting if a runtime binding interface is supported and allow triggering a save on it. Ideally functions would also be provided for retrieving 2D graphics of the controllers, as well as enhanced controller render models with the ability to highlight individual controls and locations for displaying tool tips.
That would be a good solution if all runtime vendors were committed to implementing rebinding support. Currently there is no way on the application side to guarantee or check that the runtime has any rebinding support available.
I can think of two solutions to this, either enforcing rebinding support in a future version of the spec (which I’m guessing wouldn’t be very feasible), or creating an extension that indicates rebinding support is available.
For an extension it would also be useful to have functions for signaling the runtime to open the binding UI, and displaying tooltips of the current bindings on the controllers.
How do you feel about a fallback mode for such a library to do bindings in an API layer.
But there are multiple levels of difficulty.
Only modifying the suggested bindings before they get sent to the runtime is easy.
Doing actual rebinding live during the session is much more involved to get right, but it should be possible.