Skyscraper 2.0
XrStruct.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 <string_view>
7
8namespace xr {
9 struct NameVersion {
10 NameVersion(std::string name, uint32_t version)
11 : Name(std::move(name))
12 , Version(version) {
13 }
14 std::string Name;
15 uint32_t Version;
16 };
17
18 inline void SetApplicationInfo(XrApplicationInfo& appInfo,
19 const xr::NameVersion& appNameVersion,
20 const xr::NameVersion& engineNameVersion,
21 XrVersion apiVersion = XR_CURRENT_API_VERSION) {
22 strncpy_s(appInfo.applicationName, XR_MAX_APPLICATION_NAME_SIZE, appNameVersion.Name.data(), appNameVersion.Name.size());
23 appInfo.applicationVersion = appNameVersion.Version;
24 strncpy_s(appInfo.engineName, XR_MAX_ENGINE_NAME_SIZE, engineNameVersion.Name.data(), engineNameVersion.Name.size());
25 appInfo.engineVersion = engineNameVersion.Version;
26 appInfo.apiVersion = apiVersion;
27 }
28
29 // extensions can be const or non-const.
30 template <typename T>
31 void SetEnabledExtensions(XrInstanceCreateInfo& info, T& extensions) {
32 info.enabledExtensionCount = static_cast<uint32_t>(std::size(extensions));
33 info.enabledExtensionNames = std::data(extensions);
34 }
35
36 // Don't allow rvalues to be passed because the memory that enabledExtensionNames points to
37 // needs to live longer than this function.
38 template <typename T>
39 void SetEnabledExtensions(XrInstanceCreateInfo& info, T&& extensions) = delete;
40
41 // Insert an extension struct into the next chain of an xrStruct
42 template <typename XrStruct, typename XrExtension>
43 void InsertExtensionStruct(XrStruct& xrStruct, XrExtension& xrExtension) {
44 xrExtension.next = xrStruct.next;
45 xrStruct.next = &xrExtension;
46 }
47
48 // Cast event data buffer to strongly typed event data if eventData->type matches.
49 template <typename XrEventData>
50 const XrEventData* event_cast(const XrEventDataBuffer* eventData) = delete;
51
52#define DEFINE_EVENT_TYPE(XrEventData, XR_TYPE_EVENT_DATA) \
53 template <> \
54 inline const XrEventData* event_cast<XrEventData>(const XrEventDataBuffer* eventData) { \
55 if (eventData->type == XR_TYPE_EVENT_DATA) { \
56 return reinterpret_cast<const XrEventData*>(eventData); \
57 } \
58 return nullptr; \
59 }
60
61 DEFINE_EVENT_TYPE(XrEventDataEventsLost, XR_TYPE_EVENT_DATA_EVENTS_LOST);
62 DEFINE_EVENT_TYPE(XrEventDataInteractionProfileChanged, XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED);
63 DEFINE_EVENT_TYPE(XrEventDataInstanceLossPending, XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING);
64 DEFINE_EVENT_TYPE(XrEventDataReferenceSpaceChangePending, XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING);
65 DEFINE_EVENT_TYPE(XrEventDataPerfSettingsEXT, XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT);
66 DEFINE_EVENT_TYPE(XrEventDataSessionStateChanged, XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED);
67 DEFINE_EVENT_TYPE(XrEventDataVisibilityMaskChangedKHR, XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR);
68#undef DEFINE_EVENT_TYPE
69} // namespace xr
#define DEFINE_EVENT_TYPE(XrEventData, XR_TYPE_EVENT_DATA)
Definition XrStruct.h:52
Definition XrUuid.h:70
The xr::DispatchTable struct contains all available PFN pointers to xr functions including those in a...
const XrEventData * event_cast(const XrEventDataBuffer *eventData)=delete
void InsertExtensionStruct(XrStruct &xrStruct, XrExtension &xrExtension)
Definition XrStruct.h:43
void SetEnabledExtensions(XrInstanceCreateInfo &info, T &extensions)
Definition XrStruct.h:31
void SetApplicationInfo(XrApplicationInfo &appInfo, const xr::NameVersion &appNameVersion, const xr::NameVersion &engineNameVersion, XrVersion apiVersion=XR_CURRENT_API_VERSION)
Definition XrStruct.h:18
uint32_t Version
Definition XrStruct.h:15
std::string Name
Definition XrStruct.h:14
NameVersion(std::string name, uint32_t version)
Definition XrStruct.h:10