diff --git a/app/src/openxr/cpp/OpenXRInputSource.cpp b/app/src/openxr/cpp/OpenXRInputSource.cpp index 306df98829..e34aae9d31 100644 --- a/app/src/openxr/cpp/OpenXRInputSource.cpp +++ b/app/src/openxr/cpp/OpenXRInputSource.cpp @@ -795,17 +795,17 @@ void OpenXRInputSource::Update(const XrFrameState& frameState, XrSpace localSpac return; } + bool isControllerUnavailable = (poseLocation.locationFlags & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) == 0; + auto gotHandTrackingInfo = false; + auto handFacesHead = false; #if defined(PICOXR) // Pico does continuously track the controllers even when left alone. That's why we return - // always true so that we always check hand tracking just in case. - bool isControllerUnavailable = true; + // always true so that we always check hand tracking just in case (unless it's disabled). + bool mustAlwaysCheckHandTracking = handTrackingEnabled; #else - bool isControllerUnavailable = (poseLocation.locationFlags & XR_SPACE_LOCATION_ORIENTATION_VALID_BIT) == 0; + bool mustAlwaysCheckHandTracking = false; #endif - - auto gotHandTrackingInfo = false; - auto handFacesHead = false; - if (isControllerUnavailable || mUsingHandInteractionProfile) { + if (isControllerUnavailable || mUsingHandInteractionProfile || mustAlwaysCheckHandTracking) { if (!handTrackingEnabled) { delegate.SetEnabled(mIndex, false); return;