The open source OpenXR runtime
0
fork

Configure Feed

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

st/oxr: Expose local_floor if extension enabled and space is supported

+25 -3
+10
src/xrt/state_trackers/oxr/oxr_api_space.c
··· 44 44 case XR_REFERENCE_SPACE_TYPE_VIEW: 45 45 case XR_REFERENCE_SPACE_TYPE_LOCAL: 46 46 case XR_REFERENCE_SPACE_TYPE_STAGE: return XR_SUCCESS; 47 + case XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT: 48 + #ifdef OXR_HAVE_EXT_local_floor 49 + if (sys->inst->extensions.EXT_local_floor) { 50 + return XR_SUCCESS; 51 + } 52 + #endif 53 + return oxr_error( 54 + log, XR_ERROR_VALIDATION_FAILURE, 55 + "(%s == XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT) is only valid if XR_EXT_local_floor is enabled", 56 + field_name); 47 57 default: break; 48 58 } 49 59
+1 -1
src/xrt/state_trackers/oxr/oxr_objects.h
··· 1276 1276 uint32_t blend_mode_count; 1277 1277 XrEnvironmentBlendMode blend_modes[3]; 1278 1278 1279 - XrReferenceSpaceType reference_spaces[3]; 1279 + XrReferenceSpaceType reference_spaces[4]; 1280 1280 uint32_t reference_space_count; 1281 1281 1282 1282 //! Cache of the last known system roles, see @xrt_system_roles::generation_id
+1 -1
src/xrt/state_trackers/oxr/oxr_space.c
··· 92 92 case OXR_SPACE_TYPE_ACTION: return get_xrt_space_action(log, spc, out_xspace); 93 93 case OXR_SPACE_TYPE_REFERENCE_VIEW: xspace = spc->sess->sys->xso->semantic.view; break; 94 94 case OXR_SPACE_TYPE_REFERENCE_LOCAL: xspace = spc->sess->sys->xso->semantic.local; break; 95 - case OXR_SPACE_TYPE_REFERENCE_LOCAL_FLOOR: xspace = NULL; break; 95 + case OXR_SPACE_TYPE_REFERENCE_LOCAL_FLOOR: xspace = spc->sess->sys->xso->semantic.local_floor; break; 96 96 case OXR_SPACE_TYPE_REFERENCE_STAGE: xspace = spc->sess->sys->xso->semantic.stage; break; 97 97 case OXR_SPACE_TYPE_REFERENCE_UNBOUNDED_MSFT: xspace = spc->sess->sys->xso->semantic.unbounded; break; 98 98 case OXR_SPACE_TYPE_REFERENCE_COMBINED_EYE_VARJO: xspace = NULL; break;
+13 -1
src/xrt/state_trackers/oxr/oxr_system.c
··· 194 194 * Reference space support. 195 195 */ 196 196 197 - static_assert(3 <= ARRAY_SIZE(sys->reference_spaces), "Not enough space in array"); 197 + static_assert(4 <= ARRAY_SIZE(sys->reference_spaces), "Not enough space in array"); 198 198 199 199 if (sys->xso->semantic.view != NULL) { 200 200 sys->reference_spaces[sys->reference_space_count++] = XR_REFERENCE_SPACE_TYPE_VIEW; ··· 203 203 if (sys->xso->semantic.local != NULL) { 204 204 sys->reference_spaces[sys->reference_space_count++] = XR_REFERENCE_SPACE_TYPE_LOCAL; 205 205 } 206 + 207 + #ifdef OXR_HAVE_EXT_local_floor 208 + if (sys->inst->extensions.EXT_local_floor) { 209 + if (sys->xso->semantic.local_floor != NULL) { 210 + sys->reference_spaces[sys->reference_space_count++] = XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT; 211 + } else { 212 + oxr_warn(log, 213 + "XR_EXT_local_floor enabled but system doesn't support local_floor," 214 + " breaking spec by not exposing the reference space."); 215 + } 216 + } 217 + #endif 206 218 207 219 if (sys->xso->semantic.stage != NULL) { 208 220 sys->reference_spaces[sys->reference_space_count++] = XR_REFERENCE_SPACE_TYPE_STAGE;