Skip to content

Commit 94f657d

Browse files
nvddrjiwenc-nv
authored andcommitted
Bypass body tracker if not supported by the runtime
1 parent e1e4956 commit 94f657d

1 file changed

Lines changed: 10 additions & 10 deletions

File tree

src/core/deviceio/cpp/full_body_tracker_pico.cpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

112108
FullBodyTrackerPicoImpl::~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

Comments
 (0)