13#ifndef vtkOpenXRManager_h 
   14#define vtkOpenXRManager_h 
   16#include "vtkRenderingOpenXRModule.h"  
   29VTK_ABI_NAMESPACE_BEGIN
 
   42    return UniqueInstance;
 
  107    return static_cast<uint32_t
>(this->RenderResources->ConfigViews.size());
 
  127    if (eye >= this->GetViewCount())
 
  131    return &(this->RenderResources->Views[eye].pose);
 
  143    if (eye >= this->GetViewCount())
 
  147    return &(this->RenderResources->Views[eye].fov);
 
  252  bool CreateActionSet(
const std::string& actionSetName, 
const std::string& localizedActionSetName);
 
  286    Action_t& actionT, 
const std::string& name, 
const std::string& localizedName);
 
  294    const std::string& profile, std::vector<XrActionSuggestedBinding>& actionSuggestedBindings);
 
  322    float duration = 25000000.0f, 
float frequency = XR_FREQUENCY_UNSPECIFIED);
 
  331    NumberOfControllers = 4
 
  344    } States[ControllerIndex::NumberOfControllers];
 
  346    XrSpace PoseSpaces[ControllerIndex::NumberOfControllers];
 
  347    XrSpaceLocation PoseLocations[ControllerIndex::NumberOfControllers];
 
  348    XrSpaceVelocity PoseVelocities[ControllerIndex::NumberOfControllers];
 
  446    XrSwapchainCreateFlags createFlags, XrSwapchainUsageFlags usageFlags);
 
  463    const XrPosef& poseInActionSpace, XrSpace& space);
 
  482  constexpr static XrFormFactor FormFactor = XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY;
 
  485  constexpr static XrViewConfigurationType ViewType = XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO;
 
  488  constexpr static uint32_t StereoViewCount = 2;
 
  493  XrReferenceSpaceType ReferenceSpaceType = XR_REFERENCE_SPACE_TYPE_STAGE;
 
  513  bool RenderingBackendExtensionSupported = 
false;
 
  522    bool DepthExtensionSupported{ 
false };
 
  523    bool ControllerModelExtensionSupported{ 
false };
 
  524    bool UnboundedRefSpaceSupported{ 
false };
 
  525    bool SpatialAnchorSupported{ 
false };
 
  526    bool HandInteractionSupported{ 
false };
 
  527    bool HandTrackingSupported{ 
false };
 
  528    bool RemotingSupported{ 
false };
 
  529  } OptionalExtensions;
 
  541    uint32_t Height{ 0 };
 
  553    XrViewState ViewState{ XR_TYPE_VIEW_STATE };
 
  565  std::unique_ptr<RenderResources_t> RenderResources{};
 
  572  XrActionSet* ActiveActionSet = 
nullptr;
 
  580  bool SessionRunning = 
false;
 
  583  bool ShouldRenderCurrentFrame = 
false;
 
  586  bool StorePoseVelocities = 
false;
 
OpenXR manager connection no-op implementation.
 
OpenXR manager graphics implementation.
 
Singleton class that holds a collection of utility functions and member variables to communicate with...
 
const XrInstance & GetXrRuntimeInstance()
Return the instance used to communicate with the runtime.
 
void PrintViewConfigViewInfo(const std::vector< XrViewConfigurationView > &)
Utility functions to print information about OpenXR manager internal structures.
 
bool CreateOneActionSpace(const XrAction &action, const XrPath &subactionPath, const XrPosef &poseInActionSpace, XrSpace &space)
For pose actions, we must create an action space to locate it.
 
XrTime PredictedDisplayTime
Store the frame predicted display time in WaitAndBeginFrame To get the action data at this time and t...
 
bool Initialize(vtkOpenGLRenderWindow *)
Initialize the OpenXR SDK to render images in a virtual reality device.
 
bool BeginSession()
Start the OpenXR session.
 
void PrintOptionalExtensions()
Print the optional extensions which were found and enabled.
 
const XrPosef * GetViewPose(uint32_t eye)
Returns a pointer to the view pose that contains the view orientation and position for the specified ...
 
bool GetShouldRenderCurrentFrame()
Return true if the current frame should be rendered.
 
vtkOpenXRManagerGraphics * GetGraphicsStrategy()
Set/Get the rendering backend strategy.
 
void PrintInstanceProperties()
Utility functions to print information about OpenXR manager internal structures.
 
void PrintSystemProperties(XrSystemProperties *system_properties)
Utility functions to print information about OpenXR manager internal structures.
 
bool WaitAndBeginFrame()
This function is used to start a frame.
 
std::tuple< int64_t, int64_t > SelectSwapchainPixelFormats()
During the creation of the swapchains, we need to check the runtime available pixels formats,...
 
bool AttachSessionActionSets()
Attach all action sets in the ActionSets vector to the session.
 
~vtkOpenXRManager()=default
 
bool IsSessionRunning()
Return true if the OpenXR session is currently running, ie.
 
const XrFovf * GetProjectionFov(uint32_t eye)
Returns a pointer to the projection field of view for the specified eye, or nullptr if eye exceeds or...
 
bool CreateSystem()
OpenXR System creation.
 
bool CreateReferenceSpace()
Creates the reference space of type ReferenceSpaceType that will be used to locate views.
 
void SetGraphicsStrategy(vtkOpenXRManagerGraphics *gs)
Set/Get the rendering backend strategy.
 
bool IsDepthExtensionSupported()
Return true if the runtime supports the depth extension.
 
