VTK  9.4.20250208
vtkOpenXRUtilities.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
14#ifndef vtkOpenXRUtilities_h
15#define vtkOpenXRUtilities_h
16
17#include "vtkMatrix4x4.h"
18#include "vtkOpenXR.h"
19
20VTK_ABI_NAMESPACE_BEGIN
22{
23public:
26
31 static void CreateProjectionFov(vtkMatrix4x4* result, XrFovf fov, float nearZ, float farZ);
32
37 static void SetMatrixFromXrPose(vtkMatrix4x4* result, const XrPosef& xrPose);
38
42 static void CreateFromQuaternion(double result[16], const XrQuaternionf& quat);
43
47 static const char* GetActionTypeAsString(const XrActionType& actionType);
48
52 static const char* GetViewConfigurationTypeAsString(
53 const XrViewConfigurationType& viewConfigType);
54
58 static const char* GetStructureTypeAsString(const XrStructureType& structureType);
59
60 static const XrPosef& GetIdentityPose();
61
62protected:
63 vtkOpenXRUtilities() = default;
64 ~vtkOpenXRUtilities() override = default;
65
66private:
68 void operator=(const vtkOpenXRUtilities&) = delete;
69};
70
71//----------------------------------------------------------------------------
73{
74 static const XrPosef pose = {
75 { 0.0, 0.0, 0.0, 1.0 }, // .orientation
76 { 0.0, 0.0, 0.0 } // .position
77 };
78 return pose;
79}
80
81//----------------------------------------------------------------------------
83 vtkMatrix4x4* result, const XrFovf fov, const float nearZ, const float farZ)
84{
85 const float tanAngleLeft = tanf(fov.angleLeft);
86 const float tanAngleRight = tanf(fov.angleRight);
87
88 const float tanAngleDown = tanf(fov.angleDown);
89 const float tanAngleUp = tanf(fov.angleUp);
90
91 const float tanAngleWidth = tanAngleRight - tanAngleLeft;
92
93 // Clip space with
94 // positive Y up (OpenGL / D3D / Metal).
95 const float tanAngleHeight = (tanAngleUp - tanAngleDown);
96
97 double matrixArray[16] = { 0 };
98 if (farZ <= nearZ)
99 {
100 // place the far plane at infinity
101 matrixArray[0] = 2 / tanAngleWidth;
102 matrixArray[4] = 0;
103 matrixArray[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
104 matrixArray[12] = 0;
105
106 matrixArray[1] = 0;
107 matrixArray[5] = 2 / tanAngleHeight;
108 matrixArray[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
109 matrixArray[13] = 0;
110
111 matrixArray[2] = 0;
112 matrixArray[6] = 0;
113 matrixArray[10] = -1;
114 matrixArray[14] = -(nearZ + nearZ);
115
116 matrixArray[3] = 0;
117 matrixArray[7] = 0;
118 matrixArray[11] = -1;
119 matrixArray[15] = 0;
120 }
121 else
122 {
123 // normal projection
124 matrixArray[0] = 2 / tanAngleWidth;
125 matrixArray[4] = 0;
126 matrixArray[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
127 matrixArray[12] = 0;
128
129 matrixArray[1] = 0;
130 matrixArray[5] = 2 / tanAngleHeight;
131 matrixArray[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
132 matrixArray[13] = 0;
133
134 matrixArray[2] = 0;
135 matrixArray[6] = 0;
136 matrixArray[10] = -(farZ + nearZ) / (farZ - nearZ);
137 matrixArray[14] = -2 * farZ * nearZ / (farZ - nearZ);
138
139 matrixArray[3] = 0;
140 matrixArray[7] = 0;
141 matrixArray[11] = -1;
142 matrixArray[15] = 0;
143 }
144
145 // Set the array to the result vtkMatrix
146 result->DeepCopy(matrixArray);
147 result->Transpose();
148}
149
150//----------------------------------------------------------------------------
151// transpose of vtk standard
152inline void vtkOpenXRUtilities::CreateFromQuaternion(double result[16], const XrQuaternionf& quat)
153{
154 const double x2 = quat.x + quat.x;
155 const double y2 = quat.y + quat.y;
156 const double z2 = quat.z + quat.z;
157
158 const double xx2 = quat.x * x2;
159 const double yy2 = quat.y * y2;
160 const double zz2 = quat.z * z2;
161
162 const double yz2 = quat.y * z2;
163 const double wx2 = quat.w * x2;
164 const double xy2 = quat.x * y2;
165 const double wz2 = quat.w * z2;
166 const double xz2 = quat.x * z2;
167 const double wy2 = quat.w * y2;
168
169 result[0] = 1.0 - yy2 - zz2;
170 result[4] = xy2 + wz2;
171 result[8] = xz2 - wy2;
172 result[12] = 0.0;
173
174 result[1] = xy2 - wz2;
175 result[5] = 1.0 - xx2 - zz2;
176 result[9] = yz2 + wx2;
177 result[13] = 0.0;
178
179 result[2] = xz2 + wy2;
180 result[6] = yz2 - wx2;
181 result[10] = 1.0 - xx2 - yy2;
182 result[14] = 0.0;
183
184 result[3] = 0.0;
185 result[7] = 0.0;
186 result[11] = 0.0;
187 result[15] = 1.0;
188}
189
190//----------------------------------------------------------------------------
191// transpose of VTK standard
192inline void vtkOpenXRUtilities::SetMatrixFromXrPose(vtkMatrix4x4* result, const XrPosef& xrPose)
193{
194 const XrQuaternionf& xrQuat = xrPose.orientation;
195 const XrVector3f& xrPos = xrPose.position;
196
197 double* elems = result->GetData();
199
200 // Add the translation
201 elems[3] = xrPos.x;
202 elems[7] = xrPos.y;
203 elems[11] = xrPos.z;
204
205 result->Modified();
206}
207
208//----------------------------------------------------------------------------
209inline const char* vtkOpenXRUtilities::GetActionTypeAsString(const XrActionType& actionType)
210{
211 switch (actionType)
212 {
213 case XR_ACTION_TYPE_BOOLEAN_INPUT:
214 return "XR_ACTION_TYPE_BOOLEAN_INPUT";
215 case XR_ACTION_TYPE_FLOAT_INPUT:
216 return "XR_ACTION_TYPE_FLOAT_INPUT";
217 case XR_ACTION_TYPE_VECTOR2F_INPUT:
218 return "XR_ACTION_TYPE_VECTOR2F_INPUT";
219 case XR_ACTION_TYPE_POSE_INPUT:
220 return "XR_ACTION_TYPE_POSE_INPUT";
221 case XR_ACTION_TYPE_VIBRATION_OUTPUT:
222 return "XR_ACTION_TYPE_VIBRATION_OUTPUT";
223 default:
224 return "UNRECOGNIZED_ACTION_TYPE";
225 }
226}
227
228//----------------------------------------------------------------------------
230 const XrViewConfigurationType& viewConfigType)
231{
232 switch (viewConfigType)
233 {
234 case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO:
235 return "XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO";
236 case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO:
237 return "XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO";
238 case XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO:
239 return "XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO";
240 case XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT:
241 return "XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT";
242 default:
243 return "UNRECOGNIZED_VIEW_CONFIGURATION_TYPE";
244 }
245}
246
247//----------------------------------------------------------------------------
249 const XrStructureType& structureType)
250{
251 switch (structureType)
252 {
253 case XR_TYPE_API_LAYER_PROPERTIES:
254 return "XR_TYPE_API_LAYER_PROPERTIES";
255 case XR_TYPE_EXTENSION_PROPERTIES:
256 return "XR_TYPE_EXTENSION_PROPERTIES";
257 case XR_TYPE_INSTANCE_CREATE_INFO:
258 return "XR_TYPE_INSTANCE_CREATE_INFO";
259 case XR_TYPE_SYSTEM_GET_INFO:
260 return "XR_TYPE_SYSTEM_GET_INFO";
261 case XR_TYPE_SYSTEM_PROPERTIES:
262 return "XR_TYPE_SYSTEM_PROPERTIES";
263 case XR_TYPE_VIEW_LOCATE_INFO:
264 return "XR_TYPE_VIEW_LOCATE_INFO";
265 case XR_TYPE_VIEW:
266 return "XR_TYPE_VIEW";
267 case XR_TYPE_SESSION_CREATE_INFO:
268 return "XR_TYPE_SESSION_CREATE_INFO";
269 case XR_TYPE_SWAPCHAIN_CREATE_INFO:
270 return "XR_TYPE_SWAPCHAIN_CREATE_INFO";
271 case XR_TYPE_SESSION_BEGIN_INFO:
272 return "XR_TYPE_SESSION_BEGIN_INFO";
273 case XR_TYPE_VIEW_STATE:
274 return "XR_TYPE_VIEW_STATE";
275 case XR_TYPE_FRAME_END_INFO:
276 return "XR_TYPE_FRAME_END_INFO";
277 case XR_TYPE_HAPTIC_VIBRATION:
278 return "XR_TYPE_HAPTIC_VIBRATION";
279 case XR_TYPE_EVENT_DATA_BUFFER:
280 return "XR_TYPE_EVENT_DATA_BUFFER";
281 case XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING:
282 return "XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING";
283 case XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED:
284 return "XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED";
285 case XR_TYPE_ACTION_STATE_BOOLEAN:
286 return "XR_TYPE_ACTION_STATE_BOOLEAN";
287 case XR_TYPE_ACTION_STATE_FLOAT:
288 return "XR_TYPE_ACTION_STATE_FLOAT";
289 case XR_TYPE_ACTION_STATE_VECTOR2F:
290 return "XR_TYPE_ACTION_STATE_VECTOR2F";
291 case XR_TYPE_ACTION_STATE_POSE:
292 return "XR_TYPE_ACTION_STATE_POSE";
293 case XR_TYPE_ACTION_SET_CREATE_INFO:
294 return "XR_TYPE_ACTION_SET_CREATE_INFO";
295 case XR_TYPE_ACTION_CREATE_INFO:
296 return "XR_TYPE_ACTION_CREATE_INFO";
297 case XR_TYPE_INSTANCE_PROPERTIES:
298 return "XR_TYPE_INSTANCE_PROPERTIES";
299 case XR_TYPE_FRAME_WAIT_INFO:
300 return "XR_TYPE_FRAME_WAIT_INFO";
301 case XR_TYPE_COMPOSITION_LAYER_PROJECTION:
302 return "XR_TYPE_COMPOSITION_LAYER_PROJECTION";
303 case XR_TYPE_COMPOSITION_LAYER_QUAD:
304 return "XR_TYPE_COMPOSITION_LAYER_QUAD";
305 case XR_TYPE_REFERENCE_SPACE_CREATE_INFO:
306 return "XR_TYPE_REFERENCE_SPACE_CREATE_INFO";
307 case XR_TYPE_ACTION_SPACE_CREATE_INFO:
308 return "XR_TYPE_ACTION_SPACE_CREATE_INFO";
309 case XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING:
310 return "XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING";
311 case XR_TYPE_VIEW_CONFIGURATION_VIEW:
312 return "XR_TYPE_VIEW_CONFIGURATION_VIEW";
313 case XR_TYPE_SPACE_LOCATION:
314 return "XR_TYPE_SPACE_LOCATION";
315 case XR_TYPE_SPACE_VELOCITY:
316 return "XR_TYPE_SPACE_VELOCITY";
317 case XR_TYPE_FRAME_STATE:
318 return "XR_TYPE_FRAME_STATE";
319 case XR_TYPE_VIEW_CONFIGURATION_PROPERTIES:
320 return "XR_TYPE_VIEW_CONFIGURATION_PROPERTIES";
321 case XR_TYPE_FRAME_BEGIN_INFO:
322 return "XR_TYPE_FRAME_BEGIN_INFO";
323 case XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW:
324 return "XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW";
325 case XR_TYPE_EVENT_DATA_EVENTS_LOST:
326 return "XR_TYPE_EVENT_DATA_EVENTS_LOST";
327 case XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING:
328 return "XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING";
329 case XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED:
330 return "XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED";
331 case XR_TYPE_INTERACTION_PROFILE_STATE:
332 return "XR_TYPE_INTERACTION_PROFILE_STATE";
333 case XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO:
334 return "XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO";
335 case XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO:
336 return "XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO";
337 case XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO:
338 return "XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO";
339 case XR_TYPE_ACTION_STATE_GET_INFO:
340 return "XR_TYPE_ACTION_STATE_GET_INFO";
341 case XR_TYPE_HAPTIC_ACTION_INFO:
342 return "XR_TYPE_HAPTIC_ACTION_INFO";
343 case XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO:
344 return "XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO";
345 case XR_TYPE_ACTIONS_SYNC_INFO:
346 return "XR_TYPE_ACTIONS_SYNC_INFO";
347 case XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO:
348 return "XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO";
349 case XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO:
350 return "XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO";
351 case XR_TYPE_COMPOSITION_LAYER_CUBE_KHR:
352 return "XR_TYPE_COMPOSITION_LAYER_CUBE_KHR";
353 case XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR:
354 return "XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR";
355 case XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR:
356 return "XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR";
357 case XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR:
358 return "XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR";
359 case XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT:
360 return "XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT";
361 case XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR:
362 return "XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR";
363 case XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR:
364 return "XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR";
365 case XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT:
366 return "XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT";
367 case XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT:
368 return "XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT";
369 case XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
370 return "XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT";
371 case XR_TYPE_DEBUG_UTILS_LABEL_EXT:
372 return "XR_TYPE_DEBUG_UTILS_LABEL_EXT";
373 case XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR:
374 return "XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR";
375 case XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR:
376 return "XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR";
377 case XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR:
378 return "XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR";
379 case XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR:
380 return "XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR";
381 case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR:
382 return "XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR";
383 case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR:
384 return "XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR";
385 case XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR:
386 return "XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR";
387 case XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR:
388 return "XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR";
389 case XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR:
390 return "XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR";
391 case XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR:
392 return "XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR";
393 case XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR:
394 return "XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR";
395 case XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR:
396 return "XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR";
397 case XR_TYPE_GRAPHICS_BINDING_D3D11_KHR:
398 return "XR_TYPE_GRAPHICS_BINDING_D3D11_KHR";
399 case XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR:
400 return "XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR";
401 case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR:
402 return "XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR";
403 case XR_TYPE_GRAPHICS_BINDING_D3D12_KHR:
404 return "XR_TYPE_GRAPHICS_BINDING_D3D12_KHR";
405 case XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR:
406 return "XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR";
407 case XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR:
408 return "XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR";
409 case XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT:
410 return "XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT";
411 case XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT:
412 return "XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT";
413 case XR_TYPE_VISIBILITY_MASK_KHR:
414 return "XR_TYPE_VISIBILITY_MASK_KHR";
415 case XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR:
416 return "XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR";
417 case XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX:
418 return "XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX";
419 case XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX:
420 return "XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX";
421 case XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR:
422 return "XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR";
423 case XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT:
424 return "XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT";
425 case XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT:
426 return "XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT";
427 case XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT:
428 return "XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT";
429 case XR_TYPE_GRAPHICS_BINDING_EGL_MNDX:
430 return "XR_TYPE_GRAPHICS_BINDING_EGL_MNDX";
431 case XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT:
432 return "XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT";
433 case XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT:
434 return "XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT";
435 case XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT:
436 return "XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT";
437 case XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT:
438 return "XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT";
439 case XR_TYPE_HAND_JOINT_LOCATIONS_EXT:
440 return "XR_TYPE_HAND_JOINT_LOCATIONS_EXT";
441 case XR_TYPE_HAND_JOINT_VELOCITIES_EXT:
442 return "XR_TYPE_HAND_JOINT_VELOCITIES_EXT";
443 case XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT:
444 return "XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT";
445 case XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT:
446 return "XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT";
447 case XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT:
448 return "XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT";
449 case XR_TYPE_HAND_MESH_MSFT:
450 return "XR_TYPE_HAND_MESH_MSFT";
451 case XR_TYPE_HAND_POSE_TYPE_INFO_MSFT:
452 return "XR_TYPE_HAND_POSE_TYPE_INFO_MSFT";
453 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT:
454 return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT";
455 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT:
456 return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT";
457 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT:
458 return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT";
459 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT:
460 return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT";
461 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT:
462 return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT";
463 case XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT:
464 return "XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT";
465 case XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT:
466 return "XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT";
467 case XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT:
468 return "XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT";
469 case XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT:
470 return "XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT";
471 case XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT:
472 return "XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT";
473 case XR_TYPE_CONTROLLER_MODEL_STATE_MSFT:
474 return "XR_TYPE_CONTROLLER_MODEL_STATE_MSFT";
475 case XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC:
476 return "XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC";
477 case XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT:
478 return "XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT";
479 case XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB:
480 return "XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB";
481 case XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE:
482 return "XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE";
483 case XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR:
484 return "XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR";
485 case XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR:
486 return "XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR";
487 case XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR:
488 return "XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR";
489 case XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR:
490 return "XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR";
491 case XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR:
492 return "XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR";
493 case XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB:
494 return "XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB";
495 case XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB:
496 return "XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB";
497 case XR_TYPE_BINDING_MODIFICATIONS_KHR:
498 return "XR_TYPE_BINDING_MODIFICATIONS_KHR";
499 default:
500 return "UNRECOGNIZED_XR_TYPE";
501 }
502}
503
504VTK_ABI_NAMESPACE_END
505#endif
506// VTK-HeaderTest-Exclude: vtkOpenXRUtilities.h
represent and manipulate 4x4 transformation matrices
void DeepCopy(const vtkMatrix4x4 *source)
Set the elements of the matrix to the same values as the elements of the given source matrix.
double * GetData()
Returns the raw double array holding the matrix.
static void Transpose(const vtkMatrix4x4 *in, vtkMatrix4x4 *out)
Transpose the matrix and put it into out.
abstract base class for most VTK objects
Definition vtkObject.h:162
virtual void Modified()
Update the modification time for this object.
Header file that contains utility functions for OpenXR.
static void CreateFromQuaternion(double result[16], const XrQuaternionf &quat)
Given a quaternion, return elements of equivalent matrix as an array.
static void SetMatrixFromXrPose(vtkMatrix4x4 *result, const XrPosef &xrPose)
Given an XR pose (orientation quaternion + position vector), set the provided matrix from it.
vtkOpenXRUtilities()=default
static const char * GetActionTypeAsString(const XrActionType &actionType)
Return string representation of given XrActionType.
static const char * GetStructureTypeAsString(const XrStructureType &structureType)
Return string representation of given XrStructureType.
static const char * GetViewConfigurationTypeAsString(const XrViewConfigurationType &viewConfigType)
Return string representation of given XrViewConfigurationType.
static void CreateProjectionFov(vtkMatrix4x4 *result, XrFovf fov, float nearZ, float farZ)
Given a field of view (left, right, up, down angles) and near/far clipping builds,...
static vtkOpenXRUtilities * New()
~vtkOpenXRUtilities() override=default
static const XrPosef & GetIdentityPose()
Defines the OpenXR types and extensions common to all platforms.