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 =========================================================================*/
42 #ifndef vtkOpenVRRenderWindow_h
43 #define vtkOpenVRRenderWindow_h
44 
45 #include "vtkRenderingOpenVRModule.h" // For export macro
46 #include "vtkOpenGLRenderWindow.h"
47 
48 #define SDL_MAIN_HANDLED
49 #include <SDL.h> // for ivars
50 #include <openvr.h> // for ivars
51 #include <vector> // ivars
52 #include "vtkOpenGLHelper.h" // used for ivars
53 #include "vtk_glew.h" // used for methods
54 
55 class vtkOpenVRModel;
57 class vtkTransform;
58 
59 class VTKRENDERINGOPENVR_EXPORT vtkOpenVRRenderWindow : public vtkOpenGLRenderWindow
60 {
61 public:
64  void PrintSelf(ostream& os, vtkIndent indent);
65 
69  virtual void Start(void);
70 
75  virtual void StereoUpdate();
76 
81  virtual void StereoMidpoint();
82 
87  virtual void StereoRenderComplete();
88 
92  void Frame(void);
93 
100  virtual void Initialize(void);
101 
107  virtual void Finalize(void);
108 
112  void MakeCurrent();
113 
117  virtual bool IsCurrent();
118 
122  const char *ReportCapabilities() { return "OpenVR System";};
123 
127  int IsDirect() { return 1; };
128 
134  virtual int GetEventPending() { return 0;};
135 
139  void Clean();
140 
144  virtual int *GetScreenSize();
145 
147 
150  virtual void SetSize(int,int);
151  virtual void SetSize(int a[2]) {vtkOpenGLRenderWindow::SetSize(a);};
153 
155 
158  virtual void SetPosition(int,int);
159  virtual void SetPosition(int a[2]) {vtkOpenGLRenderWindow::SetPosition(a);};
161 
162  // implement required virtual functions
163  void SetWindowInfo(char *) {};
164  void SetNextWindowInfo(char *) {};
165  void SetParentInfo(char *) {};
166  virtual void *GetGenericDisplayId() {return (void *)this->ContextId;};
167  virtual void *GetGenericWindowId() {return (void *)this->WindowId;};
168  virtual void *GetGenericParentId() {return (void *)NULL;};
169  virtual void *GetGenericContext() {return (void *)this->ContextId;};
170  virtual void *GetGenericDrawable() {return (void *)this->WindowId;};
171  virtual void SetDisplayId(void *) {};
172  void SetWindowId(void *) {};
173  void SetParentId(void *) {};
174  void HideCursor() {};
175  void ShowCursor() {};
176  virtual void SetFullScreen(int) {};
177  virtual void WindowRemap(void) {};
178  virtual void SetNextWindowId(void *) {};
179 
183  vr::IVRSystem *GetHMD() { return this->HMD; };
184 
189 
193  virtual int SupportsOpenGL() { return 1; };
194 
196 
200  { return this->LeftEyeDesc.m_nRenderFramebufferId; };
202  { return this->LeftEyeDesc.m_nResolveFramebufferId; };
204  { return this->RightEyeDesc.m_nRenderFramebufferId; };
206  { return this->RightEyeDesc.m_nResolveFramebufferId; };
207  void GetRenderBufferSize(int &width, int &height) {
208  width = this->RenderWidth; height = this->RenderHeight; };
210 
215  void Render();
216 
220  vr::TrackedDevicePose_t &GetTrackedDevicePose(vr::TrackedDeviceIndex_t idx) {
221  return this->TrackedDevicePose[idx]; };
222 
223 protected:
226 
232 
233  virtual void CreateAWindow() {};
234  virtual void DestroyWindow() {};
235 
236  SDL_Window *WindowId;
237  SDL_GLContext ContextId;
240  vr::IVRSystem *HMD;
241  vr::IVRRenderModels *OpenVRRenderModels;
242 
244  {
250  };
253  bool CreateFrameBuffer( int nWidth, int nHeight,
254  FramebufferDesc &framebufferDesc );
255 
256  // resolution to render to for FBOs
257  // (as opposed to the window)
258  uint32_t RenderWidth;
259  uint32_t RenderHeight;
260 
262 
270 
271  // convert a device index to a human string
273  vr::IVRSystem *pHmd,
274  vr::TrackedDeviceIndex_t unDevice,
275  vr::TrackedDeviceProperty prop,
276  vr::TrackedPropertyError *peError = NULL );
277 
278  // devices may have polygonal models
279  // load them
280  vtkOpenVRModel *FindOrLoadRenderModel(const char *modelName );
281  void RenderModels();
282  std::vector<vtkOpenVRModel * > VTKRenderModels;
283  vtkOpenVRModel *TrackedDeviceToRenderModel[ vr::k_unMaxTrackedDeviceCount ];
284  vr::TrackedDevicePose_t TrackedDevicePose[ vr::k_unMaxTrackedDeviceCount ];
285 
286  // used in computing the pose
288 
289 private:
290  vtkOpenVRRenderWindow(const vtkOpenVRRenderWindow&); // Not implemented.
291  void operator=(const vtkOpenVRRenderWindow&); // Not implemented.
292 };
293 
294 
295 #endif
vtkOpenVRRenderWindow::Finalize
virtual void Finalize(void)
Finalize the rendering window.
vtkOpenVRRenderWindow::ContextId
SDL_GLContext ContextId
Definition: vtkOpenVRRenderWindow.h:237
vtkOpenVRRenderWindow::SetWindowId
void SetWindowId(void *)
Definition: vtkOpenVRRenderWindow.h:172
vtkOpenVRRenderWindow::RenderHeight
uint32_t RenderHeight
Definition: vtkOpenVRRenderWindow.h:259
vtkOpenVRRenderWindow::GetRenderBufferSize
void GetRenderBufferSize(int &width, int &height)
Definition: vtkOpenVRRenderWindow.h:207
vtkOpenVRRenderWindow::StereoRenderComplete
virtual void StereoRenderComplete()
Handles work required once both views have been rendered when using stereo rendering.
vtkOpenVRRenderWindow::DestroyWindow
virtual void DestroyWindow()
Destroy a not-off-screen window.
Definition: vtkOpenVRRenderWindow.h:234
vtkOpenVRRenderWindow::StereoUpdate
virtual void StereoUpdate()
Update the system, if needed, due to stereo rendering.
vtkOpenVRRenderWindow::GetLeftResolveBufferId
GLuint GetLeftResolveBufferId()
Definition: vtkOpenVRRenderWindow.h:201
vtkOpenVRRenderWindow::GetTrackedDeviceString
std::string GetTrackedDeviceString(vr::IVRSystem *pHmd, vr::TrackedDeviceIndex_t unDevice, vr::TrackedDeviceProperty prop, vr::TrackedPropertyError *peError=NULL)
vtkOpenVRRenderWindow::Initialize
virtual void Initialize(void)
Initialize the rendering window.
vtkOpenVRRenderWindow::MakeCurrent
void MakeCurrent()
Make this windows OpenGL context the current context.
vtkOpenVRRenderWindow::GetGenericParentId
virtual void * GetGenericParentId()
Definition: vtkOpenVRRenderWindow.h:168
vtkOpenVRRenderWindow::FramebufferDesc::m_nRenderFramebufferId
GLuint m_nRenderFramebufferId
Definition: vtkOpenVRRenderWindow.h:247
vtkOpenGLHelper.h
vtkOpenVRRenderWindow::ReportCapabilities
const char * ReportCapabilities()
Get report of capabilities for the render window.
Definition: vtkOpenVRRenderWindow.h:122
vtkOpenVRRenderWindow::IsCurrent
virtual bool IsCurrent()
Tells if this window is the current OpenGL context for the calling thread.
vtkOpenVRRenderWindow::HMDTransform
vtkTransform * HMDTransform
Definition: vtkOpenVRRenderWindow.h:287
vtkOpenVRRenderWindow::SetNextWindowInfo
void SetNextWindowInfo(char *)
Definition: vtkOpenVRRenderWindow.h:164
vtkOpenVRRenderWindow::ReleaseGraphicsResources
virtual void ReleaseGraphicsResources(vtkRenderWindow *)
Free up any graphics resources associated with this window a value of NULL means the context may alre...
vtkOpenVRRenderWindow::vtkOpenVRRenderWindow
vtkOpenVRRenderWindow()
vtkTransform
describes linear transformations via a 4x4 matrix
Definition: vtkTransform.h:61
vtkOpenVRRenderWindow::SetupDistortion
void SetupDistortion()
Handle lens distortion.
vtkOpenVRRenderWindow::FramebufferDesc::m_nRenderTextureId
GLuint m_nRenderTextureId
Definition: vtkOpenVRRenderWindow.h:246
vtkOpenVRRenderWindow::WindowId
SDL_Window * WindowId
Definition: vtkOpenVRRenderWindow.h:234
vtkOpenVRRenderWindow::Frame
void Frame(void)
End the rendering process and display the image.
vtkOpenVRRenderWindow::VTKRenderModels
std::vector< vtkOpenVRModel * > VTKRenderModels
Definition: vtkOpenVRRenderWindow.h:282
vtkOpenVRRenderWindow::SetPosition
virtual void SetPosition(int, int)
Set the position of the window.
vtkOpenVRRenderWindow::Start
virtual void Start(void)
Begin the rendering process.
vtkOpenVRRenderWindow::CreateFrameBuffer
bool CreateFrameBuffer(int nWidth, int nHeight, FramebufferDesc &framebufferDesc)
vtkOpenVRRenderWindow::GetTrackedDevicePose
vr::TrackedDevicePose_t & GetTrackedDevicePose(vr::TrackedDeviceIndex_t idx)
Get the most recent pose of any tracked devices.
Definition: vtkOpenVRRenderWindow.h:220
vtkOpenVRRenderWindow::SetSize
virtual void SetSize(int a[2])
Set the size of the window in screen coordinates in pixels.
Definition: vtkOpenVRRenderWindow.h:151
vtkOpenVRRenderWindow::LeftEyeDesc
FramebufferDesc LeftEyeDesc
Definition: vtkOpenVRRenderWindow.h:251
vtkOpenVRRenderWindow::SetParentInfo
void SetParentInfo(char *)
Definition: vtkOpenVRRenderWindow.h:165
vtkX3D::height
@ height
Definition: vtkX3D.h:254
vtkOpenVRRenderWindow::GetGenericDrawable
virtual void * GetGenericDrawable()
Definition: vtkOpenVRRenderWindow.h:170
vtkOpenVRRenderWindow::GetRightRenderBufferId
GLuint GetRightRenderBufferId()
Definition: vtkOpenVRRenderWindow.h:203
vtkOpenVRRenderWindow::GetLeftRenderBufferId
GLuint GetLeftRenderBufferId()
Get the frame buffers used for rendering.
Definition: vtkOpenVRRenderWindow.h:199
vtkOpenVRRenderWindow::Render
void Render()
Overridden to not release resources that would interfere with an external application's rendering.
vtkOpenVRRenderWindow::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
vtkOpenVRRenderWindow::SetDisplayId
virtual void SetDisplayId(void *)
Dummy stubs for vtkWindow API.
Definition: vtkOpenVRRenderWindow.h:171
vtkOpenVRRenderWindow::GetGenericContext
virtual void * GetGenericContext()
Definition: vtkOpenVRRenderWindow.h:169
vtkOpenVRRenderWindow::IsDirect
int IsDirect()
Is this render window using hardware acceleration? 0-false, 1-true.
Definition: vtkOpenVRRenderWindow.h:127
vtkOpenGLHelper
Definition: vtkOpenGLHelper.h:31
vtkOpenVRRenderWindow::GetRightResolveBufferId
GLuint GetRightResolveBufferId()
Definition: vtkOpenVRRenderWindow.h:205
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkOpenVRRenderWindow
OpenVR rendering window.
Definition: vtkOpenVRRenderWindow.h:60
vtkOpenVRRenderWindow::FramebufferDesc::m_nDepthBufferId
GLuint m_nDepthBufferId
Definition: vtkOpenVRRenderWindow.h:245
vtkOpenVRRenderWindow::GetGenericDisplayId
virtual void * GetGenericDisplayId()
Definition: vtkOpenVRRenderWindow.h:166
vtkOpenVRRenderWindow::SetPosition
virtual void SetPosition(int a[2])
Definition: vtkOpenVRRenderWindow.h:159
vtkOpenGLVertexBufferObject
Definition: vtkOpenGLVertexBufferObject.h:38
vtkOpenVRRenderWindow::HMD
vr::IVRSystem * HMD
Definition: vtkOpenVRRenderWindow.h:240
vtkOpenVRRenderWindow::SetFullScreen
virtual void SetFullScreen(int)
Turn on/off rendering full screen window size.
Definition: vtkOpenVRRenderWindow.h:176
vtkOpenVRRenderWindow::GetGenericWindowId
virtual void * GetGenericWindowId()
Definition: vtkOpenVRRenderWindow.h:167
vtkOpenVRRenderWindow::RenderDistortion
void RenderDistortion()
vtkOpenVRRenderWindow::ShowCursor
void ShowCursor()
Definition: vtkOpenVRRenderWindow.h:175
vtkOpenVRRenderWindow::GetHMD
vr::IVRSystem * GetHMD()
Get the system pointer.
Definition: vtkOpenVRRenderWindow.h:183
vtkX3D::string
@ string
Definition: vtkX3D.h:490
vtkOpenVRRenderWindow::m_strDriver
std::string m_strDriver
Definition: vtkOpenVRRenderWindow.h:238
vtkOpenVRRenderWindow::FindOrLoadRenderModel
vtkOpenVRModel * FindOrLoadRenderModel(const char *modelName)
vtkOpenVRRenderWindow::SetNextWindowId
virtual void SetNextWindowId(void *)
Definition: vtkOpenVRRenderWindow.h:178
vtkOpenVRRenderWindow::OpenVRRenderModels
vr::IVRRenderModels * OpenVRRenderModels
Definition: vtkOpenVRRenderWindow.h:241
vtkOpenVRRenderWindow::~vtkOpenVRRenderWindow
~vtkOpenVRRenderWindow()
vtkOpenVRRenderWindow::CreateAWindow
virtual void CreateAWindow()
Create a not-off-screen window.
Definition: vtkOpenVRRenderWindow.h:233
vtkOpenVRRenderWindow::StereoMidpoint
virtual void StereoMidpoint()
Intermediate method performs operations required between the rendering of the left and right eye.
vtkOpenVRRenderWindow::GetEventPending
virtual int GetEventPending()
Check to see if a mouse button has been pressed or mouse wheel activated.
Definition: vtkOpenVRRenderWindow.h:134
vtkOpenVRRenderWindow::Clean
void Clean()
Clean up device contexts, rendering contexts, etc.
vtkOpenVRRenderWindow::SetWindowInfo
void SetWindowInfo(char *)
Definition: vtkOpenVRRenderWindow.h:163
vtkOpenVRRenderWindow::New
static vtkOpenVRRenderWindow * New()
vtkOpenVRRenderWindow::FramebufferDesc
Definition: vtkOpenVRRenderWindow.h:244
vtkOpenVRRenderWindow::SupportsOpenGL
virtual int SupportsOpenGL()
Does this render window support OpenGL? 0-false, 1-true.
Definition: vtkOpenVRRenderWindow.h:193
vtkOpenVRRenderWindow::RenderWidth
uint32_t RenderWidth
Definition: vtkOpenVRRenderWindow.h:258
vtkOpenVRRenderWindow::WindowRemap
virtual void WindowRemap(void)
Remap the rendering window.
Definition: vtkOpenVRRenderWindow.h:177
vtkOpenVRRenderWindow::RenderModels
void RenderModels()
vtkOpenVRRenderWindow::m_strDisplay
std::string m_strDisplay
Definition: vtkOpenVRRenderWindow.h:239
vtkOpenVRRenderWindow::UpdateHMDMatrixPose
void UpdateHMDMatrixPose()
Update the HMD pose.
vtkOpenGLRenderWindow
OpenGL rendering window.
Definition: vtkOpenGLRenderWindow.h:39
vtkOpenVRRenderWindow::DistortionVBO
vtkOpenGLVertexBufferObject * DistortionVBO
Definition: vtkOpenVRRenderWindow.h:268
vtkRenderWindow
create a window for renderers to draw into
Definition: vtkRenderWindow.h:87
vtkOpenVRRenderWindow::Distortion
vtkOpenGLHelper Distortion
Definition: vtkOpenVRRenderWindow.h:267
vtkOpenVRRenderWindow::GetScreenSize
virtual int * GetScreenSize()
Get the current size of the screen in pixels.
vtkWindow::SetPosition
virtual void SetPosition(int, int)
vtkOpenVRRenderWindow::SetSize
virtual void SetSize(int, int)
Set the size of the window in pixels.
vtkOpenVRRenderWindow::HideCursor
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...
Definition: vtkOpenVRRenderWindow.h:174
vtkOpenVRRenderWindow::SetParentId
void SetParentId(void *)
Definition: vtkOpenVRRenderWindow.h:173
vtkOpenVRRenderWindow::FramebufferDesc::m_nResolveTextureId
GLuint m_nResolveTextureId
Definition: vtkOpenVRRenderWindow.h:248
vtkOpenVRRenderWindow::RightEyeDesc
FramebufferDesc RightEyeDesc
Definition: vtkOpenVRRenderWindow.h:252
vtkOpenVRRenderWindow::FramebufferDesc::m_nResolveFramebufferId
GLuint m_nResolveFramebufferId
Definition: vtkOpenVRRenderWindow.h:249
vtkOpenGLRenderWindow::SetSize
virtual void SetSize(int a[2])
Set the size of the window in screen coordinates in pixels.