VTK  9.2.5
vtkOpenVRRenderWindow.h
Go to the documentation of this file.
1/*=========================================================================
2
3Program: Visualization Toolkit
4Module: vtkOpenVRRenderWindow.h
5
6Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7All rights reserved.
8See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9
10This software is distributed WITHOUT ANY WARRANTY; without even
11the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
55#ifndef vtkOpenVRRenderWindow_h
56#define vtkOpenVRRenderWindow_h
57
58#include "vtkEventData.h" // for enums
59#include "vtkOpenVROverlay.h" // used for ivars
60#include "vtkRenderingOpenVRModule.h" // For export macro
61#include "vtkSmartPointer.h" // used for ivars
62#include "vtkVRRenderWindow.h"
63
64#include <openvr.h> // for ivars
65
66class vtkMatrix4x4;
67class vtkOpenVRModel;
68
69class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindow : public vtkVRRenderWindow
70{
71public:
74
78 static bool IsHMDPresent();
79
83 void Initialize() override;
84
89 void ReleaseGraphicsResources(vtkWindow* renWin) override;
90
94 vr::IVRSystem* GetHMD() { return this->HMD; }
95
100
105 void Render() override;
106
111 void StereoMidpoint() override;
112
117 void StereoRenderComplete() override;
118
123
124 /*
125 * Get the overlay to use on the VR dashboard.
126 */
128
134 void UpdateHMDMatrixPose() override;
135
139 void SetMatrixFromOpenVRPose(vtkMatrix4x4* result, const vr::TrackedDevicePose_t& vrPose);
140
144 vr::IVRRenderModels* GetOpenVRRenderModels() { return this->OpenVRRenderModels; }
145
149 void RenderModels() override;
150
151 uint32_t GetDeviceHandleForOpenVRHandle(vr::TrackedDeviceIndex_t index);
152 vtkEventDataDevice GetDeviceForOpenVRHandle(vr::TrackedDeviceIndex_t ohandle);
153
154protected:
156 ~vtkOpenVRRenderWindow() override = default;
157
158 std::string GetWindowTitleFromAPI() override;
159 bool GetSizeFromAPI() override;
160
161 bool CreateFramebuffers(uint32_t viewCount = 2) override;
162 bool CreateOneFramebuffer(int nWidth, int nHeight, FramebufferDesc& framebufferDesc);
163
167 std::string GetTrackedDeviceString(vr::IVRSystem* pHmd, vr::TrackedDeviceIndex_t unDevice,
168 vr::TrackedDeviceProperty prop, vr::TrackedPropertyError* peError = nullptr);
169
173 vtkOpenVRModel* FindOrLoadRenderModel(const char* modelName);
174
176 vr::IVRSystem* HMD = nullptr;
177 vr::IVRRenderModels* OpenVRRenderModels = nullptr;
178
179private:
181 void operator=(const vtkOpenVRRenderWindow&) = delete;
182};
183
184#endif
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:42
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::IVRSystem * GetHMD()
Get the system pointer.
static vtkOpenVRRenderWindow * New()
~vtkOpenVRRenderWindow() override=default
vtkRenderWindowInteractor * MakeRenderWindowInteractor() override
Create an interactor specific to OpenVR to control renderers in this window.
void RenderModels() override
Render the controller and base station models.
vr::IVRRenderModels * GetOpenVRRenderModels()
Get the openVR Render Models.
uint32_t GetDeviceHandleForOpenVRHandle(vr::TrackedDeviceIndex_t index)
std::string GetWindowTitleFromAPI() override
vtkOpenVRModel * FindOrLoadRenderModel(const char *modelName)
Find a render model that has already been loaded or load a new one.
bool CreateOneFramebuffer(int nWidth, int nHeight, FramebufferDesc &framebufferDesc)
bool CreateFramebuffers(uint32_t viewCount=2) override
void StereoRenderComplete() override
Handles work required once both views have been rendered when using stereo rendering.
void ReleaseGraphicsResources(vtkWindow *renWin) override
Free up any graphics resources associated with this window a value of nullptr means the context may a...
void SetMatrixFromOpenVRPose(vtkMatrix4x4 *result, const vr::TrackedDevicePose_t &vrPose)
Convert an OpenVR pose struct to a vtkMatrix4x4 object.
void RenderOverlay()
Draw the overlay.
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.
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.
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.
Hold a reference to a vtkObjectBase instance.
VR rendering window.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:39
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:26