@@ -75,7 +75,9 @@ FullBodyTrackerPicoImpl::FullBodyTrackerPicoImpl(const OpenXRSessionHandles& han
7575 }
7676 if (!body_tracking_props.supportsBodyTracking )
7777 {
78- throw std::runtime_error (" Body tracking not supported by this system" );
78+ std::cerr << " [FullBodyTrackerPico] Body tracking not supported by this system, running in limp mode"
79+ << std::endl;
80+ return ;
7981 }
8082 }
8183 else
@@ -90,12 +92,6 @@ FullBodyTrackerPicoImpl::FullBodyTrackerPicoImpl(const OpenXRSessionHandles& han
9092 loadExtensionFunction (handles.instance , handles.xrGetInstanceProcAddr , " xrLocateBodyJointsBD" ,
9193 reinterpret_cast <PFN_xrVoidFunction*>(&pfn_locate_body_joints_));
9294
93- if (!pfn_create_body_tracker_ || !pfn_destroy_body_tracker_ || !pfn_locate_body_joints_)
94- {
95- throw std::runtime_error (" Failed to get body tracking function pointers" );
96- }
97-
98- // Create body tracker for full body joints (24 joints)
9995 XrBodyTrackerCreateInfoBD create_info{ XR_TYPE_BODY_TRACKER_CREATE_INFO_BD };
10096 create_info.next = nullptr ;
10197 create_info.jointSet = XR_BODY_JOINT_SET_FULL_BODY_JOINTS_BD;
@@ -111,11 +107,9 @@ FullBodyTrackerPicoImpl::FullBodyTrackerPicoImpl(const OpenXRSessionHandles& han
111107
112108FullBodyTrackerPicoImpl::~FullBodyTrackerPicoImpl ()
113109{
114- // pfn_destroy_body_tracker_ should never be null (verified in constructor)
115- assert (pfn_destroy_body_tracker_ != nullptr && " pfn_destroy_body_tracker must not be null" );
116-
117110 if (body_tracker_ != XR_NULL_HANDLE)
118111 {
112+ assert (pfn_destroy_body_tracker_ != nullptr && " pfn_destroy_body_tracker must not be null" );
119113 pfn_destroy_body_tracker_ (body_tracker_);
120114 body_tracker_ = XR_NULL_HANDLE;
121115 }
@@ -125,6 +119,12 @@ bool FullBodyTrackerPicoImpl::update(XrTime time)
125119{
126120 last_update_time_ = time;
127121
122+ if (body_tracker_ == XR_NULL_HANDLE)
123+ {
124+ tracked_.data .reset ();
125+ return true ;
126+ }
127+
128128 XrBodyJointsLocateInfoBD locate_info{ XR_TYPE_BODY_JOINTS_LOCATE_INFO_BD };
129129 locate_info.next = nullptr ;
130130 locate_info.baseSpace = base_space_;
0 commit comments