VTK
vtkRenderWindow.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkRenderWindow.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
47 #ifndef vtkRenderWindow_h
48 #define vtkRenderWindow_h
49 
50 #include "vtkRenderingCoreModule.h" // For export macro
51 #include "vtkWindow.h"
52 #include "vtkNew.h" // For vtkNew
53 
54 class vtkFloatArray;
55 class vtkProp;
56 class vtkCollection;
57 class vtkRenderTimerLog;
59 class vtkRenderer;
62 
63 // lets define the different types of stereo
64 #define VTK_STEREO_CRYSTAL_EYES 1
65 #define VTK_STEREO_RED_BLUE 2
66 #define VTK_STEREO_INTERLACED 3
67 #define VTK_STEREO_LEFT 4
68 #define VTK_STEREO_RIGHT 5
69 #define VTK_STEREO_DRESDEN 6
70 #define VTK_STEREO_ANAGLYPH 7
71 #define VTK_STEREO_CHECKERBOARD 8
72 #define VTK_STEREO_SPLITVIEWPORT_HORIZONTAL 9
73 #define VTK_STEREO_FAKE 10
74 
75 #define VTK_CURSOR_DEFAULT 0
76 #define VTK_CURSOR_ARROW 1
77 #define VTK_CURSOR_SIZENE 2
78 #define VTK_CURSOR_SIZENW 3
79 #define VTK_CURSOR_SIZESW 4
80 #define VTK_CURSOR_SIZESE 5
81 #define VTK_CURSOR_SIZENS 6
82 #define VTK_CURSOR_SIZEWE 7
83 #define VTK_CURSOR_SIZEALL 8
84 #define VTK_CURSOR_HAND 9
85 #define VTK_CURSOR_CROSSHAIR 10
86 
87 class VTKRENDERINGCORE_EXPORT vtkRenderWindow : public vtkWindow
88 {
89 public:
90  vtkTypeMacro(vtkRenderWindow,vtkWindow);
91  void PrintSelf(ostream& os, vtkIndent indent) override;
92 
98  static vtkRenderWindow *New();
99 
103  virtual void AddRenderer(vtkRenderer *);
104 
108  void RemoveRenderer(vtkRenderer *);
109 
113  int HasRenderer(vtkRenderer *);
114 
118  static const char *GetRenderLibrary();
119 
123  virtual const char *GetRenderingBackend();
124 
129 
130 
133  vtkRendererCollection *GetRenderers() {return this->Renderers;};
134 
142  void CaptureGL2PSSpecialProps(vtkCollection *specialProps);
143 
145 
148  vtkGetMacro(CapturingGL2PSSpecialProps, int);
150 
155  void Render() override;
156 
160  virtual void Start() = 0;
161 
165  virtual void Finalize() = 0;
166 
171  virtual void Frame() = 0;
172 
177  virtual void WaitForCompletion()=0;
178 
183  virtual void CopyResultFrame();
184 
190  virtual vtkRenderWindowInteractor *MakeRenderWindowInteractor();
191 
193 
199  virtual void HideCursor() = 0;
200  virtual void ShowCursor() = 0;
201  virtual void SetCursorPosition(int , int ) {}
203 
205 
208  vtkSetMacro(CurrentCursor,int);
209  vtkGetMacro(CurrentCursor,int);
211 
213 
216  virtual void SetFullScreen(vtkTypeBool) = 0;
217  vtkGetMacro(FullScreen,vtkTypeBool);
218  vtkBooleanMacro(FullScreen,vtkTypeBool);
220 
222 
227  vtkSetMacro(Borders,vtkTypeBool);
228  vtkGetMacro(Borders,vtkTypeBool);
229  vtkBooleanMacro(Borders,vtkTypeBool);
231 
233 
237  vtkGetMacro(StereoCapableWindow,vtkTypeBool);
238  vtkBooleanMacro(StereoCapableWindow,vtkTypeBool);
239  virtual void SetStereoCapableWindow(vtkTypeBool capable);
241 
243 
246  vtkGetMacro(StereoRender,vtkTypeBool);
247  void SetStereoRender(vtkTypeBool stereo);
248  vtkBooleanMacro(StereoRender,vtkTypeBool);
250 
252 
255  vtkSetMacro(AlphaBitPlanes, vtkTypeBool);
256  vtkGetMacro(AlphaBitPlanes, vtkTypeBool);
257  vtkBooleanMacro(AlphaBitPlanes, vtkTypeBool);
259 
261 
265  vtkSetMacro(PointSmoothing,vtkTypeBool);
266  vtkGetMacro(PointSmoothing,vtkTypeBool);
267  vtkBooleanMacro(PointSmoothing,vtkTypeBool);
269 
271 
275  vtkSetMacro(LineSmoothing,vtkTypeBool);
276  vtkGetMacro(LineSmoothing,vtkTypeBool);
277  vtkBooleanMacro(LineSmoothing,vtkTypeBool);
279 
281 
285  vtkSetMacro(PolygonSmoothing,vtkTypeBool);
286  vtkGetMacro(PolygonSmoothing,vtkTypeBool);
287  vtkBooleanMacro(PolygonSmoothing,vtkTypeBool);
289 
291 
309  vtkGetMacro(StereoType,int);
310  void SetStereoType(int);
312  {this->SetStereoType(VTK_STEREO_CRYSTAL_EYES);}
314  {this->SetStereoType(VTK_STEREO_RED_BLUE);}
316  {this->SetStereoType(VTK_STEREO_INTERLACED);}
318  {this->SetStereoType(VTK_STEREO_LEFT);}
320  {this->SetStereoType(VTK_STEREO_RIGHT);}
322  {this->SetStereoType(VTK_STEREO_DRESDEN);}
324  {this->SetStereoType(VTK_STEREO_ANAGLYPH);}
326  {this->SetStereoType(VTK_STEREO_CHECKERBOARD);}
328  {this->SetStereoType(VTK_STEREO_SPLITVIEWPORT_HORIZONTAL);}
330  {this->SetStereoType(VTK_STEREO_FAKE);}
332 
333  const char *GetStereoTypeAsString();
334 
339  virtual void StereoUpdate();
340 
345  virtual void StereoMidpoint();
346 
351  virtual void StereoRenderComplete();
352 
354 
361  vtkSetClampMacro(AnaglyphColorSaturation,float, 0.0f, 1.0f);
362  vtkGetMacro(AnaglyphColorSaturation,float);
364 
366 
380  vtkSetVector2Macro(AnaglyphColorMask,int);
381  vtkGetVectorMacro(AnaglyphColorMask,int,2);
383 
389  virtual void WindowRemap() = 0;
390 
392 
395  vtkSetMacro(SwapBuffers,vtkTypeBool);
396  vtkGetMacro(SwapBuffers,vtkTypeBool);
397  vtkBooleanMacro(SwapBuffers,vtkTypeBool);
399 
401 
413  virtual int SetPixelData(int x, int y, int x2, int y2, unsigned char *data,
414  int front, int right=0) = 0;
415  virtual int SetPixelData(int x, int y, int x2, int y2,
416  vtkUnsignedCharArray *data, int front, int right=0) = 0;
418 
420 
427  virtual float *GetRGBAPixelData(int x, int y, int x2, int y2, int front, int right=0) = 0;
428  virtual int GetRGBAPixelData(int x, int y, int x2, int y2, int front,
429  vtkFloatArray *data, int right=0) = 0;
430  virtual int SetRGBAPixelData(int x, int y, int x2, int y2, float *,
431  int front, int blend=0, int right=0) = 0;
432  virtual int SetRGBAPixelData(int, int, int, int, vtkFloatArray*,
433  int, int blend=0, int right=0) = 0;
434  virtual void ReleaseRGBAPixelData(float *data) = 0;
435  virtual unsigned char *GetRGBACharPixelData(int x, int y, int x2, int y2,
436  int front, int right=0) = 0;
437  virtual int GetRGBACharPixelData(int x, int y, int x2, int y2, int front,
438  vtkUnsignedCharArray *data, int right=0) = 0;
439  virtual int SetRGBACharPixelData(int x,int y, int x2, int y2,
440  unsigned char *data, int front,
441  int blend=0, int right=0) = 0;
442  virtual int SetRGBACharPixelData(int x, int y, int x2, int y2,
443  vtkUnsignedCharArray *data, int front,
444  int blend=0, int right=0) = 0;
446 
448 
453  virtual float *GetZbufferData(int x, int y, int x2, int y2) = 0;
454  virtual int GetZbufferData(int x, int y, int x2, int y2, float *z) = 0;
455  virtual int GetZbufferData(int x, int y, int x2, int y2,
456  vtkFloatArray *z) = 0;
457  virtual int SetZbufferData(int x, int y, int x2, int y2, float *z) = 0;
458  virtual int SetZbufferData(int x, int y, int x2, int y2,
459  vtkFloatArray *z) = 0;
460  float GetZbufferDataAtPoint(int x, int y)
461  {
462  float value;
463  this->GetZbufferData(x, y, x, y, &value);
464  return value;
465  }
467 
469 
472  vtkGetMacro(NeverRendered,int);
474 
476 
480  vtkGetMacro(AbortRender,int);
481  vtkSetMacro(AbortRender,int);
482  vtkGetMacro(InAbortCheck,int);
483  vtkSetMacro(InAbortCheck,int);
484  virtual int CheckAbortStatus();
486 
487  vtkGetMacro(IsPicking,vtkTypeBool);
488  vtkSetMacro(IsPicking,vtkTypeBool);
489  vtkBooleanMacro(IsPicking,vtkTypeBool);
490 
497  virtual int GetEventPending() = 0;
498 
502  virtual int CheckInRenderStatus() { return this->InRender; }
503 
507  virtual void ClearInRenderStatus() { this->InRender = 0; }
508 
510 
518  virtual void SetDesiredUpdateRate(double);
519  vtkGetMacro(DesiredUpdateRate,double);
521 
523 
529  vtkGetMacro(NumberOfLayers, int);
530  vtkSetClampMacro(NumberOfLayers, int, 1, VTK_INT_MAX);
532 
534 
537  vtkGetObjectMacro(Interactor,vtkRenderWindowInteractor);
539 
543  void SetInteractor(vtkRenderWindowInteractor *);
544 
549  void UnRegister(vtkObjectBase *o) override;
550 
552 
555  void SetDisplayId(void *) override = 0;
556  void SetWindowId(void *) override = 0;
557  virtual void SetNextWindowId(void *) = 0;
558  void SetParentId(void *) override = 0;
559  void *GetGenericDisplayId() override = 0;
560  void *GetGenericWindowId() override = 0;
561  void *GetGenericParentId() override = 0;
562  void *GetGenericContext() override = 0;
563  void *GetGenericDrawable() override = 0;
564  void SetWindowInfo(const char *) override = 0;
565  virtual void SetNextWindowInfo(const char *) = 0;
566  void SetParentInfo(const char *) override = 0;
568 
573  virtual bool InitializeFromCurrentContext() { return false; };
574 
576 
583  virtual void SetSharedRenderWindow(vtkRenderWindow *);
584  vtkGetObjectMacro(SharedRenderWindow, vtkRenderWindow);
585  virtual bool GetPlatformSupportsRenderWindowSharing() { return false; };
587 
592  void MakeCurrent() override = 0;
593 
598  virtual bool IsCurrent()=0;
599 
606  virtual bool IsDrawable(){ return true; }
607 
613  virtual void SetForceMakeCurrent() {}
614 
618  virtual const char *ReportCapabilities() { return "Not Implemented";};
619 
623  virtual int SupportsOpenGL() { return 0;};
624 
628  virtual int IsDirect() { return 0;};
629 
634  virtual int GetDepthBufferSize() = 0;
635 
640  virtual int GetColorBufferSizes(int *rgba) = 0;
641 
643 
646  vtkSetMacro(MultiSamples,int);
647  vtkGetMacro(MultiSamples,int);
649 
651 
654  vtkSetMacro(StencilCapable, vtkTypeBool);
655  vtkGetMacro(StencilCapable, vtkTypeBool);
656  vtkBooleanMacro(StencilCapable, vtkTypeBool);
658 
660 
666  vtkSetMacro(DeviceIndex,int);
667  vtkGetMacro(DeviceIndex,int);
669 
673  virtual int GetNumberOfDevices()
674  {
675  return 0;
676  }
677 
686  virtual int SetUseOffScreenBuffers(bool) { return 0; }
687  virtual bool GetUseOffScreenBuffers() { return false; }
688 
690 
694  vtkGetMacro(UseSRGBColorSpace, bool);
695  vtkSetMacro(UseSRGBColorSpace, bool);
696  vtkBooleanMacro(UseSRGBColorSpace, bool);
698 
699 protected:
700  vtkRenderWindow();
701  ~vtkRenderWindow() override;
702 
703  virtual void DoStereoRender();
704 
709  int OldScreen[5];
718  unsigned char* StereoBuffer; // used for red blue stereo
719  float *AccumulationBuffer; // used for many techniques
721  unsigned char *ResultFrame;
726  int InRender;
732  int AnaglyphColorMask[2];
737 
739 
744 
746 
747 private:
748  vtkRenderWindow(const vtkRenderWindow&) = delete;
749  void operator=(const vtkRenderWindow&) = delete;
750 };
751 
752 #endif
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:52
virtual void SetForceMakeCurrent()
If called, allow MakeCurrent() to skip cache-check when called.
void SetStereoTypeToRight()
Set/Get what type of stereo rendering to use.
virtual void * GetGenericDrawable()=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
virtual void SetDisplayId(void *)=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
virtual int SetUseOffScreenBuffers(bool)
Create and bind offscreen rendering buffers without destroying the current OpenGL context...
#define VTK_STEREO_RIGHT
void SetStereoTypeToFake()
Set/Get what type of stereo rendering to use.
#define VTK_STEREO_FAKE
float AnaglyphColorSaturation
vtkTypeBool PolygonSmoothing
#define VTK_STEREO_CHECKERBOARD
vtkTypeBool LineSmoothing
vtkTypeBool PointSmoothing
#define VTK_INT_MAX
Definition: vtkType.h:159
float * AccumulationBuffer
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:41
virtual void SetParentInfo(const char *)=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
void SetStereoTypeToSplitViewportHorizontal()
Set/Get what type of stereo rendering to use.
vtkRenderWindow * SharedRenderWindow
#define VTK_STEREO_DRESDEN
vtkTypeBool StereoRender
void SetStereoTypeToAnaglyph()
Set/Get what type of stereo rendering to use.
#define VTK_STEREO_RED_BLUE
abstract specification for renderers
Definition: vtkRenderer.h:63
vtkTypeBool StencilCapable
vtkTypeBool IsPicking
virtual void * GetGenericContext()=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
#define VTK_STEREO_INTERLACED
void SetStereoTypeToCrystalEyes()
Set/Get what type of stereo rendering to use.
int vtkTypeBool
Definition: vtkABI.h:69
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
unsigned char * ResultFrame
platform-independent render window interaction including picking and frame rate control.
virtual const char * ReportCapabilities()
Get report of capabilities for the render window.
virtual int IsDirect()
Is this render window using hardware acceleration? 0-false, 1-true.
virtual int SupportsOpenGL()
Does this render window support OpenGL? 0-false, 1-true.
an ordered list of renderers
virtual int CheckInRenderStatus()
Are we rendering at the moment.
virtual void UnRegister(vtkObjectBase *o)
Decrease the reference count (release by another object).
void SetStereoTypeToRedBlue()
Set/Get what type of stereo rendering to use.
double AbortCheckTime
The universal time since the last abort check occurred.
vtkGetNewMacro(RenderTimer, vtkRenderTimerLog) vtkRendererCollection *GetRenderers()
Get the render timer log for this window.
unsigned int AccumulationBufferSize
a simple class to control print indentation
Definition: vtkIndent.h:39
void SetStereoTypeToCheckerboard()
Set/Get what type of stereo rendering to use.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
float GetZbufferDataAtPoint(int x, int y)
Set/Get the zbuffer data from the frame buffer.
void SetStereoTypeToInterlaced()
Set/Get what type of stereo rendering to use.
virtual void SetWindowId(void *)=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
virtual void SetCursorPosition(int, int)
Hide or Show the mouse cursor, it is nice to be able to hide the default cursor if you want VTK to di...
vtkTypeBool AlphaBitPlanes
abstract base class for most VTK objects
Definition: vtkObjectBase.h:65
virtual void MakeCurrent()
Make the window current.
Definition: vtkWindow.h:185
vtkNew< vtkRenderTimerLog > RenderTimer
#define VTK_STEREO_CRYSTAL_EYES
vtkTypeBool SwapBuffers
dynamic, self-adjusting array of unsigned char
virtual void SetWindowInfo(const char *)=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
virtual void SetParentId(void *)=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
void SetStereoTypeToDresden()
Set/Get what type of stereo rendering to use.
create a window for renderers to draw into
#define VTK_STEREO_SPLITVIEWPORT_HORIZONTAL
virtual bool InitializeFromCurrentContext()
Initialize the render window from the information associated with the currently activated OpenGL cont...
virtual void ClearInRenderStatus()
Clear status (after an exception was thrown for example)
create and manipulate ordered lists of objects
Definition: vtkCollection.h:51
virtual bool GetPlatformSupportsRenderWindowSharing()
Set/Get an already existing window that this window should share data with if possible.
virtual void * GetGenericDisplayId()=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
vtkTypeBool FullScreen
vtkTypeBool Borders
vtkRenderWindowInteractor * Interactor
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
virtual bool GetUseOffScreenBuffers()
vtkTypeBool StereoCapableWindow
unsigned char * StereoBuffer
#define VTK_STEREO_LEFT
virtual void * GetGenericParentId()=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
virtual int GetNumberOfDevices()
Returns the number of devices (graphics cards) on a system.
virtual void Render()=0
Ask each viewport owned by this Window to render its image and synchronize this process.
void SetStereoTypeToLeft()
Set/Get what type of stereo rendering to use.
#define VTK_STEREO_ANAGLYPH
virtual bool IsDrawable()
Test if the window has a valid drawable.
Asynchronously measures GPU execution times for a series of events.
virtual void * GetGenericWindowId()=0
These are window system independent methods that are used to help interface vtkWindow to native windo...
vtkRendererCollection * Renderers