The open source OpenXR runtime
0
fork

Configure Feed

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

st/oxr: Implement xrGetReferenceSpaceBoundsRect

authored by

Yu Li and committed by
Simon Zeni
6f35a3a5 143ff5a0

+45 -5
+2 -5
src/xrt/state_trackers/oxr/oxr_api_space.c
··· 155 155 struct oxr_session *sess; 156 156 struct oxr_logger log; 157 157 OXR_VERIFY_SESSION_AND_INIT_LOG(&log, session, sess, "xrGetReferenceSpaceBoundsRect"); 158 + OXR_VERIFY_SESSION_NOT_LOST(&log, sess); 158 159 OXR_VERIFY_ARG_NOT_NULL(&log, bounds); 159 160 160 161 ret = is_reference_space_type_valid(&log, sess->sys, "referenceSpaceType", referenceSpaceType); ··· 167 168 return ret; 168 169 } 169 170 170 - bounds->width = 0.0; 171 - bounds->height = 0.0; 172 - 173 - // Silently return that the bounds aren't available. 174 - return XR_SPACE_BOUNDS_UNAVAILABLE; 171 + return oxr_space_get_reference_bounds_rect(&log, sess, referenceSpaceType, bounds); 175 172 } 176 173 177 174 XRAPI_ATTR XrResult XRAPI_CALL
+17
src/xrt/state_trackers/oxr/oxr_conversions.h
··· 136 136 return XRT_SPACE_REFERENCE_TYPE_INVALID; 137 137 } 138 138 139 + static inline enum xrt_reference_space_type 140 + xr_ref_space_to_xrt(XrReferenceSpaceType space_type) 141 + { 142 + switch (space_type) { 143 + case XR_REFERENCE_SPACE_TYPE_VIEW: return XRT_SPACE_REFERENCE_TYPE_VIEW; 144 + case XR_REFERENCE_SPACE_TYPE_LOCAL: return XRT_SPACE_REFERENCE_TYPE_LOCAL; 145 + case XR_REFERENCE_SPACE_TYPE_LOCAL_FLOOR_EXT: return XRT_SPACE_REFERENCE_TYPE_LOCAL_FLOOR; 146 + case XR_REFERENCE_SPACE_TYPE_STAGE: return XRT_SPACE_REFERENCE_TYPE_STAGE; 147 + case XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT: return XRT_SPACE_REFERENCE_TYPE_UNBOUNDED; 148 + 149 + case XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO: return XRT_SPACE_REFERENCE_TYPE_INVALID; 150 + case XR_REFERENCE_SPACE_TYPE_LOCALIZATION_MAP_ML: return XRT_SPACE_REFERENCE_TYPE_INVALID; 151 + case XR_REFERENCE_SPACE_TYPE_MAX_ENUM: return XRT_SPACE_REFERENCE_TYPE_INVALID; 152 + } 153 + 154 + return XRT_SPACE_REFERENCE_TYPE_INVALID; 155 + } 139 156 140 157 /* 141 158 *
+6
src/xrt/state_trackers/oxr/oxr_objects.h
··· 830 830 struct oxr_space **out_space); 831 831 832 832 XrResult 833 + oxr_space_get_reference_bounds_rect(struct oxr_logger *log, 834 + struct oxr_session *sess, 835 + XrReferenceSpaceType referenceSpaceType, 836 + XrExtent2Df *bounds); 837 + 838 + XrResult 833 839 oxr_space_reference_create(struct oxr_logger *log, 834 840 struct oxr_session *sess, 835 841 const XrReferenceSpaceCreateInfo *createInfo,
+20
src/xrt/state_trackers/oxr/oxr_space.c
··· 23 23 #include "oxr_chain.h" 24 24 #include "oxr_pretty_print.h" 25 25 #include "oxr_conversions.h" 26 + #include "oxr_xret.h" 26 27 27 28 #include <stdio.h> 28 29 #include <stdlib.h> ··· 159 160 *out_space = spc; 160 161 161 162 return XR_SUCCESS; 163 + } 164 + 165 + XrResult 166 + oxr_space_get_reference_bounds_rect(struct oxr_logger *log, 167 + struct oxr_session *sess, 168 + XrReferenceSpaceType referenceSpaceType, 169 + XrExtent2Df *bounds) 170 + { 171 + struct xrt_compositor *xc = &sess->xcn->base; 172 + 173 + enum xrt_reference_space_type reference_space_type = xr_ref_space_to_xrt(referenceSpaceType); 174 + 175 + xrt_result_t xret = xrt_comp_get_reference_bounds_rect(xc, reference_space_type, (struct xrt_vec2 *)bounds); 176 + if (xret == XRT_ERROR_COMPOSITOR_FUNCTION_NOT_IMPLEMENTED || xret == XRT_SPACE_BOUNDS_UNAVAILABLE) { 177 + return XR_SPACE_BOUNDS_UNAVAILABLE; 178 + } 179 + OXR_CHECK_XRET(log, sess, xret, oxr_space_get_reference_bounds_rect); 180 + 181 + return oxr_session_success_result(sess); 162 182 } 163 183 164 184 XrResult