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