VTK  9.2.6
XrExtensions.h
Go to the documentation of this file.
1 // Copyright (c) Microsoft Corporation.
2 // Licensed under the MIT License.
3 
4 // File took from :
5 // https://github.com/microsoft/OpenXR-MixedReality/blob/main/shared/XrUtility/XrExtensions.h
6 // This file is useful to load OpenXR extension function pointers
7 
8 #pragma once
9 
10 #ifdef XR_USE_PLATFORM_WIN32
11 #define FOR_EACH_WIN32_EXTENSION_FUNCTION(_) _(xrConvertWin32PerformanceCounterToTimeKHR)
12 #else
13 #define FOR_EACH_WIN32_EXTENSION_FUNCTION(_)
14 #endif
15 
16 #ifdef XR_USE_GRAPHICS_API_D3D11
17 #define FOR_EACH_D3D11_EXTENSION_FUNCTION(_) _(xrGetD3D11GraphicsRequirementsKHR)
18 #else
19 #define FOR_EACH_D3D11_EXTENSION_FUNCTION(_)
20 #endif
21 
22 #ifdef XR_USE_GRAPHICS_API_OPENGL
23 #define FOR_EACH_OPENGL_EXTENSION_FUNCTION(_) _(xrGetOpenGLGraphicsRequirementsKHR)
24 #else
25 #define FOR_EACH_OPENGL_EXTENSION_FUNCTION(_)
26 #endif
27 
28 #if XR_KHR_visibility_mask
29 #define FOR_EACH_VISIBILITY_MASK_FUNCTION(_) _(xrGetVisibilityMaskKHR)
30 #else
31 #define FOR_EACH_VISIBILITY_MASK_FUNCTION(_)
32 #endif
33 
34 #ifdef XR_MSFT_controller_model
35 #define FOR_EACH_CONTROLLER_MODEL_EXTENSION_FUNCTION(_) \
36  _(xrGetControllerModelKeyMSFT) \
37  _(xrLoadControllerModelMSFT) \
38  _(xrGetControllerModelPropertiesMSFT) \
39  _(xrGetControllerModelStateMSFT)
40 #else
41 #define FOR_EACH_CONTROLLER_MODEL_EXTENSION_FUNCTION(_)
42 #endif
43 
44 #if XR_MSFT_perception_anchor_interop && defined(XR_USE_PLATFORM_WIN32)
45 #define FOR_EACH_PERCEPTION_ANCHOR_INTEROP_FUNCTION(_) \
46  _(xrCreateSpatialAnchorFromPerceptionAnchorMSFT) \
47  _(xrTryGetPerceptionAnchorFromSpatialAnchorMSFT)
48 #else
49 #define FOR_EACH_PERCEPTION_ANCHOR_INTEROP_FUNCTION(_)
50 #endif
51 
52 #if XR_MSFT_spatial_anchor
53 #define FOR_EACH_SPATIAL_ANCHOR_FUNCTION(_) \
54  _(xrCreateSpatialAnchorMSFT) \
55  _(xrCreateSpatialAnchorSpaceMSFT) \
56  _(xrDestroySpatialAnchorMSFT)
57 #else
58 #define FOR_EACH_SPATIAL_ANCHOR_FUNCTION(_)
59 #endif
60 
61 #if XR_EXT_hand_tracking
62 #define FOR_EACH_HAND_TRACKING_FUNCTION(_) \
63  _(xrCreateHandTrackerEXT) \
64  _(xrDestroyHandTrackerEXT) \
65  _(xrLocateHandJointsEXT)
66 #else
67 #define FOR_EACH_HAND_TRACKING_FUNCTION(_)
68 #endif
69 
70 #if XR_MSFT_hand_tracking_mesh
71 #define FOR_EACH_HAND_TRACKING_MESH_FUNCTION(_) \
72  _(xrCreateHandMeshSpaceMSFT) \
73  _(xrUpdateHandMeshMSFT)
74 #else
75 #define FOR_EACH_HAND_TRACKING_MESH_FUNCTION(_)
76 #endif
77 
78 #if XR_MSFT_spatial_graph_bridge
79 #define FOR_EACH_SPATIAL_GRAPH_BRIDGE_FUNCTION(_) _(xrCreateSpatialGraphNodeSpaceMSFT)
80 #else
81 #define FOR_EACH_SPATIAL_GRAPH_BRIDGE_FUNCTION(_)
82 #endif
83 
84 #if XR_MSFT_scene_understanding_preview2
85 #define FOR_EACH_SCENE_UNDERSTANDING_FUNCTION(_) \
86  _(xrCreateSceneObserverMSFT) \
87  _(xrDestroySceneObserverMSFT) \
88  _(xrCreateSceneMSFT) \
89  _(xrDestroySceneMSFT) \
90  _(xrComputeNewSceneMSFT) \
91  _(xrGetSceneComputeStateMSFT) \
92  _(xrGetSceneComponentsMSFT) \
93  _(xrLocateSceneComponentsMSFT) \
94  _(xrGetSceneMeshBuffersMSFT)
95 #else
96 #define FOR_EACH_SCENE_UNDERSTANDING_FUNCTION(_)
97 #endif
98 
99 #if XR_MSFT_scene_understanding_serialization_preview
100 #define FOR_EACH_SCENE_UNDERSTANDING_SERIALIZATION_FUNCTION(_) \
101  _(xrDeserializeSceneMSFT) \
102  _(xrGetSceneSerializedDataMSFT)
103 
104 #else
105 #define FOR_EACH_SCENE_UNDERSTANDING_SERIALIZATION_FUNCTION(_)
106 #endif
107 
108 #define FOR_EACH_EXTENSION_FUNCTION(_) \
109  FOR_EACH_WIN32_EXTENSION_FUNCTION(_) \
110  FOR_EACH_OPENGL_EXTENSION_FUNCTION(_) \
111  FOR_EACH_D3D11_EXTENSION_FUNCTION(_) \
112  FOR_EACH_VISIBILITY_MASK_FUNCTION(_) \
113  FOR_EACH_HAND_TRACKING_FUNCTION(_) \
114  FOR_EACH_HAND_TRACKING_MESH_FUNCTION(_) \
115  FOR_EACH_SPATIAL_GRAPH_BRIDGE_FUNCTION(_) \
116  FOR_EACH_SPATIAL_ANCHOR_FUNCTION(_) \
117  FOR_EACH_CONTROLLER_MODEL_EXTENSION_FUNCTION(_) \
118  FOR_EACH_PERCEPTION_ANCHOR_INTEROP_FUNCTION(_) \
119  FOR_EACH_SCENE_UNDERSTANDING_FUNCTION(_) \
120  FOR_EACH_SCENE_UNDERSTANDING_SERIALIZATION_FUNCTION(_)
121 
122 #define GET_INSTANCE_PROC_ADDRESS(name) \
123  (void)xrGetInstanceProcAddr( \
124  instance, #name, reinterpret_cast<PFN_xrVoidFunction*>(const_cast<PFN_##name*>(&name)));
125 #define DEFINE_PROC_MEMBER(name) PFN_##name name{ nullptr };
126 
127 namespace xr
128 {
130 {
132 
133  ExtensionDispatchTable() = default;
134  void PopulateDispatchTable(XrInstance instance)
135  {
137  }
138 };
139 } // namespace xr
140 
141 #undef DEFINE_PROC_MEMBER
142 #undef GET_INSTANCE_PROC_ADDRESS
143 #undef FOR_EACH_EXTENSION_FUNCTION
FOR_EACH_EXTENSION_FUNCTION(DEFINE_PROC_MEMBER)
#define DEFINE_PROC_MEMBER(name)
Definition: XrExtensions.h:125
#define GET_INSTANCE_PROC_ADDRESS(name)
Definition: XrExtensions.h:122
void PopulateDispatchTable(XrInstance instance)
Definition: XrExtensions.h:134