hand_origin is confusing because it implies it is the origin of the coordinate system the hand is in.
It actually is the hand pose in the "global" coordinate system.
This commit is a band aid until a more proper room setup is implemented.
It allows moving the tracking offset for the device roles head, left and right by a fixed value.
A y tracking offset OXR_TRACKING_ORIGIN_OFFSET_Y=1.0 would tell monado that the current tracking
origin is 1 meter above the desired tracking origin, e.g. when the headset was calibrated to a
(0,0,0) position while sitting on table 1 meter above the floor.
This environment variable affects STAGE space, but not LOCAL space.
Rename XRT_FEATURE_OPENXR_LAYER_EQUIRECT_LEGACY to XRT_FEATURE_OPENXR_LAYER_EQUIRECT1.
Use correct define in verify_equirect1_layer function.
Rename equirect to equirect1.
meson: enable equirect1 by default.
Monado now calculates OpenHMD viewport dimensions and offsets correctly, we can pass those through.
The rotation of the rendered texture is performed with the distortion function.
v2: Use rotation matrix multiplication for distortion rotation
v3:
targets: Add Monado-SteamVR driver target
st/ovrd: Add OpenVR driver header
build: Factor out sdl hack into lib_sdl2_hack and update steamvr build
build: Revert lib_sdl2_refactor
steamvr: Emulate Index Controller by default
steamvr: Use oxr_handle_destroy instead of exposing oxr_instance_destroy
steamvr: don't use oxr internals
steamvr: communicate 3dof tracking to steamvr
steamvr: use util functions for device assignment and tracking origin setup
steamvr: Install plugin to <prefix>/share/steamvr-monado
steamvr: Use thread for updating poses every 1ms
Makes a big difference for the Index @144Hz on the vive driver.
Still somewhat choppy on survive driver - prediction should solve it.
Main-author: Christoph Haag <christoph.haag@collabora.com>
Co-author: Jakob Bornecrantz <jakob@collabora.com>
The compositor now moves immediately to visible/focused when polling.
The state tracker will generate relevant openxr state changes once the session is synchronized.
Properly working alternative to e03ee48dce (reverted in e7643de8db)
The application synchronizes its frame loop by "by calling xrWaitFrame,
xrBeginFrame and xrEndFrame in a loop."
Applications can discard frames by not calling xrEndFrame. If initial
frames are discarded, we should not consider the frame loop synchronized.
Previously a sequence like
xrBeginFrame, xrWaitFrame, xrBeginFrame, xrWaitFrame, xrPollEvent, xrBeginFrame
failed because xrPollEvent the compositor emitted transitions to visible
and focused but they were not emitted in the state tracker, because the
oxr session had not internally tranisitioned to the synchronized state.