openvr icon indicating copy to clipboard operation
openvr copied to clipboard

SteamVR OpenXR runtime can't find Eye Trackers when calling xrGetSystemProperties

Open JZott opened this issue 9 months ago • 2 comments

I am developing an OpenXR application that uses a custom built OpenGL graphics engine (so no Unreal or Unity) and SteamVR as runtime. Currently I am trying to integrate eye tracking via the XR_EXT_eye_gaze_interaction extension. When using Varjo OpenXR runtime together with a Varjo XR3 HMD everything works out perfectly fine. (Note: in the following code snippet mb_ExtensionEyeGazeSupported is of course always true)

XrResult e_Result;

XrSystemProperties st_SystemProperties{ XR_TYPE_SYSTEM_PROPERTIES };
XrSystemEyeGazeInteractionPropertiesEXT st_EyeGazeProperties{XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT};
if (mb_ExtensionEyeGazeSupported)
        st_SystemProperties.next = &st_EyeGazeProperties;
e_Result = xrGetSystemProperties(mp_XrInstance, mp_XrSystem, &st_SystemProperties);
if (e_Result != XrResult::XR_SUCCESS)
        return false;

However when using SteamVR as runtime the very same code base can't find the attached eye trackers and st_EyeGazeProperties.supportsEyeGazeInteraction always remains false regardless of what HMD I use (tested with Varjo XR3, VIVE Focus 3 with attached VIVE Eye Tracker). The returned result is XR_SUCCESS nonetheless.

All gaze related actions and spaces are created, initialized and activated correctly later on but obviously can never recieve any real data input so the resulting pose is always equal to identity. With Varjo runtime this also works out perfectly and I recieve gaze data correctly.

Are there any specifics to the SteamVR implementations of the OpenXR runtime or XR_EXT_eye_gaze_interaction extension? As things are working with Varjo I believe my code base should be fine in principle. Any suggestions or ideas are welcome at this point. If more code snippets are required please let me know. Thanks for helping!

JZott avatar Mar 13 '25 09:03 JZott

Hi, Currently, the only driver that supports XR_EXT_eye_gaze_interaction is Steam Link when using the Quest Pro, as we've yet to publish the interface for other drivers to be able to implement the extension. We're hoping to soon but don't have an exact timeline.

Thanks.

danwillm avatar Mar 13 '25 15:03 danwillm

Varjo XR-3 eye tracking works only in Varjo's OpenXR runtime atm, also it requires XR_VARJO_foveated_rendering (afaik) for it to work, also you are required to call xrLocateSpace with XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO space in order to get eye tracking location (it seems to internally call varjo_GetGazeData), eye tracking doesn't seem to work otherwise.

all500234765 avatar Jun 10 '25 19:06 all500234765

Chiming in that OpenXR's supportsEyeGazeInteraction always returns false in Godot when running SteamVR, even though I can successfully retrieve eye tracking pose data via the XR_EXT_eye_gaze_interaction extension implemented by the Vive Console for SteamVR beta's OpenXR API layers when using my Vive Pro Eye.

recursivenomad avatar Dec 12 '25 22:12 recursivenomad