std::tuple< uint32_t, uint32_t > GetRecommendedImageRectSize()
Return as a tuple the OpenXR recommended texture size to be sent to the device.
 
uint32_t GetViewCount()
Return the number of OpenXR views (typically one per physical display / eye)
 
XrPath GetXrPath(const std::string &path)
Get the XrPath from the well-formed string path.
 
uint32_t WaitAndAcquireSwapchainImage(const XrSwapchain &swapchainHandle)
When preparing the rendering for an eye, we must ask the runtime for a texture to draw in it.
 
vtkSmartPointer< vtkOpenXRManagerConnection > ConnectionStrategy
 
vtkOpenXRManagerConnection * GetConnectionStrategy()
Set/Get the connection strategy.
 
bool EndFrame()
Submit the composition layers for the predicted display time of the current frame.
 
bool CreateInstance()
OpenXR Instance creation.
 
bool PollEvent(XrEventDataBuffer &eventData)
Store in eventData the result of xrPollEvent.
 
static vtkOpenXRManager & GetInstance()
Return the singleton instance.
 
bool CreateOneAction(Action_t &actionT, const std::string &name, const std::string &localizedName)
Creates one action with name name and localizedName localizedName and store the action handle inside ...
 
uint32_t GetRecommendedSampleCount()
Return the recommended swapchain sample count.
 
std::array< XrPath, 2 > SubactionPaths
 
bool ApplyVibration(const Action_t &actionT, int hand, float amplitude=0.5f, float duration=25000000.0f, float frequency=XR_FREQUENCY_UNSPECIFIED)
Apply haptic vibration action to emit vibration on hand to emit on amplitude 0.0 to 1....
 
bool SyncActions()
Update the action states using the active action set.
 
bool CreateActionSet(const std::string &actionSetName, const std::string &localizedActionSetName)
Creates an action set and add it to the vector of action sets.
 
Swapchain_t CreateSwapchain(int64_t format, uint32_t width, uint32_t height, uint32_t sampleCount, XrSwapchainCreateFlags createFlags, XrSwapchainUsageFlags usageFlags)
Create an XrSwapchain handle used to present rendered image to the user with the given parameters for...
 
bool CreateSystemProperties()
Enable system properties such as hand tracking, and choose environment blend modes.
 
bool PrepareRendering(uint32_t eye, void *colorTextureId, void *depthTextureId)
Prepare the rendering resources for the specified eye and store in colorTextureId and in depthTexture...
 
std::string GetOpenXRPropertiesAsString()
Return the OpenXR properties as a string, with format "RuntimeName MAJOR.MINOR.PATCH".
 
void Finalize()
End the OpenXR session and destroy it and the OpenXR instance.
 
bool XrCheckOutput(OutputLevel level, const XrResult &, const std::string &message)
Utility function to check the XrResult, print the result message as a debug, warning or error message...
 
void SetConnectionStrategy(vtkOpenXRManagerConnection *cs)
Set/Get the connection strategy.
 
void ReleaseSwapchainImage(uint32_t eye)
When the rendering in a swapchain image is done, it must be released with this function.
 
bool SelectActiveActionSet(unsigned int index)
Selects the current active action set from the ActionSets vector using its index.
 
bool CreateConfigViews()
There is one configuration view per view, and it contains the recommended texture resolution in pixel...
 
XrSessionState SessionState
 
bool CreateSwapchains()
Swapchaines creation : there is one swapchain per view / display.
 
void DestroyActionSets()
Iterate over and destroy all action sets that have been created.
 
bool CreateSession()
Create the session and pass the GraphicsBinding to the next pointer of the XrSessionCreateInfo.
 
std::vector< XrActionSet > ActionSets
 
const XrSession & GetSession()
Return the OpenXR Session.
 
void PrintSupportedViewConfigs()
Utility functions to print information about OpenXR manager internal structures.
 
const std::array< XrPath, 2 > & GetSubactionPaths()
 
XrEnvironmentBlendMode EnvironmentBlendMode
 
bool LoadControllerModels()
 
bool UpdateActionData(Action_t &action_t, int hand)
Update the action data and store it in action_t.States for one hand.
 
bool SuggestActions(const std::string &profile, std::vector< XrActionSuggestedBinding > &actionSuggestedBindings)
Suggest actions stored in actionSuggestedBindings for the interaction profile profile.
 
bool CreateSubactionPaths()
Creates one subaction path for each hand.
 
bool PrintReferenceSpaces()
Utility functions to print information about OpenXR manager internal structures.
 
std::vector< const char * > SelectExtensions()
OpenXR Instance creation.
 
vtkSmartPointer< vtkOpenXRManagerGraphics > GraphicsStrategy
 
Hold a reference to a vtkObjectBase instance.
 
XrActionStateFloat _float
 
XrActionStateVector2f _vec2f
 
XrActionStateBoolean _boolean
 
This struct stores all needed information to render the images and send it to the user We can't make ...
 
std::vector< XrView > Views
 
std::vector< Swapchain_t > ColorSwapchains
 
std::vector< XrViewConfigurationView > ConfigViews
 
std::vector< Swapchain_t > DepthSwapchains
 
std::vector< XrCompositionLayerProjectionView > ProjectionLayerViews
 
std::vector< XrCompositionLayerDepthInfoKHR > DepthInfoViews
 
Swapchain structure storing information common to all rendering backend.
 
Defines the OpenXR types and extensions common to all platforms.