The open source OpenXR runtime
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

u/builders: Move setup tracking origin function here

+75 -64
+59 -2
src/xrt/auxiliary/util/u_builders.c
··· 7 7 * @ingroup aux_util 8 8 */ 9 9 10 - #include "xrt/xrt_prober.h" 11 - #include "u_builders.h" 10 + #include "xrt/xrt_tracking.h" 11 + 12 + #include "util/u_builders.h" 13 + 14 + 15 + /* 16 + * 17 + * Helper functions. 18 + * 19 + */ 20 + 21 + static void 22 + apply_offset(struct xrt_vec3 *position, struct xrt_vec3 *offset) 23 + { 24 + position->x += offset->x; 25 + position->y += offset->y; 26 + position->z += offset->z; 27 + } 12 28 13 29 14 30 /* ··· 75 91 } 76 92 } 77 93 } 94 + 95 + void 96 + u_builder_setup_tracking_origins(struct xrt_device *head, 97 + struct xrt_device *left, 98 + struct xrt_device *right, 99 + struct xrt_vec3 *global_tracking_origin_offset) 100 + { 101 + struct xrt_tracking_origin *head_origin = head ? head->tracking_origin : NULL; 102 + struct xrt_tracking_origin *left_origin = left ? left->tracking_origin : NULL; 103 + struct xrt_tracking_origin *right_origin = right ? right->tracking_origin : NULL; 104 + 105 + if (left_origin != NULL && left_origin->type == XRT_TRACKING_TYPE_NONE) { 106 + left_origin->offset.position.x = -0.2f; 107 + left_origin->offset.position.y = 1.3f; 108 + left_origin->offset.position.z = -0.5f; 109 + } 110 + 111 + if (right_origin != NULL && right_origin->type == XRT_TRACKING_TYPE_NONE) { 112 + right_origin->offset.position.x = 0.2f; 113 + right_origin->offset.position.y = 1.3f; 114 + right_origin->offset.position.z = -0.5f; 115 + } 116 + 117 + // Head comes last, because left and right may share tracking origin. 118 + if (head_origin != NULL && head_origin->type == XRT_TRACKING_TYPE_NONE) { 119 + // "nominal height" 1.6m 120 + head_origin->offset.position.x = 0.0f; 121 + head_origin->offset.position.y = 1.6f; 122 + head_origin->offset.position.z = 0.0f; 123 + } 124 + 125 + if (head_origin) { 126 + apply_offset(&head_origin->offset.position, global_tracking_origin_offset); 127 + } 128 + if (left_origin && left_origin != head_origin) { 129 + apply_offset(&left->tracking_origin->offset.position, global_tracking_origin_offset); 130 + } 131 + if (right_origin && right_origin != head_origin && right_origin != left_origin) { 132 + apply_offset(&right->tracking_origin->offset.position, global_tracking_origin_offset); 133 + } 134 + }
+11
src/xrt/auxiliary/util/u_builders.h
··· 77 77 size_t filter_count, 78 78 struct u_builder_search_results *results); 79 79 80 + /*! 81 + * Helper function for setting up tracking origins. Applies 3dof offsets for devices with XRT_TRACKING_TYPE_NONE. 82 + * 83 + * @ingroup aux_util 84 + */ 85 + void 86 + u_builder_setup_tracking_origins(struct xrt_device *head, 87 + struct xrt_device *left, 88 + struct xrt_device *right, 89 + struct xrt_vec3 *global_tracking_origin_offset); 90 + 80 91 81 92 #ifdef __cplusplus 82 93 }
-48
src/xrt/auxiliary/util/u_device.c
··· 373 373 } 374 374 } 375 375 376 - static void 377 - apply_offset(struct xrt_vec3 *position, struct xrt_vec3 *offset) 378 - { 379 - position->x += offset->x; 380 - position->y += offset->y; 381 - position->z += offset->z; 382 - } 383 - 384 - void 385 - u_device_setup_tracking_origins(struct xrt_device *head, 386 - struct xrt_device *left, 387 - struct xrt_device *right, 388 - struct xrt_vec3 *global_tracking_origin_offset) 389 - { 390 - if (head->tracking_origin->type == XRT_TRACKING_TYPE_NONE) { 391 - // "nominal height" 1.6m 392 - head->tracking_origin->offset.position.x = 0.0f; 393 - head->tracking_origin->offset.position.y = 1.6f; 394 - head->tracking_origin->offset.position.z = 0.0f; 395 - } 396 - 397 - if (left != NULL && left->tracking_origin->type == XRT_TRACKING_TYPE_NONE) { 398 - left->tracking_origin->offset.position.x = -0.2f; 399 - left->tracking_origin->offset.position.y = 1.3f; 400 - left->tracking_origin->offset.position.z = -0.5f; 401 - } 402 - 403 - if (right != NULL && right->tracking_origin->type == XRT_TRACKING_TYPE_NONE) { 404 - right->tracking_origin->offset.position.x = 0.2f; 405 - right->tracking_origin->offset.position.y = 1.3f; 406 - right->tracking_origin->offset.position.z = -0.5f; 407 - } 408 - 409 - struct xrt_tracking_origin *head_origin = head ? head->tracking_origin : NULL; 410 - struct xrt_tracking_origin *left_origin = left ? left->tracking_origin : NULL; 411 - struct xrt_tracking_origin *right_origin = right ? right->tracking_origin : NULL; 412 - 413 - if (head_origin) { 414 - apply_offset(&head_origin->offset.position, global_tracking_origin_offset); 415 - } 416 - if (left_origin && left_origin != head_origin) { 417 - apply_offset(&left->tracking_origin->offset.position, global_tracking_origin_offset); 418 - } 419 - if (right_origin && right_origin != head_origin && right_origin != left_origin) { 420 - apply_offset(&right->tracking_origin->offset.position, global_tracking_origin_offset); 421 - } 422 - } 423 - 424 376 void 425 377 u_device_get_view_pose(const struct xrt_vec3 *eye_relation, uint32_t view_index, struct xrt_pose *out_pose) 426 378 {
-11
src/xrt/auxiliary/util/u_device.h
··· 129 129 u_device_assign_xdev_roles(struct xrt_device **xdevs, size_t xdev_count, int *head, int *left, int *right); 130 130 131 131 /*! 132 - * Helper function for setting up tracking origins. Applies 3dof offsets for devices with XRT_TRACKING_TYPE_NONE. 133 - * 134 - * @ingroup aux_util 135 - */ 136 - void 137 - u_device_setup_tracking_origins(struct xrt_device *head, 138 - struct xrt_device *left, 139 - struct xrt_device *right, 140 - struct xrt_vec3 *global_tracking_origin_offset); 141 - 142 - /*! 143 132 * Helper function for `get_view_pose` in an HMD driver. 144 133 * 145 134 * Takes in a translation from the left to right eye, and returns a center to left or right eye transform that assumes
+3 -2
src/xrt/state_trackers/oxr/oxr_instance.c
··· 17 17 #include "util/u_misc.h" 18 18 #include "util/u_debug.h" 19 19 #include "util/u_git_tag.h" 20 + #include "util/u_builders.h" 20 21 21 22 #ifdef XRT_OS_ANDROID 22 23 #include "android/android_globals.h" ··· 317 318 debug_get_float_option_tracking_origin_offset_y(), 318 319 debug_get_float_option_tracking_origin_offset_z()}; 319 320 320 - u_device_setup_tracking_origins(dev, GET_XDEV_BY_ROLE(sys, left), GET_XDEV_BY_ROLE(sys, right), 321 - &global_tracking_origin_offset); 321 + u_builder_setup_tracking_origins(dev, GET_XDEV_BY_ROLE(sys, left), GET_XDEV_BY_ROLE(sys, right), 322 + &global_tracking_origin_offset); 322 323 323 324 // Sets the enabled extensions, this is where we should do any extra validation. 324 325 inst->extensions = *extensions;
+2 -1
src/xrt/state_trackers/steamvr_drv/ovrd_driver.cpp
··· 26 26 #include "os/os_time.h" 27 27 #include "util/u_debug.h" 28 28 #include "util/u_device.h" 29 + #include "util/u_builders.h" 29 30 #include "util/u_hand_tracking.h" 30 31 31 32 #include "xrt/xrt_system.h" ··· 1485 1486 1486 1487 // use steamvr room setup instead 1487 1488 struct xrt_vec3 offset = {0, 0, 0}; 1488 - u_device_setup_tracking_origins(m_xhmd, left_xdev, right_xdev, &offset); 1489 + u_builder_setup_tracking_origins(m_xhmd, left_xdev, right_xdev, &offset); 1489 1490 1490 1491 if (left_xdev) { 1491 1492 m_left = new CDeviceDriver_Monado_Controller(m_xinst, left_xdev, XRT_HAND_LEFT);