VTK
vtkOpenVRRenderWindow.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3 Program: Visualization Toolkit
4 
5 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
6 All rights reserved.
7 See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
8 
9 This software is distributed WITHOUT ANY WARRANTY; without even
10 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11 PURPOSE. See the above copyright notice for more information.
12 
13 =========================================================================*/
39 #ifndef vtkOpenVRRenderWindow_h
40 #define vtkOpenVRRenderWindow_h
41 
42 #include "vtkRenderingOpenVRModule.h" // For export macro
43 #include "vtkOpenGLRenderWindow.h"
44 
45 #include <openvr.h> // for ivars
46 #include <vector> // ivars
47 #include "vtkOpenGLHelper.h" // used for ivars
48 #include "vtk_glew.h" // used for methods
49 #include "vtkEventData.h" // for enums
50 
51 class vtkCamera;
52 class vtkOpenVRModel;
53 class vtkOpenVROverlay;
55 class vtkTransform;
56 
57 class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindow : public vtkOpenGLRenderWindow
58 {
59 public:
60  static vtkOpenVRRenderWindow *New();
62  void PrintSelf(ostream& os, vtkIndent indent);
63 
67  vr::IVRSystem *GetHMD() { return this->HMD; };
68 
72  void RenderOverlay();
73 
75 
78  vtkGetObjectMacro(DashboardOverlay, vtkOpenVROverlay);
79  void SetDashboardOverlay(vtkOpenVROverlay *);
81 
85  void UpdateHMDMatrixPose();
86 
88 
92  { return this->LeftEyeDesc.m_nRenderFramebufferId; };
94  { return this->LeftEyeDesc.m_nResolveFramebufferId; };
96  { return this->RightEyeDesc.m_nRenderFramebufferId; };
98  { return this->RightEyeDesc.m_nResolveFramebufferId; };
99  void GetRenderBufferSize(int &width, int &height)
100  {
101  width = this->Size[0];
102  height = this->Size[1];
103  };
105 
109  vtkOpenVRModel *GetTrackedDeviceModel(vtkEventDataDevice idx);
110  vtkOpenVRModel *GetTrackedDeviceModel(vr::TrackedDeviceIndex_t idx) {
111  return this->TrackedDeviceToRenderModel[idx]; };
112 
116  vr::IVRRenderModels * GetOpenVRRenderModels() {
117  return this->OpenVRRenderModels; };
118 
122  vr::TrackedDeviceIndex_t GetTrackedDeviceIndexForDevice(vtkEventDataDevice dev);
123 
127  void GetTrackedDevicePose(vtkEventDataDevice idx, vr::TrackedDevicePose_t **pose);
128  vr::TrackedDevicePose_t &GetTrackedDevicePose(vr::TrackedDeviceIndex_t idx) {
129  return this->TrackedDevicePose[idx]; };
130 
139  void InitializeViewFromCamera(vtkCamera *cam);
140 
142 
147  vtkSetVector3Macro(PhysicalViewDirection, double);
148  vtkSetVector3Macro(PhysicalViewUp, double);
149  vtkGetVector3Macro(PhysicalViewDirection, double);
150  vtkGetVector3Macro(PhysicalViewUp, double);
151  vtkSetVector3Macro(PhysicalTranslation, double);
152  vtkGetVector3Macro(PhysicalTranslation, double);
153  vtkSetMacro(PhysicalScale, double);
154  vtkGetMacro(PhysicalScale, double);
156 
158 
162  vtkSetMacro(TrackHMD, bool);
163  vtkGetMacro(TrackHMD, bool);
165 
169  virtual void Start(void);
170 
175  virtual void StereoUpdate();
176 
181  virtual void StereoMidpoint();
182 
187  virtual void StereoRenderComplete();
188 
192  void Frame(void);
193 
200  virtual void Initialize(void);
201 
207  virtual void Finalize(void);
208 
212  void MakeCurrent();
213 
217  virtual bool IsCurrent();
218 
222  const char *ReportCapabilities() { return "OpenVR System";};
223 
227  int IsDirect() { return 1; };
228 
234  virtual int GetEventPending() { return 0;};
235 
239  virtual int *GetScreenSize();
240 
242 
245  virtual void SetSize(int,int);
246  virtual void SetSize(int a[2]) {vtkOpenGLRenderWindow::SetSize(a);};
248 
250 
253  virtual void SetPosition(int,int);
254  virtual void SetPosition(int a[2]) {vtkOpenGLRenderWindow::SetPosition(a);};
256 
257  // implement required virtual functions
258  void SetWindowInfo(char *) {};
259  void SetNextWindowInfo(char *) {};
260  void SetParentInfo(char *) {};
261  virtual void *GetGenericDisplayId() {return (void *)this->HelperWindow->GetGenericDisplayId();};
262  virtual void *GetGenericWindowId() {return (void *)this->HelperWindow->GetGenericWindowId();};
263  virtual void *GetGenericParentId() {return (void *)nullptr;};
264  virtual void *GetGenericContext() { return (void *)this->HelperWindow->GetGenericContext(); };
265  virtual void *GetGenericDrawable() {return (void *)this->HelperWindow->GetGenericDrawable();};
266  virtual void SetDisplayId(void *) {};
267  void SetWindowId(void *) {};
268  void SetParentId(void *) {};
269  void HideCursor() {};
270  void ShowCursor() {};
271  virtual void SetFullScreen(int) {};
272  virtual void WindowRemap(void) {};
273  virtual void SetNextWindowId(void *) {};
274 
278  virtual int SupportsOpenGL() { return 1; };
279 
284  void Render();
285 
289  vtkGetObjectMacro(HelperWindow, vtkOpenGLRenderWindow);
290  void SetHelperWindow(vtkOpenGLRenderWindow *val);
291 
292 protected:
295 
301 
302  virtual void CreateAWindow() {};
303  virtual void DestroyWindow() {};
304 
305  std::string m_strDriver;
307  vr::IVRSystem *HMD;
308  vr::IVRRenderModels *OpenVRRenderModels;
309 
311  {
317  };
320  bool CreateFrameBuffer( int nWidth, int nHeight,
321  FramebufferDesc &framebufferDesc );
322 
323  // convert a device index to a human string
324  std::string GetTrackedDeviceString(
325  vr::IVRSystem *pHmd,
326  vr::TrackedDeviceIndex_t unDevice,
327  vr::TrackedDeviceProperty prop,
328  vr::TrackedPropertyError *peError = nullptr );
329 
330  // devices may have polygonal models
331  // load them
332  vtkOpenVRModel *FindOrLoadRenderModel(const char *modelName );
333  void RenderModels();
334  std::vector<vtkOpenVRModel * > VTKRenderModels;
335  vtkOpenVRModel *TrackedDeviceToRenderModel[ vr::k_unMaxTrackedDeviceCount ];
336  vr::TrackedDevicePose_t TrackedDevicePose[ vr::k_unMaxTrackedDeviceCount ];
337 
338  // used in computing the pose
340  double PhysicalViewDirection[3];
341  double PhysicalViewUp[3];
342  double PhysicalTranslation[3];
344 
345  // for the overlay
347 
348  bool TrackHMD;
349 
351 
352 
353 private:
355  void operator=(const vtkOpenVRRenderWindow&) = delete;
356 };
357 
358 
359 #endif
OpenGL rendering window.
virtual void Finalize()=0
Finalize the rendering process.
int IsDirect()
Is this render window using hardware acceleration? 0-false, 1-true.
virtual void SetPosition(int a[2])
Set the position of the window.
vr::TrackedDevicePose_t & GetTrackedDevicePose(vr::TrackedDeviceIndex_t idx)
virtual void * GetGenericParentId()
Dummy stubs for vtkWindow API.
static vtkRenderWindow * New()
Construct an instance of vtkRenderWindow with its screen size set to 300x300, borders turned on,...
virtual int * GetScreenSize()=0
Get the current size of the screen in pixels.
virtual void SetNextWindowId(void *)
Dummy stubs for vtkWindow API.
vr::IVRRenderModels * OpenVRRenderModels
virtual void SetDisplayId(void *)
Dummy stubs for vtkWindow API.
vtkOpenVROverlay * DashboardOverlay
vtkOpenVRModel * GetTrackedDeviceModel(vr::TrackedDeviceIndex_t idx)
virtual int SupportsOpenGL()
Does this render window support OpenGL? 0-false, 1-true.
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:54
void Render() override
Ask each renderer owned by this RenderWindow to render its image and synchronize this process.
void GetRenderBufferSize(int &width, int &height)
Get the frame buffers used for rendering.
virtual void WindowRemap(void)
Remap the rendering window.
void SetWindowId(void *)
Dummy stubs for vtkWindow API.
void SetParentInfo(char *)
Dummy stubs for vtkWindow API.
void ShowCursor()
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...
void SetParentId(void *)
Dummy stubs for vtkWindow API.
vr::IVRRenderModels * GetOpenVRRenderModels()
Get the openVR Render Models.
virtual bool IsCurrent()=0
Tells if this window is the current graphics context for the calling thread.
virtual void CreateAWindow()
Create a not-off-screen window.
GLuint GetRightResolveBufferId()
Get the frame buffers used for rendering.
void SetWindowInfo(char *)
Dummy stubs for vtkWindow API.
a simple class to control print indentation
Definition: vtkIndent.h:33
virtual void DestroyWindow()=0
Destroy a not-off-screen window.
a virtual camera for 3D rendering
Definition: vtkCamera.h:44
OpenVR overlay.
const char * ReportCapabilities()
Get report of capabilities for the render window.
void SetNextWindowInfo(char *)
Dummy stubs for vtkWindow API.
virtual void StereoUpdate()
Update the system, if needed, due to stereo rendering.
vtkEventDataDevice
platform-independent event data structures
Definition: vtkEventData.h:25
vtkOpenGLRenderWindow * HelperWindow
virtual void Frame()=0
A termination method performed at the end of the rendering process to do things like swapping buffers...
virtual int GetEventPending()
Check to see if a mouse button has been pressed or mouse wheel activated.
OpenVR rendering window.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void StereoRenderComplete()
Handles work required once both views have been rendered when using stereo rendering.
create a window for renderers to draw into
void SetSize(int a[2]) override
Set the size of the window in screen coordinates in pixels.
GLuint GetLeftRenderBufferId()
Get the frame buffers used for rendering.
virtual void StereoMidpoint()
Intermediate method performs operations required between the rendering of the left and right eye.
virtual void Start()=0
Initialize the rendering process.
virtual void * GetGenericContext()
Dummy stubs for vtkWindow API.
virtual void * GetGenericDrawable()
Dummy stubs for vtkWindow API.
GLuint GetRightRenderBufferId()
Get the frame buffers used for rendering.
virtual void SetPosition(int, int)
Set/Get the position in screen coordinates of the rendering window.
GLuint GetLeftResolveBufferId()
Get the frame buffers used for rendering.
std::vector< vtkOpenVRModel * > VTKRenderModels
virtual void * GetGenericDisplayId()
Dummy stubs for vtkWindow API.
virtual void ReleaseGraphicsResources(vtkRenderWindow *)
Free up any graphics resources associated with this window a value of NULL means the context may alre...
virtual void Initialize(void)
Initialize the rendering window.
virtual void * GetGenericWindowId()
Dummy stubs for vtkWindow API.
virtual void SetSize(int a[2])
Set the size of the window in pixels.
void MakeCurrent() override=0
Attempt to make this window the current graphics context for the calling thread.
OpenVR device model.
virtual void SetFullScreen(int)
Turn on/off rendering full screen window size.
vr::IVRSystem * GetHMD()
Get the system pointer.
void HideCursor()
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...