gldemo

Summary

The gldemo plugin serves as a stand-in for an actual application when ILLIXR is run as a standalone application without an actual OpenXR application. gldemo will subscribe to several Switchboard plugs, render a simple, hard-coded 3D scene (in fact, the same 3D scene that is included in the debugview plugin) and publish the results to the Switchboard API. gldemo is intended to be as lightweight as possible, serving as a baseline debug "dummy application". During development, it is useful to have some content being published to the HMD display without needing to use the full OpenXR interface; gldemo fills this requirement. As an important note, gldemo does not render stereoscopically; the two eye renders are rendered from the same position. This may be updated to render stereoscopically in the future, but is not seen as a critical feature as this is generally intended as a debugging tool.

Switchboard connection

gldemo subscribes to and publishes to several Switchboard plugs. Most notably, gldemo subscribes to the fast_pose plug, which (ideally) represents the most recent extrapolated pose. This connection represents an area of active development in ILLIXR, as we are replacing the pose subscription with an RPC-like proper pose prediction system. As of the time of writing, fast_pose is functionally identical to the slow_pose published by the SLAM system, but this will change when proper pose extrapolation is implemented. gldemo also pulls the correct graphics context from Phonebook.

gldemo publishes the rendered eyebuffers to the Switchboard system as well, using whichever eyebuffer format has been selected with the USE_ALT_EYE_FORMAT compile-time macro. The alternative eye format is more similar to the format used by Monado/OpenXR, and is more fully explained by the code comments.

Notes

gldemo does not pretend to be an OpenXR application; it does not use the OpenXR API, nor does it follow typical OpenXR patterns. It hooks directly into the Switchboard system and is intended as a debug/visualization tool. For more accurate and representative testing, consider running ILLIXR with an actual OpenXR application.

Known Issues

As noted above, gldemo does not actually render stereoscopically, and the two eye buffers are rendered from the same eye location. (This is not to say that the two eye buffers are not rendered separately; they are actually two separate drawcalls.) In addition, the quality of the pose used by gldemo is dependent on the upstream pose, which is currently not extrapolated/predicted and is subject to change.

Contributions

Contributions are welcome; please raise an issue first, though, as many issues are known and are a part of our existing internal backlog.