remove support for FXRMotionControllerData on UE 5.7 as it has been obliterated by the upstream and apply necessary changes to make XR_EXT_hand_tracking work again on 5.7
This commit is contained in:
@@ -650,6 +650,10 @@ struct FSGXRTracker::FImpl
|
||||
|
||||
void BuildMotionSourceToKeypointMap();
|
||||
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7
|
||||
void CreateHandTracker(XrSession InSession, XrHandEXT HandEXT, FSGXRHandState& HandState) const;
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */
|
||||
|
||||
bool CanOutputTrackingData(EControllerHand Hand) const;
|
||||
|
||||
bool UpdateXRHandTrackingData(FSGXRHandState& OutHandState, const XrHandJointsLocateInfoEXT& LocateInfo) const;
|
||||
@@ -1478,6 +1482,7 @@ bool FSGXRTracker::GetHandTrackingState(
|
||||
OutHandTrackingState.HandKeyRadii,
|
||||
bTracked);
|
||||
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION < 7
|
||||
/// TODO
|
||||
// Begin backward compatibility with the deprecated function, remove this block along with the deprecated
|
||||
// GetAllKeypointStates.
|
||||
@@ -1494,6 +1499,7 @@ bool FSGXRTracker::GetHandTrackingState(
|
||||
// The inability to distinguish this is the reason for the deprecation.
|
||||
}
|
||||
// End backward compability.
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION < 7 */
|
||||
|
||||
if (!ensureAlwaysMsgf(
|
||||
!OutHandTrackingState.bValid
|
||||
@@ -1589,7 +1595,7 @@ bool FSGXRTracker::GetRequiredExtensions(TArray<const ANSICHAR*>& OutExtensions)
|
||||
}
|
||||
}
|
||||
|
||||
OutExtensions.Add("XR_EXT_hand_tracking");
|
||||
OutExtensions.Add(XR_EXT_HAND_TRACKING_EXTENSION_NAME);
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1638,21 +1644,29 @@ const void* FSGXRTracker::OnBeginSession(const XrSession InSession, const void*
|
||||
|
||||
// Create a hand tracker for the left hand that tracks default set of hand joints.
|
||||
FSGXRHandState& LeftHandState{Pimpl->GetLeftHandState()};
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7
|
||||
Pimpl->CreateHandTracker(InSession, XR_HAND_LEFT_EXT, LeftHandState);
|
||||
#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */
|
||||
{
|
||||
XrHandTrackerCreateInfoEXT CreateInfo{XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT};
|
||||
CreateInfo.hand = XR_HAND_LEFT_EXT;
|
||||
CreateInfo.handJointSet = XR_HAND_JOINT_SET_DEFAULT_EXT;
|
||||
XR_ENSURE(Pimpl->XRCreateHandTrackerEXT(InSession, &CreateInfo, &LeftHandState.HandTracker));
|
||||
}
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */
|
||||
|
||||
// Create a hand tracker for the right hand that tracks default set of hand joints.
|
||||
FSGXRHandState& RightHandState{Pimpl->GetRightHandState()};
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7
|
||||
Pimpl->CreateHandTracker(InSession, XR_HAND_RIGHT_EXT, RightHandState);
|
||||
#else /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */
|
||||
{
|
||||
XrHandTrackerCreateInfoEXT CreateInfo{XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT};
|
||||
CreateInfo.hand = XR_HAND_RIGHT_EXT;
|
||||
CreateInfo.handJointSet = XR_HAND_JOINT_SET_DEFAULT_EXT;
|
||||
XR_ENSURE(Pimpl->XRCreateHandTrackerEXT(InSession, &CreateInfo, &RightHandState.HandTracker));
|
||||
}
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */
|
||||
}
|
||||
|
||||
return InNext;
|
||||
@@ -2030,6 +2044,27 @@ void FSGXRTracker::FImpl::BuildMotionSourceToKeypointMap()
|
||||
RightHandSGMotionSourceName, FSGMotionSourceInfo(EHandKeypoint::Wrist, false));
|
||||
}
|
||||
|
||||
#if ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7
|
||||
void FSGXRTracker::FImpl::CreateHandTracker(XrSession InSession, XrHandEXT HandEXT, FSGXRHandState& HandState) const
|
||||
{
|
||||
XrHandTrackerCreateInfoEXT CreateInfo{XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT};
|
||||
CreateInfo.hand = HandEXT;
|
||||
CreateInfo.handJointSet = XR_HAND_JOINT_SET_DEFAULT_EXT;
|
||||
|
||||
IOpenXRHMD* OpenXRHMD{XRTrackingSystem ? XRTrackingSystem->GetIOpenXRHMD() : nullptr};
|
||||
if (OpenXRHMD)
|
||||
{
|
||||
TArray<IOpenXRExtensionPlugin*> ExtensionPlugins{OpenXRHMD->GetExtensionPlugins()};
|
||||
for (IOpenXRExtensionPlugin* Plugin : ExtensionPlugins)
|
||||
{
|
||||
CreateInfo.next = Plugin->OnCreateHandTracker(CreateInfo.next);
|
||||
}
|
||||
}
|
||||
|
||||
XR_ENSURE(XRCreateHandTrackerEXT(InSession, &CreateInfo, &HandState.HandTracker));
|
||||
}
|
||||
#endif /* ENGINE_MAJOR_VERSION >= 5 && ENGINE_MINOR_VERSION >= 7 */
|
||||
|
||||
bool FSGXRTracker::FImpl::CanOutputTrackingData(const EControllerHand Hand) const
|
||||
{
|
||||
const bool bFallbackToHandTrackingIfNoGloveDetected = ShouldFallbackToHandTrackingIfNoGloveDetected();
|
||||
|
||||
Reference in New Issue
Block a user