Skyscraper 2.0
XrSpatialGraphBridge.h
Go to the documentation of this file.
1// Copyright (c) Microsoft Corporation.
2// Licensed under the MIT License.
3
4#pragma once
5
6#include <array>
7#include <optional>
8#include "XrStruct.h"
9#include "XrHandle.h"
10#include "XrGuid.h"
11
12namespace xr {
13 class SpatialGraphNodeBindingHandle : public xr::UniqueXrHandle<XrSpatialGraphNodeBindingMSFT> {};
14
15// GUID_DEFINED is defined in guiddef.h
16#ifdef GUID_DEFINED
17
18 struct SpatialGraphNodeBindingProperties {
19 GUID nodeId;
20 XrPosef poseInNodeSpace;
21 };
22
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));
26#else
27 memcpy(&createInfo.nodeId, &guid, sizeof(guid));
28#endif
29 }
30
31 inline const GUID& GetNodeIdAsGuid(const XrSpatialGraphNodeBindingPropertiesMSFT& properties) {
32 return reinterpret_cast<GUID const&>(properties.nodeId);
33 }
34
35 inline xr::SpaceHandle
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);
41 xr::SpaceHandle space;
42 CHECK_XRCMD(xrCreateSpatialGraphNodeSpaceMSFT(session, &spaceCreateInfo, space.Put(xrDestroySpace)));
43 return space;
44 }
45
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)));
55 return nodeBinding;
56 }
57
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};
62 }
63#endif // GUID_DEFINED
64} // namespace xr
#define CHECK_XRCMD(cmd)
Definition XrError.h:14
HandleType * Put(PFN_DestroyFunction destroyFunction) noexcept
Definition XrHandle.h:56
The xr::DispatchTable struct contains all available PFN pointers to xr functions including those in a...