VTK  9.3.0
vtkOpenVRRenderWindow.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
35 #ifndef vtkOpenVRRenderWindow_h
36 #define vtkOpenVRRenderWindow_h
37 
38 #include "vtkEventData.h" // for enums
39 #include "vtkOpenVROverlay.h" // used for ivars
40 #include "vtkRenderingOpenVRModule.h" // For export macro
41 #include "vtkSmartPointer.h" // used for ivars
42 #include "vtkVRRenderWindow.h"
43 
44 #include <openvr.h> // for ivars
45 
46 VTK_ABI_NAMESPACE_BEGIN
47 class vtkMatrix4x4;
48 class vtkOpenVRModel;
49 
50 class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindow : public vtkVRRenderWindow
51 {
52 public:
55 
59  static bool IsHMDPresent();
60 
64  void Initialize() override;
65 
71  void Finalize() override;
72 
76  vr::IVRSystem* GetHMD() { return this->HMD; }
77 
82 
87  void Render() override;
88 
93  void StereoMidpoint() override;
94 
99  void StereoRenderComplete() override;
100 
105 
106  /*
107  * Get the overlay to use on the VR dashboard.
108  */
110 
116  void UpdateHMDMatrixPose() override;
117 
121  void SetMatrixFromOpenVRPose(vtkMatrix4x4* result, const vr::TrackedDevicePose_t& vrPose);
122 
126  vr::IVRRenderModels* GetOpenVRRenderModels() { return this->OpenVRRenderModels; }
127 
131  void RenderModels() override;
132 
133  uint32_t GetDeviceHandleForOpenVRHandle(vr::TrackedDeviceIndex_t index);
134  vtkEventDataDevice GetDeviceForOpenVRHandle(vr::TrackedDeviceIndex_t ohandle);
135 
136 protected:
139 
141  bool GetSizeFromAPI() override;
142 
143  bool CreateFramebuffers(uint32_t viewCount = 2) override;
144  void RenderFramebuffer(FramebufferDesc& framebufferDesc) override;
145  bool CreateOneFramebuffer(int nWidth, int nHeight, FramebufferDesc& framebufferDesc);
146 
150  std::string GetTrackedDeviceString(vr::IVRSystem* pHmd, vr::TrackedDeviceIndex_t unDevice,
151  vr::TrackedDeviceProperty prop, vr::TrackedPropertyError* peError = nullptr);
152 
156  vtkOpenVRModel* FindOrLoadRenderModel(const char* modelName);
157 
159  vr::IVRSystem* HMD = nullptr;
160  vr::IVRRenderModels* OpenVRRenderModels = nullptr;
161 
162 private:
164  void operator=(const vtkOpenVRRenderWindow&) = delete;
165 };
166 
167 VTK_ABI_NAMESPACE_END
168 #endif
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:31
OpenVR device model.
OpenVR overlay.
OpenVR rendering window.
vtkEventDataDevice GetDeviceForOpenVRHandle(vr::TrackedDeviceIndex_t ohandle)
bool GetSizeFromAPI() override
Attempt to get the size of the display from the API and store it in this->Size.
void UpdateHMDMatrixPose() override
Update the HMD pose based on hardware pose and physical to world transform.
vr::IVRRenderModels * GetOpenVRRenderModels()
Get the openVR Render Models.
void RenderFramebuffer(FramebufferDesc &framebufferDesc) override
void RenderModels() override
Render the controller and base station models.
uint32_t GetDeviceHandleForOpenVRHandle(vr::TrackedDeviceIndex_t index)
std::string GetWindowTitleFromAPI() override
bool CreateOneFramebuffer(int nWidth, int nHeight, FramebufferDesc &framebufferDesc)
~vtkOpenVRRenderWindow() override
static vtkOpenVRRenderWindow * New()
bool CreateFramebuffers(uint32_t viewCount=2) override
void StereoRenderComplete() override
Handles work required once both views have been rendered when using stereo rendering.
void SetMatrixFromOpenVRPose(vtkMatrix4x4 *result, const vr::TrackedDevicePose_t &vrPose)
Convert an OpenVR pose struct to a vtkMatrix4x4 object.
void RenderOverlay()
Draw the overlay.
void Finalize() override
Finalize the rendering window.
vtkSmartPointer< vtkOpenVROverlay > DashboardOverlay
void StereoMidpoint() override
Intermediate method performs operations required between the rendering of the left and right eye.
vtkGetSmartPointerMacro(DashboardOverlay, vtkOpenVROverlay)
void Initialize() override
Initialize the rendering window.
vtkRenderWindowInteractor * MakeRenderWindowInteractor() override
Create an interactor specific to OpenVR to control renderers in this window.
std::string GetTrackedDeviceString(vr::IVRSystem *pHmd, vr::TrackedDeviceIndex_t unDevice, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError *peError=nullptr)
Convert a device index to a human-readable string.
vr::IVRSystem * GetHMD()
Get the system pointer.
vtkOpenVRModel * FindOrLoadRenderModel(const char *modelName)
Find a render model that has already been loaded or load a new one.
void Render() override
Overridden to not release resources that would interfere with an external application's rendering.
static bool IsHMDPresent()
Returns true if the system believes that an HMD is present on the system.
platform-independent render window interaction including picking and frame rate control.
VR rendering window.
@ index
Definition: vtkX3D.h:246
@ string
Definition: vtkX3D.h:490
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:15