Skyscraper 2.0
XrGuid.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 <functional>
7#include <string.h>
8#include <openxr/openxr.h>
9
10namespace xr {
11
12// GUID_DEFINED is defined in guiddef.h
13#ifdef GUID_DEFINED
14
15 inline constexpr GUID ToGuid(const XrUuidMSFT& src) noexcept {
16 GUID dest{};
17 const auto& u = src.bytes;
18 // Data1, Data2, and Data3 are encoded as big-endian for Variant-1
19 dest.Data1 = u[0] * 0x01000000u + u[1] * 0x00010000u + u[2] * 0x00000100u + u[3];
20 dest.Data2 = uint16_t(u[4] * 0x0100u + u[5]);
21 dest.Data3 = uint16_t(u[6] * 0x0100u + u[7]);
22 dest.Data4[0] = u[8];
23 dest.Data4[1] = u[9];
24 dest.Data4[2] = u[10];
25 dest.Data4[3] = u[11];
26 dest.Data4[4] = u[12];
27 dest.Data4[5] = u[13];
28 dest.Data4[6] = u[14];
29 dest.Data4[7] = u[15];
30 return dest;
31 }
32
33 inline constexpr XrUuidMSFT ToXrUuidMSFT(const GUID& src) noexcept {
34 XrUuidMSFT dest{};
35 auto& u = dest.bytes;
36 // Data1, Data2, and Data3 are encoded as big-endian for Variant-1
37 u[0] = uint8_t(src.Data1 >> 24);
38 u[1] = uint8_t(src.Data1 >> 16);
39 u[2] = uint8_t(src.Data1 >> 8);
40 u[3] = uint8_t(src.Data1);
41
42 u[4] = uint8_t(src.Data2 >> 8);
43 u[5] = uint8_t(src.Data2);
44
45 u[6] = uint8_t(src.Data3 >> 8);
46 u[7] = uint8_t(src.Data3);
47
48 u[8] = src.Data4[0];
49 u[9] = src.Data4[1];
50 u[10] = src.Data4[2];
51 u[11] = src.Data4[3];
52 u[12] = src.Data4[4];
53 u[13] = src.Data4[5];
54 u[14] = src.Data4[6];
55 u[15] = src.Data4[7];
56 return dest;
57 }
58
59#endif // GUID_DEFINED
60} // namespace xr
The xr::DispatchTable struct contains all available PFN pointers to xr functions including those in a...