Displays are abstracted to allow support for any VR device. The display manager uses a generic surface description that allows for any projection surface. Currently, we use VR Juggler with projection-based system such as the C2 or CAVE. It also has support for HMDs. By using a generic display description, we can configure an application to run on nearly any VR display device.
For some types of display devices, it is necessary to change the way the application behaves. Currently we are investigating ways to allow application to change behavior depending on the type of the device the display is set for.
Input is abstracted through proxies. The proxies provide the application with a uniform interface to all devices. The application developer never directly interacts with the physical devices, or the specific input classes that control them. New devices can quickly be added by deriving a new class to manage the new device. Once this class exists, applications can immediately begin to take advantage of it.
The proxy system gives VR Juggler much of its run-time flexibility. The physical device classes can be moved around, removed, restarted, or replaced without affecting the application. The proxies themselves remain the same, even when the underlying devices are changed.
VjControl offers an easy-to-use interface for reconfiguring, restarting, and replacing devices and displays at run-time. This allows users to interactively reconfigure a VR system while an application is running. The ability to reconfigure at run-time increases the robustness of applications because it allows devices to fail without taking down the entire application.
VR Juggler includes built-in performance monitoring capabilities. These include the ability to accumulate data about time spent by various processes, performance data for the underlying graphics hardware (as available), and measure tracker latency (the time between generation of tracker data and the display of data generated from the tracker data). VjControl can display the performance data at run-time or the performance data can be captured and analyzed later.
The environment manager allows users to dynamically reconfigure the system at run-time in an attempt to optimize performance. When the user changes the VR system configuration, the performance effects will be immediately visible with the performance monitor.
VR Juggler is portable to all major platforms use for VR development. To maintain portability, all system specific needs (such as threads, shared memory, and synchronization) are encapsulated by abstract classes. The library only uses the abstract, uniform interface. This allows easy porting of the library to other platforms by replacing the system-specific classes derived from the abstract bases. Currently the library has support for SGI, Linux, and Windows NT.
The library allows extension without impacting the rest of the system or applications that have been previously written. Adding new devices of an already supported general type (such as new position inputs, or new displays) is simple and transparent to applications. This is because the library uses generic base class interfaces to interface with all objects in the system.