New plugins architecture for display and input


#1

We’ve just merged a large change into our master branch. This is the initial work for making input devices and output devices (displays) pluggable. Previously, we been using hard-coded support for a small set of devices like the Hydra, the Oculus Rift, 3D SBS displays, etc. However the approach was not scalable as it added complexity to the code every time we wanted to add a new device. Additionally, it meant that only devices that were supported in our codebase could be used.

The plugins change is meant to start addressing that. It creates an abstraction both for input devices (controllers) and output devices (displays and HMDs). This has allowed us to start adding support for upcoming hardware like the Vive display and wireless wands.

Right now the currently supported plugins are still part of the main application, but eventually we hope to mature this into a mechanism where we can scan a folder for DLLs and load them at runtime. Ideally this would enable non-Hifi developers to start building support for additional hardware without requiring us to merge it for it to work on production builds.

For now, the menus have changed slightly. There is a new ‘display’ menu with a mode sub-menu for selecting the active display plugin. The list of displayed plugins should automatically be populated with the supported devices for your system, depending on what hardware is connected. Currently the stereo display plugins are disabled because they’re not quite ready.