14#ifndef vtkOpenXRUtilities_h 
   15#define vtkOpenXRUtilities_h 
   22VTK_ABI_NAMESPACE_BEGIN
 
   55    const XrViewConfigurationType& viewConfigType);
 
   76  static const XrPosef pose = {
 
   77    { 0.0, 0.0, 0.0, 1.0 }, 
 
   85  vtkMatrix4x4* result, 
const XrFovf fov, 
const float nearZ, 
const float farZ)
 
   87  const float tanAngleLeft = tanf(fov.angleLeft);
 
   88  const float tanAngleRight = tanf(fov.angleRight);
 
   90  const float tanAngleDown = tanf(fov.angleDown);
 
   91  const float tanAngleUp = tanf(fov.angleUp);
 
   93  const float tanAngleWidth = tanAngleRight - tanAngleLeft;
 
   97  const float tanAngleHeight = (tanAngleUp - tanAngleDown);
 
   99  double matrixArray[16] = { 0 };
 
  103    matrixArray[0] = 2 / tanAngleWidth;
 
  105    matrixArray[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
 
  109    matrixArray[5] = 2 / tanAngleHeight;
 
  110    matrixArray[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
 
  115    matrixArray[10] = -1;
 
  116    matrixArray[14] = -(nearZ + nearZ);
 
  120    matrixArray[11] = -1;
 
  126    matrixArray[0] = 2 / tanAngleWidth;
 
  128    matrixArray[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
 
  132    matrixArray[5] = 2 / tanAngleHeight;
 
  133    matrixArray[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
 
  138    matrixArray[10] = -(farZ + nearZ) / (farZ - nearZ);
 
  139    matrixArray[14] = -2 * farZ * nearZ / (farZ - nearZ);
 
  143    matrixArray[11] = -1;
 
  156  const double x2 = quat.x + quat.x;
 
  157  const double y2 = quat.y + quat.y;
 
  158  const double z2 = quat.z + quat.z;
 
  160  const double xx2 = quat.x * x2;
 
  161  const double yy2 = quat.y * y2;
 
  162  const double zz2 = quat.z * z2;
 
  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;
 
  171  result[0] = 1.0 - yy2 - zz2;
 
  172  result[4] = xy2 + wz2;
 
  173  result[8] = xz2 - wy2;
 
  176  result[1] = xy2 - wz2;
 
  177  result[5] = 1.0 - xx2 - zz2;
 
  178  result[9] = yz2 + wx2;
 
  181  result[2] = xz2 + wy2;
 
  182  result[6] = yz2 - wx2;
 
  183  result[10] = 1.0 - xx2 - yy2;
 
  196  const XrQuaternionf& xrQuat = xrPose.orientation;
 
  197  const XrVector3f& xrPos = xrPose.position;
 
  199  double* elems = result->
GetData();
 
  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";
 
  226      return "UNRECOGNIZED_ACTION_TYPE";
 
  232  const XrViewConfigurationType& viewConfigType)
 
  234  switch (viewConfigType)
 
  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";
 
  245      return "UNRECOGNIZED_VIEW_CONFIGURATION_TYPE";
 
  251  const XrStructureType& structureType)
 
  253  switch (structureType)
 
  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";
 
  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";
 
  502      return "UNRECOGNIZED_XR_TYPE";
 
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
 
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.