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
46VTK_ABI_NAMESPACE_BEGIN
47class vtkMatrix4x4;
48class vtkOpenVRModel;
49
50class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindow : public vtkVRRenderWindow
51{
52public:
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
136protected:
139
140 std::string GetWindowTitleFromAPI() override;
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
162private:
164 void operator=(const vtkOpenVRRenderWindow&) = delete;
165};
166
167VTK_ABI_NAMESPACE_END
168#endif
represent and manipulate 4x4 transformation matrices
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()
void RenderFramebuffer(FramebufferDesc &framebufferDesc) override
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)
~vtkOpenVRRenderWindow() override
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.
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.
vtkEventDataDevice
platform-independent event data structures