Vulkan Schnee 0.0.1
High-performance rendering engine
Loading...
Searching...
No Matches
OpenXrHelper.cpp
Go to the documentation of this file.
2#include <glm/glm.hpp>
3#include <glm/gtc/matrix_access.hpp>
4#include <glm/gtx/quaternion.hpp>
5#include <glm/gtc/matrix_transform.hpp>
6
7namespace EngineCore {
9 {
10 XrPosef identityPose;
11 identityPose.position = { 0.0f, 0.0f, 0.0f };
12 identityPose.orientation = { 0.0f, 0.0f, 0.0f, 1.0f };
13 return identityPose;
14 }
15
16 glm::mat4 OpenXrHelper::poseToMatrix(const XrPosef& pose)
17 {
18 const glm::mat4 translation = glm::translate(glm::mat4(1.0f), glm::vec3(pose.position.x, pose.position.y, pose.position.z));
19 const glm::mat4 rotation = glm::toMat4(glm::quat(pose.orientation.w, pose.orientation.x, pose.orientation.y, pose.orientation.z));
20 return translation * rotation;
21 }
22
24 {
25 const glm::mat4 translation =
26 glm::translate(glm::mat4(1.0f), glm::vec3(pose.position.x, pose.position.y, pose.position.z));
27
28 const glm::mat4 rotation =
29 glm::toMat4(glm::quat(pose.orientation.w, pose.orientation.x, pose.orientation.y, pose.orientation.z));
30
31 return translation * rotation;
32 }
33
34 glm::quat OpenXrHelper::xrQuaternionfToGlmQuat(const XrQuaternionf& xrQuaternion) {
35 return glm::quat(xrQuaternion.x, xrQuaternion.y, xrQuaternion.z, xrQuaternion.w);
36 }
37
38 XrQuaternionf OpenXrHelper::glmQuatToXrQuaternionf(const glm::quat& glmQuaternion) {
39 XrQuaternionf quat;
40 quat.x = glmQuaternion.x;
41 quat.y = glmQuaternion.y;
42 quat.z = glmQuaternion.z;
43 quat.w = glmQuaternion.w;
44 return quat;
45 }
46
47 glm::vec3 OpenXrHelper::xrVector3fToGlmVec3(const XrVector3f& xrVector3) {
48 return glm::vec3(xrVector3.x, xrVector3.y, xrVector3.z);
49 }
50
51 XrVector3f OpenXrHelper::glmVec3ToXrVector3f(const glm::vec3& glmVector3) {
52 XrVector3f vec3;
53 vec3.x = glmVector3.x;
54 vec3.y = glmVector3.y;
55 vec3.z = glmVector3.z;
56 return vec3;
57 }
58
59 glm::quat OpenXrHelper::lerpMix(const glm::quat& from, const glm::quat& to, float progress) {
60 glm::quat src = from * (1.0f - progress);
61 glm::quat dst = to * progress;
62
63 glm::quat q = src + dst;
64 return q;
65 }
66
67 float OpenXrHelper::dot(const glm::quat& a, const glm::quat& b) {
68 return a.x * b.x + a.y * b.y + a.z * b.z + a.w * b.w;
69 }
70
71 glm::vec3 OpenXrHelper::lerpMix(const glm::vec3& from, const glm::vec3& to, float progress) {
72 glm::vec3 res = {};
73 res.x = from.x + progress * (to.x - from.x);
74 res.y = from.y + progress * (to.y - from.y);
75 res.z = from.z + progress * (to.z - from.z);
76 return res;
77 }
78
79 float OpenXrHelper::lerpMix(float from, float to, float progress) {
80 return from + progress * (to - from);
81 }
82
83 float OpenXrHelper::dot(const glm::vec3& a, const glm::vec3& b) {
84 return a.x * b.x + a.y * b.y + a.z * b.z;
85 }
86
87 glm::vec3 OpenXrHelper::crossProductVector3(const glm::vec3& vector_a, const glm::vec3& vector_b) {
88 glm::vec3 temp;
89 temp.x = vector_a.y * vector_b.z - vector_a.z * vector_b.y;
90 temp.y = -(vector_a.x * vector_b.z - vector_a.z * vector_b.x);
91 temp.z = vector_a.x * vector_b.y - vector_a.y * vector_b.x;
92 return temp;
93 }
94
95 float OpenXrHelper::clampf(float num, float left, float right) {
96 if (num < left)
97 num = left;
98 else if (num > right)
99 num = right;
100 return num;
101 }
102
103 float OpenXrHelper::lengthSquared(const glm::vec3& vec) {
104 return vec.x * vec.x + vec.y * vec.y + vec.z * vec.z;
105 }
106
107 float OpenXrHelper::length(const glm::vec3& vec) {
108 return glm::sqrt(OpenXrHelper::lengthSquared(vec));
109 }
110
111 glm::vec3 OpenXrHelper::normalize(const glm::vec3& vec) {
112 float len = OpenXrHelper::length(vec);
113 return vec / len;
114 }
115
116 float OpenXrHelper::distanceSquared(const glm::vec3& vec1, const glm::vec3& vec2)
117 {
118 return std::pow(vec1.x - vec2.x, 2) + std::pow(vec1.y - vec2.y, 2);
119 }
120
121 float OpenXrHelper::distance(const glm::vec3& vec1, const glm::vec3& vec2)
122 {
123 return glm::sqrt(OpenXrHelper::distanceSquared(vec1, vec2));
124 }
125
126 glm::quat OpenXrHelper::slerp(const glm::quat& start, const glm::quat& end, float percent)
127 {
128 float cosTheta = OpenXrHelper::dot(start, end);
129 glm::quat temp(end);
130
131
132 if (cosTheta < 0.0f) {
133 cosTheta *= -1.0f;
134 temp = temp * -1.0f;
135 }
136
137 float theta = glm::acos(cosTheta);
138 float sinThetaDenom = 1.0f / glm::sin(theta);
139
140 glm::quat res = (
141 ((glm::quat)(start * glm::sin(theta * (1.0f - percent)))) +
142 ((glm::quat)(temp * glm::sin(percent * theta)))
143 ) / sinThetaDenom;
144
145 return res;
146 }
147
148 glm::vec3 OpenXrHelper::slerp(const glm::vec3& start, const glm::vec3& end, float percent)
149 {
150 // 1) Compute the dot product
151 float dot = OpenXrHelper::dot(start, end);
152
153 // 2) Clamp to the valid acos range
154 dot = OpenXrHelper::clampf(dot, -1.0f, 1.0f);
155
156 // 3) Compute the angle and scale by percent
157 float theta = glm::acos(dot) * percent;
158
159 // 4) Project 'end' onto 'start'
160 glm::vec3 startDotted = start * dot;
161
162 // 5) Compute the orthogonal component and normalize it
163 glm::vec3 relativeVec = end - startDotted;
164 relativeVec = OpenXrHelper::normalize(relativeVec);
165
166 // 6) Form the final vector
167 return (start * glm::cos(theta)) + (relativeVec * glm::sin(theta));
168 }
169
170
171 // signed radian angle between 2 vectors, around a normal. vectors must be normalized.
172 float OpenXrHelper::vectorAngleAroundNormal(const glm::vec3& vec1, const glm::vec3& vec2, const glm::vec3& norm)
173 {
174 float dot = vec1.x * vec2.x + vec1.y * vec2.y + vec1.z * vec2.z;
175 float det = vec1.x * vec2.y * norm.z + vec2.x * norm.y * vec1.z + norm.x * vec1.y * vec2.z - vec1.z * vec2.y * norm.x - vec2.z * norm.y * vec1.x - norm.z * vec1.y * vec2.x;
176 return std::atan2(det, dot);
177 }
178
179 glm::mat4 OpenXrHelper::rotationAroundPoint(glm::vec3 point, glm::mat4 rotationMatrix)
180 {
181 glm::mat4 translateToPoint = glm::translate(glm::mat4(),
182 glm::vec3(point.x, point.y, point.z)
183 );
184 glm::mat4 inverseTranslate = glm::inverse(translateToPoint);
185 return translateToPoint * rotationMatrix * inverseTranslate;
186 }
187
188 void OpenXrHelper::quaternionToAngleAxis(const glm::quat& quat, float& angle, glm::vec3& axis)
189 {
190 angle = 2 * std::acos(quat.w);
191
192 axis.x = quat.x / sqrt(1 - quat.w * quat.w);
193 axis.y = quat.y / sqrt(1 - quat.w * quat.w);
194 axis.z = quat.z / sqrt(1 - quat.w * quat.w);
195 }
196
197 glm::quat OpenXrHelper::quaternionFromAngleAxis(const float& angle, const glm::vec3& axis)
198 {
199 glm::quat quat = glm::quat(1.0f, 0.0f, 0.0f, 0.0f);
200
201 quat.x = axis.x * sin(angle / 2);
202 quat.y = axis.y * sin(angle / 2);
203 quat.z = axis.z * sin(angle / 2);
204 quat.w = cos(angle / 2);
205
206 return quat;
207 }
208
210 {
211 OpenXrHelper::posef pose = {
212 OpenXrHelper::xrQuaternionfToGlmQuat(xrPosef.orientation),
213 OpenXrHelper::xrVector3fToGlmVec3(xrPosef.position)
214 };
215 return pose;
216 }
217
218 glm::mat4 EngineCore::OpenXrHelper::createProjectionMatrix(XrFovf fov, float nearClip, float farClip)
219 {
220 const float l = glm::tan(fov.angleLeft);
221 const float r = glm::tan(fov.angleRight);
222 const float d = glm::tan(fov.angleDown);
223 const float u = glm::tan(fov.angleUp);
224
225 const float w = r - l;
226 const float h = d - u;
227
228 // Reverse-Z projection: near plane maps to 1.0, far plane maps to 0.0
229 // This provides better depth precision for distant objects
230 glm::mat4 projectionMatrix = glm::mat4();
231 projectionMatrix[0] = {2.0f / w, 0.0f, 0.0f, 0.0f};
232 projectionMatrix[1] = {0.0f, 2.0f / h, 0.0f, 0.0f};
233 projectionMatrix[2] = {(r + l) / w, (u + d) / h, nearClip / (farClip - nearClip), -1.0f};
234 projectionMatrix[3] = {0.0f, 0.0f, (nearClip * farClip) / (farClip - nearClip), 0.0f};
235 return projectionMatrix;
236 }
237 std::string OpenXrHelper::sessionStateToString(XrSessionState state)
238 {
239 switch (state)
240 {
241 case (XR_SESSION_STATE_UNKNOWN): return "XR_SESSION_STATE_UNKNOWN";
242 case (XR_SESSION_STATE_READY): return "XR_SESSION_STATE_READY";
243 case (XR_SESSION_STATE_EXITING): return "XR_SESSION_STATE_EXITING";
244 case (XR_SESSION_STATE_IDLE): return "XR_SESSION_STATE_IDLE";
245 case (XR_SESSION_STATE_LOSS_PENDING): return "XR_SESSION_STATE_LOSS_PENDING";
246 case (XR_SESSION_STATE_SYNCHRONIZED): return "XR_SESSION_STATE_SYNCHRONIZED";
247 case (XR_SESSION_STATE_FOCUSED): return "XR_SESSION_STATE_FOCUSED";
248 case (XR_SESSION_STATE_STOPPING): return "XR_SESSION_STATE_STOPPING";
249 case (XR_SESSION_STATE_VISIBLE): return "XR_SESSION_STATE_VISIBLE";
250 default: return std::to_string(state);
251 }
252 }
253
254
255const char* OpenXrHelper::GetXrStructureTypeName(XrStructureType type) {
256 switch (type) {
257 case XR_TYPE_UNKNOWN: return "XR_TYPE_UNKNOWN";
258 case XR_TYPE_API_LAYER_PROPERTIES: return "XR_TYPE_API_LAYER_PROPERTIES";
259 case XR_TYPE_EXTENSION_PROPERTIES: return "XR_TYPE_EXTENSION_PROPERTIES";
260 case XR_TYPE_INSTANCE_CREATE_INFO: return "XR_TYPE_INSTANCE_CREATE_INFO";
261 case XR_TYPE_SYSTEM_GET_INFO: return "XR_TYPE_SYSTEM_GET_INFO";
262 case XR_TYPE_SYSTEM_PROPERTIES: return "XR_TYPE_SYSTEM_PROPERTIES";
263 case XR_TYPE_VIEW_LOCATE_INFO: return "XR_TYPE_VIEW_LOCATE_INFO";
264 case XR_TYPE_VIEW: return "XR_TYPE_VIEW";
265 case XR_TYPE_SESSION_CREATE_INFO: return "XR_TYPE_SESSION_CREATE_INFO";
266 case XR_TYPE_SWAPCHAIN_CREATE_INFO: return "XR_TYPE_SWAPCHAIN_CREATE_INFO";
267 case XR_TYPE_SESSION_BEGIN_INFO: return "XR_TYPE_SESSION_BEGIN_INFO";
268 case XR_TYPE_VIEW_STATE: return "XR_TYPE_VIEW_STATE";
269 case XR_TYPE_FRAME_END_INFO: return "XR_TYPE_FRAME_END_INFO";
270 case XR_TYPE_HAPTIC_VIBRATION: return "XR_TYPE_HAPTIC_VIBRATION";
271 case XR_TYPE_EVENT_DATA_BUFFER: return "XR_TYPE_EVENT_DATA_BUFFER";
272 case XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING: return "XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING";
273 case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED: return "XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED";
274 case XR_TYPE_ACTION_STATE_BOOLEAN: return "XR_TYPE_ACTION_STATE_BOOLEAN";
275 case XR_TYPE_ACTION_STATE_FLOAT: return "XR_TYPE_ACTION_STATE_FLOAT";
276 case XR_TYPE_ACTION_STATE_VECTOR2F: return "XR_TYPE_ACTION_STATE_VECTOR2F";
277 case XR_TYPE_ACTION_STATE_POSE: return "XR_TYPE_ACTION_STATE_POSE";
278 case XR_TYPE_ACTION_SET_CREATE_INFO: return "XR_TYPE_ACTION_SET_CREATE_INFO";
279 case XR_TYPE_ACTION_CREATE_INFO: return "XR_TYPE_ACTION_CREATE_INFO";
280 case XR_TYPE_INSTANCE_PROPERTIES: return "XR_TYPE_INSTANCE_PROPERTIES";
281 case XR_TYPE_FRAME_WAIT_INFO: return "XR_TYPE_FRAME_WAIT_INFO";
282 case XR_TYPE_COMPOSITION_LAYER_PROJECTION: return "XR_TYPE_COMPOSITION_LAYER_PROJECTION";
283 case XR_TYPE_COMPOSITION_LAYER_QUAD: return "XR_TYPE_COMPOSITION_LAYER_QUAD";
284 case XR_TYPE_REFERENCE_SPACE_CREATE_INFO: return "XR_TYPE_REFERENCE_SPACE_CREATE_INFO";
285 case XR_TYPE_ACTION_SPACE_CREATE_INFO: return "XR_TYPE_ACTION_SPACE_CREATE_INFO";
286 case XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING: return "XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING";
287 case XR_TYPE_VIEW_CONFIGURATION_VIEW: return "XR_TYPE_VIEW_CONFIGURATION_VIEW";
288 case XR_TYPE_SPACE_LOCATION: return "XR_TYPE_SPACE_LOCATION";
289 case XR_TYPE_SPACE_VELOCITY: return "XR_TYPE_SPACE_VELOCITY";
290 case XR_TYPE_FRAME_STATE: return "XR_TYPE_FRAME_STATE";
291 case XR_TYPE_VIEW_CONFIGURATION_PROPERTIES: return "XR_TYPE_VIEW_CONFIGURATION_PROPERTIES";
292 case XR_TYPE_FRAME_BEGIN_INFO: return "XR_TYPE_FRAME_BEGIN_INFO";
293 case XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW: return "XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW";
294 case XR_TYPE_EVENT_DATA_EVENTS_LOST: return "XR_TYPE_EVENT_DATA_EVENTS_LOST";
295 case XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING: return "XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING";
296 case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED: return "XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED";
297 case XR_TYPE_INTERACTION_PROFILE_STATE: return "XR_TYPE_INTERACTION_PROFILE_STATE";
298 case XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO: return "XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO";
299 case XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO: return "XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO";
300 case XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO: return "XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO";
301 case XR_TYPE_ACTION_STATE_GET_INFO: return "XR_TYPE_ACTION_STATE_GET_INFO";
302 case XR_TYPE_HAPTIC_ACTION_INFO: return "XR_TYPE_HAPTIC_ACTION_INFO";
303 case XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO: return "XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO";
304 case XR_TYPE_ACTIONS_SYNC_INFO: return "XR_TYPE_ACTIONS_SYNC_INFO";
305 case XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO: return "XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO";
306 case XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO: return "XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO";
307 case XR_TYPE_COMPOSITION_LAYER_CUBE_KHR: return "XR_TYPE_COMPOSITION_LAYER_CUBE_KHR";
308 case XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR: return "XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR";
309 case XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR: return "XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR";
310 case XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR: return "XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR";
311 case XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT: return "XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT";
312 case XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR: return "XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR";
313 case XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR: return "XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR";
314 case XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT: return "XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT";
315 case XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT: return "XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT";
316 case XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT: return "XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT";
317 case XR_TYPE_DEBUG_UTILS_LABEL_EXT: return "XR_TYPE_DEBUG_UTILS_LABEL_EXT";
318 case XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR: return "XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR";
319 case XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR: return "XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR";
320 case XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR: return "XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR";
321 case XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR: return "XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR";
322 case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR: return "XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR";
323 case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR: return "XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR";
324 case XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR: return "XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR";
325 case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR: return "XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR";
326 case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR: return "XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR";
327 case XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR: return "XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR";
328 case XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR: return "XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR";
329 case XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR: return "XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR";
330 case XR_TYPE_GRAPHICS_BINDING_D3D11_KHR: return "XR_TYPE_GRAPHICS_BINDING_D3D11_KHR";
331 case XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR: return "XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR";
332 case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR: return "XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR";
333 case XR_TYPE_GRAPHICS_BINDING_D3D12_KHR: return "XR_TYPE_GRAPHICS_BINDING_D3D12_KHR";
334 case XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR: return "XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR";
335 case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR: return "XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR";
336 case XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT: return "XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT";
337 case XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT: return "XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT";
338 case XR_TYPE_VISIBILITY_MASK_KHR: return "XR_TYPE_VISIBILITY_MASK_KHR";
339 case XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR: return "XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR";
340 case XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX: return "XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX";
341 case XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX: return "XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX";
342 case XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR: return "XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR";
343 case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT: return "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT";
344 case XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT: return "XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT";
345 case XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB: return "XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB";
346 case XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB: return "XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB";
347 case XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT: return "XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT";
348 case XR_TYPE_GRAPHICS_BINDING_EGL_MNDX: return "XR_TYPE_GRAPHICS_BINDING_EGL_MNDX";
349 case XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT: return "XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT";
350 case XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT: return "XR_TYPE_SPATIAL_GRAPH_STATIC_NODE_BINDING_CREATE_INFO_MSFT";
351 case XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT: return "XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_GET_INFO_MSFT";
352 case XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT: return "XR_TYPE_SPATIAL_GRAPH_NODE_BINDING_PROPERTIES_MSFT";
353 case XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT: return "XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT";
354 case XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT: return "XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT";
355 case XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT: return "XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT";
356 case XR_TYPE_HAND_JOINT_LOCATIONS_EXT: return "XR_TYPE_HAND_JOINT_LOCATIONS_EXT";
357 case XR_TYPE_HAND_JOINT_VELOCITIES_EXT: return "XR_TYPE_HAND_JOINT_VELOCITIES_EXT";
358 case XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT: return "XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT";
359 case XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT: return "XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT";
360 case XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT: return "XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT";
361 case XR_TYPE_HAND_MESH_MSFT: return "XR_TYPE_HAND_MESH_MSFT";
362 case XR_TYPE_HAND_POSE_TYPE_INFO_MSFT: return "XR_TYPE_HAND_POSE_TYPE_INFO_MSFT";
363 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT: return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT";
364 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT: return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT";
365 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT: return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT";
366 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT: return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT";
367 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT: return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT";
368 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT: return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT";
369 case XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT: return "XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT";
370 case XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT: return "XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT";
371 case XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT: return "XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT";
372 case XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT: return "XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT";
373 case XR_TYPE_CONTROLLER_MODEL_STATE_MSFT: return "XR_TYPE_CONTROLLER_MODEL_STATE_MSFT";
374 case XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC: return "XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC";
375 case XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT: return "XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT";
376 case XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT: return "XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT";
377 case XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT: return "XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT";
378 case XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB: return "XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB";
379 case XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB: return "XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB";
380 case XR_TYPE_BODY_TRACKER_CREATE_INFO_FB: return "XR_TYPE_BODY_TRACKER_CREATE_INFO_FB";
381 case XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB: return "XR_TYPE_BODY_JOINTS_LOCATE_INFO_FB";
382 case XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB: return "XR_TYPE_SYSTEM_BODY_TRACKING_PROPERTIES_FB";
383 case XR_TYPE_BODY_JOINT_LOCATIONS_FB: return "XR_TYPE_BODY_JOINT_LOCATIONS_FB";
384 case XR_TYPE_BODY_SKELETON_FB: return "XR_TYPE_BODY_SKELETON_FB";
385 case XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT: return "XR_TYPE_INTERACTION_PROFILE_DPAD_BINDING_EXT";
386 case XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE: return "XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE";
387 case XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT: return "XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT";
388 case XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR: return "XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR";
389 case XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR: return "XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR";
390 case XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR: return "XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR";
391 case XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR: return "XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR";
392 case XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR: return "XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR";
393 case XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT: return "XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT";
394 case XR_TYPE_SCENE_CREATE_INFO_MSFT: return "XR_TYPE_SCENE_CREATE_INFO_MSFT";
395 case XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT: return "XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT";
396 case XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT: return "XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT";
397 case XR_TYPE_SCENE_COMPONENTS_MSFT: return "XR_TYPE_SCENE_COMPONENTS_MSFT";
398 case XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT: return "XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT";
399 case XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT: return "XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT";
400 case XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT: return "XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT";
401 case XR_TYPE_SCENE_OBJECTS_MSFT: return "XR_TYPE_SCENE_OBJECTS_MSFT";
402 case XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT: return "XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT";
403 case XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT: return "XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT";
404 case XR_TYPE_SCENE_PLANES_MSFT: return "XR_TYPE_SCENE_PLANES_MSFT";
405 case XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT: return "XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT";
406 case XR_TYPE_SCENE_MESHES_MSFT: return "XR_TYPE_SCENE_MESHES_MSFT";
407 case XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT: return "XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT";
408 case XR_TYPE_SCENE_MESH_BUFFERS_MSFT: return "XR_TYPE_SCENE_MESH_BUFFERS_MSFT";
409 case XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT: return "XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT";
410 case XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT: return "XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT";
411 case XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT: return "XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT";
412 case XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT: return "XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT";
413 case XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT: return "XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT";
414 case XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB: return "XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB";
415 case XR_TYPE_VIVE_TRACKER_PATHS_HTCX: return "XR_TYPE_VIVE_TRACKER_PATHS_HTCX";
416 case XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX: return "XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX";
417 case XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC: return "XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC";
418 case XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC: return "XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC";
419 case XR_TYPE_FACIAL_EXPRESSIONS_HTC: return "XR_TYPE_FACIAL_EXPRESSIONS_HTC";
420 case XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB: return "XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB";
421 case XR_TYPE_HAND_TRACKING_MESH_FB: return "XR_TYPE_HAND_TRACKING_MESH_FB";
422 case XR_TYPE_HAND_TRACKING_SCALE_FB: return "XR_TYPE_HAND_TRACKING_SCALE_FB";
423 case XR_TYPE_HAND_TRACKING_AIM_STATE_FB: return "XR_TYPE_HAND_TRACKING_AIM_STATE_FB";
424 case XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB: return "XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB";
425 case XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB: return "XR_TYPE_SYSTEM_SPATIAL_ENTITY_PROPERTIES_FB";
426 case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB: return "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_FB";
427 case XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB: return "XR_TYPE_SPACE_COMPONENT_STATUS_SET_INFO_FB";
428 case XR_TYPE_SPACE_COMPONENT_STATUS_FB: return "XR_TYPE_SPACE_COMPONENT_STATUS_FB";
429 case XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB: return "XR_TYPE_EVENT_DATA_SPATIAL_ANCHOR_CREATE_COMPLETE_FB";
430 case XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB: return "XR_TYPE_EVENT_DATA_SPACE_SET_STATUS_COMPLETE_FB";
431 case XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB: return "XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB";
432 case XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB: return "XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB";
433 case XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB: return "XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB";
434 case XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB: return "XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB";
435 case XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB: return "XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB";
436 case XR_TYPE_KEYBOARD_TRACKING_QUERY_FB: return "XR_TYPE_KEYBOARD_TRACKING_QUERY_FB";
437 case XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB: return "XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB";
438 case XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB: return "XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB";
439 case XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB: return "XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB";
440 case XR_TYPE_PASSTHROUGH_CREATE_INFO_FB: return "XR_TYPE_PASSTHROUGH_CREATE_INFO_FB";
441 case XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB: return "XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB";
442 case XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB: return "XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB";
443 case XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB: return "XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB";
444 case XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB: return "XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB";
445 case XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB: return "XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES2_FB";
446 case XR_TYPE_PASSTHROUGH_STYLE_FB: return "XR_TYPE_PASSTHROUGH_STYLE_FB";
447 case XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB: return "XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB";
448 case XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB: return "XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB";
449 case XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB: return "XR_TYPE_PASSTHROUGH_BRIGHTNESS_CONTRAST_SATURATION_FB";
450 case XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB: return "XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB";
451 case XR_TYPE_RENDER_MODEL_PATH_INFO_FB: return "XR_TYPE_RENDER_MODEL_PATH_INFO_FB";
452 case XR_TYPE_RENDER_MODEL_PROPERTIES_FB: return "XR_TYPE_RENDER_MODEL_PROPERTIES_FB";
453 case XR_TYPE_RENDER_MODEL_BUFFER_FB: return "XR_TYPE_RENDER_MODEL_BUFFER_FB";
454 case XR_TYPE_RENDER_MODEL_LOAD_INFO_FB: return "XR_TYPE_RENDER_MODEL_LOAD_INFO_FB";
455 case XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB: return "XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB";
456 case XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB: return "XR_TYPE_RENDER_MODEL_CAPABILITIES_REQUEST_FB";
457 case XR_TYPE_BINDING_MODIFICATIONS_KHR: return "XR_TYPE_BINDING_MODIFICATIONS_KHR";
458 case XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO: return "XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO";
459 case XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO: return "XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO";
460 case XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO: return "XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO";
461 case XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO: return "XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO";
462 case XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO: return "XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO";
463 case XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO: return "XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO";
464 case XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO: return "XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO";
465 case XR_TYPE_FRAME_END_INFO_ML: return "XR_TYPE_FRAME_END_INFO_ML";
466 case XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML: return "XR_TYPE_GLOBAL_DIMMER_FRAME_END_INFO_ML";
467 case XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML: return "XR_TYPE_COORDINATE_SPACE_CREATE_INFO_ML";
468 case XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT: return "XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT";
469 case XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT: return "XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT";
470 case XR_TYPE_SPACE_QUERY_INFO_FB: return "XR_TYPE_SPACE_QUERY_INFO_FB";
471 case XR_TYPE_SPACE_QUERY_RESULTS_FB: return "XR_TYPE_SPACE_QUERY_RESULTS_FB";
472 case XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB: return "XR_TYPE_SPACE_STORAGE_LOCATION_FILTER_INFO_FB";
473 case XR_TYPE_SPACE_UUID_FILTER_INFO_FB: return "XR_TYPE_SPACE_UUID_FILTER_INFO_FB";
474 case XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB: return "XR_TYPE_SPACE_COMPONENT_FILTER_INFO_FB";
475 case XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB: return "XR_TYPE_EVENT_DATA_SPACE_QUERY_RESULTS_AVAILABLE_FB";
476 case XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB: return "XR_TYPE_EVENT_DATA_SPACE_QUERY_COMPLETE_FB";
477 case XR_TYPE_SPACE_SAVE_INFO_FB: return "XR_TYPE_SPACE_SAVE_INFO_FB";
478 case XR_TYPE_SPACE_ERASE_INFO_FB: return "XR_TYPE_SPACE_ERASE_INFO_FB";
479 case XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB: return "XR_TYPE_EVENT_DATA_SPACE_SAVE_COMPLETE_FB";
480 case XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB: return "XR_TYPE_EVENT_DATA_SPACE_ERASE_COMPLETE_FB";
481 case XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB: return "XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB";
482 case XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB: return "XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB";
483 case XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB: return "XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB";
484 case XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB: return "XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB";
485 case XR_TYPE_SPACE_SHARE_INFO_FB: return "XR_TYPE_SPACE_SHARE_INFO_FB";
486 case XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB: return "XR_TYPE_EVENT_DATA_SPACE_SHARE_COMPLETE_FB";
487 case XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB: return "XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB";
488 case XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB: return "XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB";
489 case XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB: return "XR_TYPE_HAPTIC_AMPLITUDE_ENVELOPE_VIBRATION_FB";
490 case XR_TYPE_SEMANTIC_LABELS_FB: return "XR_TYPE_SEMANTIC_LABELS_FB";
491 case XR_TYPE_ROOM_LAYOUT_FB: return "XR_TYPE_ROOM_LAYOUT_FB";
492 case XR_TYPE_BOUNDARY_2D_FB: return "XR_TYPE_BOUNDARY_2D_FB";
493 case XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB: return "XR_TYPE_SEMANTIC_LABELS_SUPPORT_INFO_FB";
494 case XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE: return "XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE";
495 case XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB: return "XR_TYPE_EVENT_DATA_SCENE_CAPTURE_COMPLETE_FB";
496 case XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB: return "XR_TYPE_SCENE_CAPTURE_REQUEST_INFO_FB";
497 case XR_TYPE_SPACE_CONTAINER_FB: return "XR_TYPE_SPACE_CONTAINER_FB";
498 case XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META: return "XR_TYPE_FOVEATION_EYE_TRACKED_PROFILE_CREATE_INFO_META";
499 case XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META: return "XR_TYPE_FOVEATION_EYE_TRACKED_STATE_META";
500 case XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META: return "XR_TYPE_SYSTEM_FOVEATION_EYE_TRACKED_PROPERTIES_META";
501 case XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB: return "XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_FB";
502 case XR_TYPE_FACE_TRACKER_CREATE_INFO_FB: return "XR_TYPE_FACE_TRACKER_CREATE_INFO_FB";
503 case XR_TYPE_FACE_EXPRESSION_INFO_FB: return "XR_TYPE_FACE_EXPRESSION_INFO_FB";
504 case XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB: return "XR_TYPE_FACE_EXPRESSION_WEIGHTS_FB";
505 case XR_TYPE_EYE_TRACKER_CREATE_INFO_FB: return "XR_TYPE_EYE_TRACKER_CREATE_INFO_FB";
506 case XR_TYPE_EYE_GAZES_INFO_FB: return "XR_TYPE_EYE_GAZES_INFO_FB";
507 case XR_TYPE_EYE_GAZES_FB: return "XR_TYPE_EYE_GAZES_FB";
508 case XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB: return "XR_TYPE_SYSTEM_EYE_TRACKING_PROPERTIES_FB";
509 case XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB: return "XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB";
510 case XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB: return "XR_TYPE_COMPOSITION_LAYER_SETTINGS_FB";
511 case XR_TYPE_HAPTIC_PCM_VIBRATION_FB: return "XR_TYPE_HAPTIC_PCM_VIBRATION_FB";
512 case XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB: return "XR_TYPE_DEVICE_PCM_SAMPLE_RATE_STATE_FB";
513 case XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB: return "XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_FB";
514 case XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META: return "XR_TYPE_LOCAL_DIMMING_FRAME_END_INFO_META";
515 case XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META: return "XR_TYPE_SYSTEM_VIRTUAL_KEYBOARD_PROPERTIES_META";
516 case XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META: return "XR_TYPE_VIRTUAL_KEYBOARD_CREATE_INFO_META";
517 case XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META: return "XR_TYPE_VIRTUAL_KEYBOARD_SPACE_CREATE_INFO_META";
518 case XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META: return "XR_TYPE_VIRTUAL_KEYBOARD_LOCATION_INFO_META";
519 case XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META: return "XR_TYPE_VIRTUAL_KEYBOARD_MODEL_VISIBILITY_SET_INFO_META";
520 case XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META: return "XR_TYPE_VIRTUAL_KEYBOARD_ANIMATION_STATE_META";
521 case XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META: return "XR_TYPE_VIRTUAL_KEYBOARD_MODEL_ANIMATION_STATES_META";
522 case XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META: return "XR_TYPE_VIRTUAL_KEYBOARD_TEXTURE_DATA_META";
523 case XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META: return "XR_TYPE_VIRTUAL_KEYBOARD_INPUT_INFO_META";
524 case XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META: return "XR_TYPE_VIRTUAL_KEYBOARD_TEXT_CONTEXT_CHANGE_INFO_META";
525 case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META: return "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_COMMIT_TEXT_META";
526 case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META: return "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_BACKSPACE_META";
527 case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META: return "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_ENTER_META";
528 case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META: return "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_SHOWN_META";
529 case XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META: return "XR_TYPE_EVENT_DATA_VIRTUAL_KEYBOARD_HIDDEN_META";
530 case XR_TYPE_EXTERNAL_CAMERA_OCULUS: return "XR_TYPE_EXTERNAL_CAMERA_OCULUS";
531 case XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META: return "XR_TYPE_VULKAN_SWAPCHAIN_CREATE_INFO_META";
532 case XR_TYPE_PERFORMANCE_METRICS_STATE_META: return "XR_TYPE_PERFORMANCE_METRICS_STATE_META";
533 case XR_TYPE_PERFORMANCE_METRICS_COUNTER_META: return "XR_TYPE_PERFORMANCE_METRICS_COUNTER_META";
534 case XR_TYPE_SPACE_LIST_SAVE_INFO_FB: return "XR_TYPE_SPACE_LIST_SAVE_INFO_FB";
535 case XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB: return "XR_TYPE_EVENT_DATA_SPACE_LIST_SAVE_COMPLETE_FB";
536 case XR_TYPE_SPACE_USER_CREATE_INFO_FB: return "XR_TYPE_SPACE_USER_CREATE_INFO_FB";
537 case XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META: return "XR_TYPE_SYSTEM_HEADSET_ID_PROPERTIES_META";
538 case XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META: return "XR_TYPE_SYSTEM_PASSTHROUGH_COLOR_LUT_PROPERTIES_META";
539 case XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META: return "XR_TYPE_PASSTHROUGH_COLOR_LUT_CREATE_INFO_META";
540 case XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META: return "XR_TYPE_PASSTHROUGH_COLOR_LUT_UPDATE_INFO_META";
541 case XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META: return "XR_TYPE_PASSTHROUGH_COLOR_MAP_LUT_META";
542 case XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META: return "XR_TYPE_PASSTHROUGH_COLOR_MAP_INTERPOLATED_LUT_META";
543 case XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC: return "XR_TYPE_PASSTHROUGH_CREATE_INFO_HTC";
544 case XR_TYPE_PASSTHROUGH_COLOR_HTC: return "XR_TYPE_PASSTHROUGH_COLOR_HTC";
545 case XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC: return "XR_TYPE_PASSTHROUGH_MESH_TRANSFORM_INFO_HTC";
546 case XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC: return "XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_HTC";
547 case XR_TYPE_FOVEATION_APPLY_INFO_HTC: return "XR_TYPE_FOVEATION_APPLY_INFO_HTC";
548 case XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC: return "XR_TYPE_FOVEATION_DYNAMIC_MODE_INFO_HTC";
549 case XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC: return "XR_TYPE_FOVEATION_CUSTOM_MODE_INFO_HTC";
550 case XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT: return "XR_TYPE_ACTIVE_ACTION_SET_PRIORITIES_EXT";
551 case XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX: return "XR_TYPE_SYSTEM_FORCE_FEEDBACK_CURL_PROPERTIES_MNDX";
552 case XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX: return "XR_TYPE_FORCE_FEEDBACK_CURL_APPLY_LOCATIONS_MNDX";
553 case XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT: return "XR_TYPE_HAND_TRACKING_DATA_SOURCE_INFO_EXT";
554 case XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT: return "XR_TYPE_HAND_TRACKING_DATA_SOURCE_STATE_EXT";
555 case XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT: return "XR_TYPE_PLANE_DETECTOR_CREATE_INFO_EXT";
556 case XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT: return "XR_TYPE_PLANE_DETECTOR_BEGIN_INFO_EXT";
557 case XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT: return "XR_TYPE_PLANE_DETECTOR_GET_INFO_EXT";
558 case XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT: return "XR_TYPE_PLANE_DETECTOR_LOCATIONS_EXT";
559 case XR_TYPE_PLANE_DETECTOR_LOCATION_EXT: return "XR_TYPE_PLANE_DETECTOR_LOCATION_EXT";
560 case XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT: return "XR_TYPE_PLANE_DETECTOR_POLYGON_BUFFER_EXT";
561 case XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT: return "XR_TYPE_SYSTEM_PLANE_DETECTION_PROPERTIES_EXT";
562
563 default: return "UNKNOWN_XR_TYPE";
564 }
565}
566 } // namespace EngineCore
static float dot(const glm::quat &a, const glm::quat &b)
Calculates the dot product between two glm quaternions.
static posef xrPosefToGlmPosef(const XrPosef &xrPosef)
static XrQuaternionf glmQuatToXrQuaternionf(const glm::quat &glmQuaternion)
Glm quaternion to xr quaternionf.
static std::string sessionStateToString(XrSessionState state)
static glm::quat slerp(const glm::quat &start, const glm::quat &end, float percent)
static glm::mat4 rotationAroundPoint(glm::vec3 point, glm::mat4 rotationMatrix)
static glm::quat quaternionFromAngleAxis(const float &angle, const glm::vec3 &axis)
static XrPosef makeIdentityPose()
Makes identity pose.
static glm::mat4 createProjectionMatrix(XrFovf fov, float nearClip, float farClip)
static float length(const glm::vec3 &vec)
static glm::vec3 crossProductVector3(const glm::vec3 &vector_a, const glm::vec3 &vector_b)
static void quaternionToAngleAxis(const glm::quat &quat, float &angle, glm::vec3 &axis)
static float distance(const glm::vec3 &vec1, const glm::vec3 &vec2)
static float vectorAngleAroundNormal(const glm::vec3 &vec1, const glm::vec3 &vec2, const glm::vec3 &norm)
static glm::mat4 poseToMatrix(const XrPosef &pose)
Converts an XrPosef to a glm::mat4.
static const char * GetXrStructureTypeName(XrStructureType type)
static glm::vec3 xrVector3fToGlmVec3(const XrVector3f &xrVector3)
Converts an OpenXR vector3 to a glm vector3.
static glm::quat lerpMix(const glm::quat &from, const glm::quat &to, float progress)
Linearly interpolate between two quaternions.
static XrVector3f glmVec3ToXrVector3f(const glm::vec3 &glmVector3)
Converts a glm::vec3 to a XrVector3f.
static float distanceSquared(const glm::vec3 &vec1, const glm::vec3 &vec2)
static float clampf(float num, float left, float right)
static float lengthSquared(const glm::vec3 &vec)
static glm::quat xrQuaternionfToGlmQuat(const XrQuaternionf &xrQuaternion)
Turns the OpenXR quaternion into an OpenXR quaternion.
static glm::vec3 normalize(const glm::vec3 &vec)
Log category system implementation.
A glm based posef struct.