18 struct SpatialGraphNodeBindingProperties {
20 XrPosef poseInNodeSpace;
23 inline void SetNodeId(XrSpatialGraphNodeSpaceCreateInfoMSFT& createInfo,
const GUID& guid) {
24#ifdef __STDC_LIB_EXT1__
25 memcpy_s(&createInfo.nodeId,
sizeof(createInfo.nodeId), &guid,
sizeof(guid));
27 memcpy(&createInfo.nodeId, &guid,
sizeof(guid));
31 inline const GUID& GetNodeIdAsGuid(
const XrSpatialGraphNodeBindingPropertiesMSFT& properties) {
32 return reinterpret_cast<GUID const&
>(properties.nodeId);
36 CreateSpatialGraphNodeSpace(XrSession session, XrSpatialGraphNodeTypeMSFT nodeType,
const GUID& nodeId,
const XrPosef& pose) {
37 XrSpatialGraphNodeSpaceCreateInfoMSFT spaceCreateInfo{XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT};
38 spaceCreateInfo.nodeType = nodeType;
39 spaceCreateInfo.pose = pose;
40 SetNodeId(spaceCreateInfo, nodeId);
42 CHECK_XRCMD(xrCreateSpatialGraphNodeSpaceMSFT(session, &spaceCreateInfo, space.
Put(xrDestroySpace)));
47 TryCreateSpatialGraphStaticNodeBinding(XrSession session, XrSpace space, XrPosef poseInSpace, XrTime time) {
49 XrSpatialGraphStaticNodeBindingCreateInfoMSFT createInfo{XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT};
50 createInfo.space = space;
51 createInfo.poseInSpace = poseInSpace;
52 createInfo.time = time;
54 xrTryCreateSpatialGraphStaticNodeBindingMSFT(session, &createInfo, nodeBinding.
Put(xrDestroySpatialGraphNodeBindingMSFT)));
58 inline SpatialGraphNodeBindingProperties GetSpatialGraphNodeBindingProperties(XrSpatialGraphNodeBindingMSFT nodeBinding) {
59 XrSpatialGraphNodeBindingPropertiesMSFT properties{XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT};
60 CHECK_XRCMD(xrGetSpatialGraphNodeBindingPropertiesMSFT(nodeBinding,
nullptr, &properties));
61 return {GetNodeIdAsGuid(properties), properties.poseInNodeSpace};
HandleType * Put(PFN_DestroyFunction destroyFunction) noexcept
The xr::DispatchTable struct contains all available PFN pointers to xr functions including those in a...