VTK  9.2.6
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=========================================================================*/
54
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
OpenVR device model.
OpenVR overlay.
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.
vr::IVRRenderModels * OpenVRRenderModels
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.
window superclass for vtkRenderWindow
Definition vtkWindow.h:39
vtkEventDataDevice
platform-independent event data structures