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
127namespace xr
128{
139} // namespace xr
140
141#undef DEFINE_PROC_MEMBER
142#undef GET_INSTANCE_PROC_ADDRESS
143#undef FOR_EACH_EXTENSION_FUNCTION
#define DEFINE_PROC_MEMBER(name)
#define FOR_EACH_EXTENSION_FUNCTION(_)
#define GET_INSTANCE_PROC_ADDRESS(name)
void PopulateDispatchTable(XrInstance instance)
FOR_EACH_EXTENSION_FUNCTION(DEFINE_PROC_MEMBER)