Skyscraper 2.0
XrExtensionContext.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 "XrEnumerate.h"
7
8namespace xr {
10 bool SupportsD3D11{false};
11 bool SupportsD3D12{false};
12 bool SupportsDepthInfo{false};
33
34 std::vector<const char*> EnabledExtensions;
35
36 inline bool IsEnabled(const char* extensionName) const {
37 const auto it = std::find_if(
38 EnabledExtensions.begin(), EnabledExtensions.end(), [&extensionName](auto&& i) { return 0 == strcmp(i, extensionName); });
39 return it != EnabledExtensions.end();
40 }
41 };
42
43 inline ExtensionContext CreateExtensionContext(const std::vector<const char*>& requestedExtensions) {
44 const std::vector<XrExtensionProperties> runtimeSupportedExtensions = xr::EnumerateInstanceExtensionProperties();
45
46 // Filter requested extensions to make sure enabled extensions are supported by current runtime
47 xr::ExtensionContext extensions{};
48 for (auto& requestedExtension : requestedExtensions) {
49 for (const auto& supportedExtension : runtimeSupportedExtensions) {
50 if (strcmp(supportedExtension.extensionName, requestedExtension) == 0) {
51 extensions.EnabledExtensions.push_back(requestedExtension);
52 break;
53 }
54 }
55 }
56
57 // Record enabled extensions in extension context as bool for easy usage.
58#ifdef XR_USE_GRAPHICS_API_D3D11
59 extensions.SupportsD3D11 = extensions.IsEnabled(XR_KHR_D3D11_ENABLE_EXTENSION_NAME);
60#endif
61#ifdef XR_USE_GRAPHICS_API_D3D12
62 extensions.SupportsD3D12 = extensions.IsEnabled(XR_KHR_D3D12_ENABLE_EXTENSION_NAME);
63#endif
64#ifdef XR_USE_PLATFORM_WIN32
65 extensions.SupportsAppContainer = extensions.IsEnabled(XR_EXT_WIN32_APPCONTAINER_COMPATIBLE_EXTENSION_NAME);
66 extensions.SupportsHolographicWindowAttachment = extensions.IsEnabled(XR_MSFT_HOLOGRAPHIC_WINDOW_ATTACHMENT_EXTENSION_NAME);
67 extensions.SupportsPerceptionAnchorInterop = extensions.IsEnabled(XR_MSFT_PERCEPTION_ANCHOR_INTEROP_EXTENSION_NAME);
68#endif
69 extensions.SupportsDepthInfo = extensions.IsEnabled(XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME);
70 extensions.SupportsVisibilityMask = extensions.IsEnabled(XR_KHR_VISIBILITY_MASK_EXTENSION_NAME);
71 extensions.SupportsUnboundedSpace = extensions.IsEnabled(XR_MSFT_UNBOUNDED_REFERENCE_SPACE_EXTENSION_NAME);
72 extensions.SupportsSpatialAnchor = extensions.IsEnabled(XR_MSFT_SPATIAL_ANCHOR_EXTENSION_NAME);
73 extensions.SupportsHandInteraction = extensions.IsEnabled(XR_MSFT_HAND_INTERACTION_EXTENSION_NAME);
74 extensions.SupportsEyeGazeInteraction = extensions.IsEnabled(XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME);
75 extensions.SupportsSecondaryViewConfiguration = extensions.IsEnabled(XR_MSFT_SECONDARY_VIEW_CONFIGURATION_EXTENSION_NAME);
76 extensions.SupportsHandJointTracking = extensions.IsEnabled(XR_EXT_HAND_TRACKING_EXTENSION_NAME);
77 extensions.SupportsHandMeshTracking = extensions.IsEnabled(XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME);
78 extensions.SupportsSpatialGraphBridge = extensions.IsEnabled(XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME);
79 extensions.SupportsControllerModel = extensions.IsEnabled(XR_MSFT_CONTROLLER_MODEL_EXTENSION_NAME);
80 extensions.SupportsSamsungOdysseyController = extensions.IsEnabled(XR_EXT_SAMSUNG_ODYSSEY_CONTROLLER_EXTENSION_NAME);
81 extensions.SupportsHPMixedRealityController = extensions.IsEnabled(XR_EXT_HP_MIXED_REALITY_CONTROLLER_EXTENSION_NAME);
82 extensions.SupportsColorScaleBias = extensions.IsEnabled(XR_KHR_COMPOSITION_LAYER_COLOR_SCALE_BIAS_EXTENSION_NAME);
83 extensions.SupportsSceneUnderstanding = extensions.IsEnabled(XR_MSFT_SCENE_UNDERSTANDING_EXTENSION_NAME);
84 extensions.SupportsSceneUnderstandingSerialization = extensions.IsEnabled(XR_MSFT_SCENE_UNDERSTANDING_SERIALIZATION_EXTENSION_NAME);
85 extensions.SupportsReprojectionConfiguration = extensions.IsEnabled(XR_MSFT_COMPOSITION_LAYER_REPROJECTION_EXTENSION_NAME);
86 extensions.SupportsSpatialAnchorPersistence = extensions.IsEnabled(XR_MSFT_SPATIAL_ANCHOR_PERSISTENCE_EXTENSION_NAME);
87
88 return extensions;
89 }
90} // namespace xr
91
The xr::DispatchTable struct contains all available PFN pointers to xr functions including those in a...
std::vector< XrExtensionProperties > EnumerateInstanceExtensionProperties(const char *layerName=nullptr)
Definition XrEnumerate.h:17
ExtensionContext CreateExtensionContext(const std::vector< const char * > &requestedExtensions)
bool IsEnabled(const char *extensionName) const
std::vector< const char * > EnabledExtensions