VTK  9.0.1
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 =========================================================================*/
41 #ifndef vtkRenderWindow_h
42 #define vtkRenderWindow_h
43 
44 #include "vtkNew.h" // For vtkNew
45 #include "vtkRenderingCoreModule.h" // For export macro
46 #include "vtkSmartPointer.h" // For vtkSmartPointer
47 #include "vtkWindow.h"
48 
49 class vtkFloatArray;
50 class vtkProp;
51 class vtkCollection;
52 class vtkRenderTimerLog;
54 class vtkRenderer;
58 
59 // lets define the different types of stereo
60 #define VTK_STEREO_CRYSTAL_EYES 1
61 #define VTK_STEREO_RED_BLUE 2
62 #define VTK_STEREO_INTERLACED 3
63 #define VTK_STEREO_LEFT 4
64 #define VTK_STEREO_RIGHT 5
65 #define VTK_STEREO_DRESDEN 6
66 #define VTK_STEREO_ANAGLYPH 7
67 #define VTK_STEREO_CHECKERBOARD 8
68 #define VTK_STEREO_SPLITVIEWPORT_HORIZONTAL 9
69 #define VTK_STEREO_FAKE 10
70 #define VTK_STEREO_EMULATE 11
71 
72 #define VTK_CURSOR_DEFAULT 0
73 #define VTK_CURSOR_ARROW 1
74 #define VTK_CURSOR_SIZENE 2
75 #define VTK_CURSOR_SIZENW 3
76 #define VTK_CURSOR_SIZESW 4
77 #define VTK_CURSOR_SIZESE 5
78 #define VTK_CURSOR_SIZENS 6
79 #define VTK_CURSOR_SIZEWE 7
80 #define VTK_CURSOR_SIZEALL 8
81 #define VTK_CURSOR_HAND 9
82 #define VTK_CURSOR_CROSSHAIR 10
83 
84 class VTKRENDERINGCORE_EXPORT vtkRenderWindow : public vtkWindow
85 {
86 public:
87  vtkTypeMacro(vtkRenderWindow, vtkWindow);
88  void PrintSelf(ostream& os, vtkIndent indent) override;
89 
95  static vtkRenderWindow* New();
96 
100  virtual void AddRenderer(vtkRenderer*);
101 
105  void RemoveRenderer(vtkRenderer*);
106 
110  int HasRenderer(vtkRenderer*);
111 
115  static const char* GetRenderLibrary();
116 
120  virtual const char* GetRenderingBackend();
121 
125  vtkGetNewMacro(RenderTimer, vtkRenderTimerLog);
126 
130  vtkRendererCollection* GetRenderers() { return this->Renderers; }
131 
139  void CaptureGL2PSSpecialProps(vtkCollection* specialProps);
140 
142 
145  vtkGetMacro(CapturingGL2PSSpecialProps, int);
147 
152  void Render() override;
153 
157  virtual void Start() {}
158 
162  virtual void End(){};
163 
167  virtual void Finalize() {}
168 
173  virtual void Frame() {}
174 
179  virtual void WaitForCompletion() {}
180 
185  virtual void CopyResultFrame();
186 
192  virtual vtkRenderWindowInteractor* MakeRenderWindowInteractor();
193 
195 
201  virtual void HideCursor() {}
202  virtual void ShowCursor() {}
203  virtual void SetCursorPosition(int, int) {}
205 
207 
210  vtkSetMacro(CurrentCursor, int);
211  vtkGetMacro(CurrentCursor, int);
213 
215 
218  virtual void SetFullScreen(vtkTypeBool) {}
219  vtkGetMacro(FullScreen, vtkTypeBool);
220  vtkBooleanMacro(FullScreen, vtkTypeBool);
222 
224 
229  vtkSetMacro(Borders, vtkTypeBool);
230  vtkGetMacro(Borders, vtkTypeBool);
231  vtkBooleanMacro(Borders, vtkTypeBool);
233 
235 
239  vtkGetMacro(StereoCapableWindow, vtkTypeBool);
240  vtkBooleanMacro(StereoCapableWindow, vtkTypeBool);
241  virtual void SetStereoCapableWindow(vtkTypeBool capable);
243 
245 
248  vtkGetMacro(StereoRender, vtkTypeBool);
249  void SetStereoRender(vtkTypeBool stereo);
250  vtkBooleanMacro(StereoRender, vtkTypeBool);
252 
254 
257  vtkSetMacro(AlphaBitPlanes, vtkTypeBool);
258  vtkGetMacro(AlphaBitPlanes, vtkTypeBool);
259  vtkBooleanMacro(AlphaBitPlanes, vtkTypeBool);
261 
263 
267  vtkSetMacro(PointSmoothing, vtkTypeBool);
268  vtkGetMacro(PointSmoothing, vtkTypeBool);
269  vtkBooleanMacro(PointSmoothing, vtkTypeBool);
271 
273 
277  vtkSetMacro(LineSmoothing, vtkTypeBool);
278  vtkGetMacro(LineSmoothing, vtkTypeBool);
279  vtkBooleanMacro(LineSmoothing, vtkTypeBool);
281 
283 
287  vtkSetMacro(PolygonSmoothing, vtkTypeBool);
288  vtkGetMacro(PolygonSmoothing, vtkTypeBool);
289  vtkBooleanMacro(PolygonSmoothing, vtkTypeBool);
291 
293 
314  vtkGetMacro(StereoType, int);
315  void SetStereoType(int);
316  void SetStereoTypeToCrystalEyes() { this->SetStereoType(VTK_STEREO_CRYSTAL_EYES); }
317  void SetStereoTypeToRedBlue() { this->SetStereoType(VTK_STEREO_RED_BLUE); }
318  void SetStereoTypeToInterlaced() { this->SetStereoType(VTK_STEREO_INTERLACED); }
319  void SetStereoTypeToLeft() { this->SetStereoType(VTK_STEREO_LEFT); }
320  void SetStereoTypeToRight() { this->SetStereoType(VTK_STEREO_RIGHT); }
321  void SetStereoTypeToDresden() { this->SetStereoType(VTK_STEREO_DRESDEN); }
322  void SetStereoTypeToAnaglyph() { this->SetStereoType(VTK_STEREO_ANAGLYPH); }
323  void SetStereoTypeToCheckerboard() { this->SetStereoType(VTK_STEREO_CHECKERBOARD); }
325  {
326  this->SetStereoType(VTK_STEREO_SPLITVIEWPORT_HORIZONTAL);
327  }
328  void SetStereoTypeToFake() { this->SetStereoType(VTK_STEREO_FAKE); }
329  void SetStereoTypeToEmulate() { this->SetStereoType(VTK_STEREO_EMULATE); }
331 
333 
336  const char* GetStereoTypeAsString();
337  static const char* GetStereoTypeAsString(int type);
339 
344  virtual void StereoUpdate();
345 
350  virtual void StereoMidpoint();
351 
356  virtual void StereoRenderComplete();
357 
359 
366  vtkSetClampMacro(AnaglyphColorSaturation, float, 0.0f, 1.0f);
367  vtkGetMacro(AnaglyphColorSaturation, float);
369 
371 
385  vtkSetVector2Macro(AnaglyphColorMask, int);
386  vtkGetVectorMacro(AnaglyphColorMask, int, 2);
388 
394  virtual void WindowRemap() {}
395 
397 
400  vtkSetMacro(SwapBuffers, vtkTypeBool);
401  vtkGetMacro(SwapBuffers, vtkTypeBool);
402  vtkBooleanMacro(SwapBuffers, vtkTypeBool);
404 
406 
418  virtual int SetPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, unsigned char* /*data*/,
419  int /*front*/, int /*right*/ = 0)
420  {
421  return 0;
422  }
423  virtual int SetPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/,
424  vtkUnsignedCharArray* /*data*/, int /*front*/, int /*right*/ = 0)
425  {
426  return 0;
427  }
429 
431 
438  virtual float* GetRGBAPixelData(
439  int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, int /*front*/, int /*right*/ = 0)
440  {
441  return nullptr;
442  }
443  virtual int GetRGBAPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, int /*front*/,
444  vtkFloatArray* /*data*/, int /*right*/ = 0)
445  {
446  return 0;
447  }
448  virtual int SetRGBAPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, float*, int /*front*/,
449  int /*blend*/ = 0, int /*right*/ = 0)
450  {
451  return 0;
452  }
453  virtual int SetRGBAPixelData(
454  int, int, int, int, vtkFloatArray*, int, int /*blend*/ = 0, int /*right*/ = 0)
455  {
456  return 0;
457  }
458  virtual void ReleaseRGBAPixelData(float* /*data*/) {}
459  virtual unsigned char* GetRGBACharPixelData(
460  int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, int /*front*/, int /*right*/ = 0)
461  {
462  return nullptr;
463  }
464  virtual int GetRGBACharPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, int /*front*/,
465  vtkUnsignedCharArray* /*data*/, int /*right*/ = 0)
466  {
467  return 0;
468  }
469  virtual int SetRGBACharPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/,
470  unsigned char* /*data*/, int /*front*/, int /*blend*/ = 0, int /*right*/ = 0)
471  {
472  return 0;
473  }
474  virtual int SetRGBACharPixelData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/,
475  vtkUnsignedCharArray* /*data*/, int /*front*/, int /*blend*/ = 0, int /*right*/ = 0)
476  {
477  return 0;
478  }
480 
482 
487  virtual float* GetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/) { return nullptr; }
488  virtual int GetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, float* /*z*/)
489  {
490  return 0;
491  }
492  virtual int GetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, vtkFloatArray* /*z*/)
493  {
494  return 0;
495  }
496  virtual int SetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, float* /*z*/)
497  {
498  return 0;
499  }
500  virtual int SetZbufferData(int /*x*/, int /*y*/, int /*x2*/, int /*y2*/, vtkFloatArray* /*z*/)
501  {
502  return 0;
503  }
504  float GetZbufferDataAtPoint(int x, int y)
505  {
506  float value;
507  this->GetZbufferData(x, y, x, y, &value);
508  return value;
509  }
511 
513 
516  vtkGetMacro(NeverRendered, int);
518 
520 
524  vtkGetMacro(AbortRender, int);
525  vtkSetMacro(AbortRender, int);
526  vtkGetMacro(InAbortCheck, int);
527  vtkSetMacro(InAbortCheck, int);
528  virtual int CheckAbortStatus();
530 
532 
535  VTK_LEGACY(vtkTypeBool GetIsPicking());
536  VTK_LEGACY(void SetIsPicking(vtkTypeBool));
537  VTK_LEGACY(void IsPickingOn());
538  VTK_LEGACY(void IsPickingOff());
540 
547  virtual vtkTypeBool GetEventPending() { return 0; }
548 
552  virtual int CheckInRenderStatus() { return this->InRender; }
553 
557  virtual void ClearInRenderStatus() { this->InRender = 0; }
558 
560 
568  virtual void SetDesiredUpdateRate(double);
569  vtkGetMacro(DesiredUpdateRate, double);
571 
573 
579  vtkGetMacro(NumberOfLayers, int);
580  vtkSetClampMacro(NumberOfLayers, int, 1, VTK_INT_MAX);
582 
584 
587  vtkGetObjectMacro(Interactor, vtkRenderWindowInteractor);
589 
593  void SetInteractor(vtkRenderWindowInteractor*);
594 
599  void UnRegister(vtkObjectBase* o) override;
600 
602 
605  void SetDisplayId(void*) override {}
606  void SetWindowId(void*) override {}
607  virtual void SetNextWindowId(void*) {}
608  void SetParentId(void*) override {}
609  void* GetGenericDisplayId() override { return nullptr; }
610  void* GetGenericWindowId() override { return nullptr; }
611  void* GetGenericParentId() override { return nullptr; }
612  void* GetGenericContext() override { return nullptr; }
613  void* GetGenericDrawable() override { return nullptr; }
614  void SetWindowInfo(const char*) override {}
615  virtual void SetNextWindowInfo(const char*) {}
616  void SetParentInfo(const char*) override {}
618 
623  virtual bool InitializeFromCurrentContext() { return false; }
624 
626 
633  virtual void SetSharedRenderWindow(vtkRenderWindow*);
634  vtkGetObjectMacro(SharedRenderWindow, vtkRenderWindow);
635  virtual bool GetPlatformSupportsRenderWindowSharing() { return false; }
637 
642  void MakeCurrent() override {}
643 
648  virtual bool IsCurrent() { return false; }
649 
656  VTK_LEGACY(virtual bool IsDrawable());
657 
663  virtual void SetForceMakeCurrent() {}
664 
668  virtual const char* ReportCapabilities() { return "Not Implemented"; }
669 
673  virtual int SupportsOpenGL() { return 0; }
674 
678  virtual vtkTypeBool IsDirect() { return 0; }
679 
684  virtual int GetDepthBufferSize() { return 0; }
685 
690  virtual int GetColorBufferSizes(int* /*rgba*/) { return 0; }
691 
693 
697  virtual void SetMultiSamples(int);
698  vtkGetMacro(MultiSamples, int);
700 
702 
705  vtkSetMacro(StencilCapable, vtkTypeBool);
706  vtkGetMacro(StencilCapable, vtkTypeBool);
707  vtkBooleanMacro(StencilCapable, vtkTypeBool);
709 
711 
717  vtkSetMacro(DeviceIndex, int);
718  vtkGetMacro(DeviceIndex, int);
720 
724  virtual int GetNumberOfDevices() { return 0; }
725 
727 
731  vtkGetMacro(UseSRGBColorSpace, bool);
732  vtkSetMacro(UseSRGBColorSpace, bool);
733  vtkBooleanMacro(UseSRGBColorSpace, bool);
735 
736 protected:
737  vtkRenderWindow();
738  ~vtkRenderWindow() override;
739 
740  virtual void DoStereoRender();
741 
746  int OldScreen[5];
761  int InRender;
766  int AnaglyphColorMask[2];
771 
773 
778 
780 
781 private:
782  vtkRenderWindow(const vtkRenderWindow&) = delete;
783  void operator=(const vtkRenderWindow&) = delete;
784 
785  vtkNew<vtkStereoCompositor> StereoCompositor;
786 };
787 
788 #endif
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:47
virtual int SetRGBACharPixelData(int, int, int, int, vtkUnsignedCharArray *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual void Start()
Start the rendering process for a frame.
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 int GetDepthBufferSize()
This method should be defined by the subclass.
#define VTK_STEREO_RIGHT
vtkSmartPointer< vtkUnsignedCharArray > StereoBuffer
virtual float * GetZbufferData(int, int, int, int)
Set/Get the zbuffer data from the frame buffer.
void SetStereoTypeToFake()
Set/Get what type of stereo rendering to use.
#define VTK_STEREO_FAKE
float AnaglyphColorSaturation
vtkTypeBool PolygonSmoothing
virtual void SetFullScreen(vtkTypeBool)
Turn on/off rendering full screen window size.
void * GetGenericDisplayId() override
Dummy stubs for vtkWindow API.
void * GetGenericContext() override
Dummy stubs for vtkWindow API.
virtual void WindowRemap()
Remap the rendering window.
void SetDisplayId(void *) override
Dummy stubs for vtkWindow API.
virtual int SetPixelData(int, int, int, int, unsigned char *, int, int=0)
Set/Get the pixel data of an image, transmitted as RGBRGBRGB.
virtual int SetZbufferData(int, int, int, int, vtkFloatArray *)
Set/Get the zbuffer data from the frame buffer.
#define VTK_STEREO_CHECKERBOARD
vtkTypeBool LineSmoothing
virtual 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...
virtual void SetNextWindowId(void *)
Dummy stubs for vtkWindow API.
vtkTypeBool PointSmoothing
#define VTK_INT_MAX
Definition: vtkType.h:155
virtual int GetColorBufferSizes(int *)
Get the size of the color buffer.
void * GetGenericWindowId() override
Dummy stubs for vtkWindow API.
void MakeCurrent() override
Attempt to make this window the current graphics context for the calling thread.
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:35
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:58
vtkSmartPointer< vtkUnsignedCharArray > ResultFrame
void SetWindowInfo(const char *) override
Dummy stubs for vtkWindow API.
virtual bool IsCurrent()
Tells if this window is the current graphics context for the calling thread.
virtual void Finalize()
Finalize the rendering process.
vtkTypeBool StencilCapable
virtual int GetRGBACharPixelData(int, int, int, int, int, vtkUnsignedCharArray *, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual int GetZbufferData(int, int, int, int, vtkFloatArray *)
Set/Get the zbuffer data from the frame buffer.
void SetParentId(void *) override
Dummy stubs for vtkWindow API.
#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:34
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 SupportsOpenGL()
Does this render window support OpenGL? 0-false, 1-true.
#define VTK_STEREO_EMULATE
virtual int GetRGBAPixelData(int, int, int, int, int, vtkFloatArray *, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual void SetNextWindowInfo(const char *)
Dummy stubs for vtkWindow API.
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 SetWindowId(void *) override
Dummy stubs for vtkWindow API.
void SetStereoTypeToRedBlue()
Set/Get what type of stereo rendering to use.
double AbortCheckTime
The universal time since the last abort check occurred.
virtual int SetZbufferData(int, int, int, int, float *)
Set/Get the zbuffer data from the frame buffer.
a simple class to control print indentation
Definition: vtkIndent.h:33
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.
virtual 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...
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.
void SetStereoTypeToEmulate()
Set/Get what type of stereo rendering to use.
virtual void WaitForCompletion()
Block the thread until the actual rendering is finished().
void * GetGenericParentId() override
Dummy stubs for vtkWindow API.
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...
virtual int SetPixelData(int, int, int, int, vtkUnsignedCharArray *, int, int=0)
Set/Get the pixel data of an image, transmitted as RGBRGBRGB.
virtual void ReleaseRGBAPixelData(float *)
Same as Get/SetPixelData except that the image also contains an alpha component.
vtkTypeBool AlphaBitPlanes
abstract base class for most VTK objects
Definition: vtkObjectBase.h:63
vtkNew< vtkRenderTimerLog > RenderTimer
#define VTK_STEREO_CRYSTAL_EYES
vtkTypeBool SwapBuffers
vtkRendererCollection * GetRenderers()
Return the collection of renderers in the render window.
dynamic, self-adjusting array of unsigned char
virtual vtkTypeBool GetEventPending()
Check to see if a mouse button has been pressed.
void SetStereoTypeToDresden()
Set/Get what type of stereo rendering to use.
virtual int SetRGBAPixelData(int, int, int, int, float *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual int SetRGBAPixelData(int, int, int, int, vtkFloatArray *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
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:52
virtual bool GetPlatformSupportsRenderWindowSharing()
Set/Get an already existing window that this window should share data with if possible.
virtual unsigned char * GetRGBACharPixelData(int, int, int, int, int, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
vtkTypeBool FullScreen
virtual void End()
Update the system, if needed, at end of render process.
virtual float * GetRGBAPixelData(int, int, int, int, int, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
virtual void Render()
Ask each viewport owned by this Window to render its image and synchronize this process.
Definition: vtkWindow.h:163
helper class to generate composited stereo images.
vtkTypeBool Borders
vtkRenderWindowInteractor * Interactor
void SetParentInfo(const char *) override
Dummy stubs for vtkWindow API.
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
vtkTypeBool StereoCapableWindow
virtual int GetZbufferData(int, int, int, int, float *)
Set/Get the zbuffer data from the frame buffer.
void * GetGenericDrawable() override
Dummy stubs for vtkWindow API.
#define VTK_STEREO_LEFT
virtual int GetNumberOfDevices()
Returns the number of devices (graphics cards) on a system.
virtual vtkTypeBool IsDirect()
Is this render window using hardware acceleration? 0-false, 1-true.
void SetStereoTypeToLeft()
Set/Get what type of stereo rendering to use.
#define VTK_STEREO_ANAGLYPH
virtual void Frame()
A termination method performed at the end of the rendering process to do things like swapping buffers...
Asynchronously measures GPU execution times for a series of events.
virtual int SetRGBACharPixelData(int, int, int, int, unsigned char *, int, int=0, int=0)
Same as Get/SetPixelData except that the image also contains an alpha component.
vtkRendererCollection * Renderers