VTK
vtkSynchronizedRenderers.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkSynchronizedRenderers.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 =========================================================================*/
30 #ifndef vtkSynchronizedRenderers_h
31 #define vtkSynchronizedRenderers_h
32 
33 #include "vtkRenderingParallelModule.h" // For export macro
34 #include "vtkObject.h"
35 #include "vtkUnsignedCharArray.h" // needed for vtkUnsignedCharArray.
36 #include "vtkSmartPointer.h" // needed for vtkSmartPointer.
37 
38 class vtkFXAAOptions;
39 class vtkRenderer;
43 class vtkOpenGLRenderer;
44 
45 class VTKRENDERINGPARALLEL_EXPORT vtkSynchronizedRenderers : public vtkObject
46 {
47 public:
48  static vtkSynchronizedRenderers* New();
50  void PrintSelf(ostream& os, vtkIndent indent) override;
51 
53 
59  virtual void SetRenderer(vtkRenderer*);
60  virtual vtkRenderer* GetRenderer();
62 
64 
68  virtual void SetParallelController(vtkMultiProcessController*);
69  vtkGetObjectMacro(ParallelController, vtkMultiProcessController);
71 
73 
77  vtkSetMacro(ParallelRendering, bool);
78  vtkGetMacro(ParallelRendering, bool);
79  vtkBooleanMacro(ParallelRendering, bool);
81 
83 
86  vtkSetClampMacro(ImageReductionFactor, int, 1, 50);
87  vtkGetMacro(ImageReductionFactor, int);
89 
91 
96  vtkSetMacro(WriteBackImages, bool);
97  vtkGetMacro(WriteBackImages, bool);
98  vtkBooleanMacro(WriteBackImages, bool);
100 
102 
107  vtkSetMacro(RootProcessId, int);
108  vtkGetMacro(RootProcessId, int);
110 
118  void CollectiveExpandForVisiblePropBounds(double bounds[6]);
119 
121 
125  virtual void SetCaptureDelegate(vtkSynchronizedRenderers*);
126  vtkGetObjectMacro(CaptureDelegate, vtkSynchronizedRenderers);
128 
130 
137  vtkSetMacro(AutomaticEventHandling, bool);
138  vtkGetMacro(AutomaticEventHandling, bool);
139  vtkBooleanMacro(AutomaticEventHandling, bool);
141 
142  enum
143  {
144  SYNC_RENDERER_TAG = 15101,
145  RESET_CAMERA_TAG = 15102,
146  COMPUTE_BOUNDS_TAG = 15103
147  };
148 
151  struct VTKRENDERINGPARALLEL_EXPORT vtkRawImage
152  {
153  public:
155  {
156  this->Valid = false;
157  this->Size[0] = this->Size[1] = 0;
159  }
160 
161  void Resize(int dx, int dy, int numcomps)
162  {
163  this->Valid = false;
164  this->Allocate(dx, dy, numcomps);
165  }
166 
170  void Initialize(int dx, int dy, vtkUnsignedCharArray* data);
171 
172  void MarkValid() { this->Valid = true; }
173  void MarkInValid() { this->Valid = false; }
174 
175  bool IsValid() { return this->Valid; }
176  int GetWidth() { return this->Size[0];}
177  int GetHeight() { return this->Size[1];}
179  { return this->Data; }
180 
181  // Pushes the image to the viewport.
182  bool PushToViewport(vtkRenderer*);
183 
184  // This is a raw version of PushToViewport() that assumes that the
185  // glViewport() has already been setup externally.
186  // the argument is optional for backwards compat with old OpenGL
187  bool PushToFrameBuffer(vtkRenderer *ren = nullptr);
188 
189  // Captures the image from the viewport.
190  // This doesn't trigger a render, just captures what's currently there in
191  // the active buffer.
192  bool Capture(vtkRenderer*);
193 
194  // Save the image as a png. Useful for debugging.
195  void SaveAsPNG(const char* filename);
196 
197  private:
198  bool Valid;
199  int Size[2];
201 
202  void Allocate(int dx, int dy, int numcomps);
203  };
204 
205 protected:
207  ~vtkSynchronizedRenderers() override;
208 
210  {
212  int Draw;
214  double Viewport[4];
215  double CameraPosition[3];
216  double CameraFocalPoint[3];
217  double CameraViewUp[3];
218  double CameraWindowCenter[2];
219  double CameraClippingRange[2];
222  double EyeTransformMatrix[16];
223  double ModelTransformMatrix[16];
224 
225  // Save/restore the struct to/from a stream.
226  void Save(vtkMultiProcessStream& stream);
227  bool Restore(vtkMultiProcessStream& stream);
228 
229  void CopyFrom(vtkRenderer*);
230  void CopyTo(vtkRenderer*);
231  };
232 
233  // These methods are called on all processes as a consequence of corresponding
234  // events being called on the renderer.
235  virtual void HandleStartRender();
236  virtual void HandleEndRender();
237  virtual void HandleAbortRender() {}
238 
239  virtual void MasterStartRender();
240  virtual void SlaveStartRender();
241 
242  virtual void MasterEndRender();
243  virtual void SlaveEndRender();
244 
247 
255  virtual vtkRawImage& CaptureRenderedImage();
256 
262  virtual void PushImageToScreen();
263 
267 
273 
274 private:
276  void operator=(const vtkSynchronizedRenderers&) = delete;
277 
278  class vtkObserver;
279  vtkObserver* Observer;
280  friend class vtkObserver;
281 
282  bool UseFXAA;
283  vtkOpenGLFXAAFilter* FXAAFilter;
284 
285  double LastViewport[4];
286 };
287 
288 #endif
289 
vtkSynchronizedRenderers::CaptureDelegate
vtkSynchronizedRenderers * CaptureDelegate
Definition: vtkSynchronizedRenderers.h:264
vtkSynchronizedRenderers::RendererInfo::CameraParallelProjection
int CameraParallelProjection
Definition: vtkSynchronizedRenderers.h:213
vtkX3D::data
Definition: vtkX3D.h:315
vtkSynchronizedRenderers::WriteBackImages
bool WriteBackImages
Definition: vtkSynchronizedRenderers.h:270
vtkObject::New
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on.
vtkMultiProcessStream
stream used to pass data across processes using vtkMultiProcessController.
Definition: vtkMultiProcessStream.h:37
vtkUnsignedCharArray
dynamic, self-adjusting array of unsigned char
Definition: vtkUnsignedCharArray.h:35
vtkSynchronizedRenderers::RootProcessId
int RootProcessId
Definition: vtkSynchronizedRenderers.h:271
vtkSmartPointer< vtkUnsignedCharArray >
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:53
vtkFXAAOptions
Configuration for FXAA implementations.
Definition: vtkFXAAOptions.h:30
vtkSynchronizedRenderers::HandleAbortRender
virtual void HandleAbortRender()
Definition: vtkSynchronizedRenderers.h:237
vtkSynchronizedRenderers::AutomaticEventHandling
bool AutomaticEventHandling
Definition: vtkSynchronizedRenderers.h:272
vtkSynchronizedRenderers::ParallelController
vtkMultiProcessController * ParallelController
Definition: vtkSynchronizedRenderers.h:245
vtkSynchronizedRenderers::vtkRawImage::GetWidth
int GetWidth()
Definition: vtkSynchronizedRenderers.h:176
vtkMultiProcessController
Multiprocessing communication superclass.
Definition: vtkMultiProcessController.h:76
vtkSynchronizedRenderers::RendererInfo::CameraParallelScale
double CameraParallelScale
Definition: vtkSynchronizedRenderers.h:221
vtkSynchronizedRenderers::vtkRawImage::Resize
void Resize(int dx, int dy, int numcomps)
Definition: vtkSynchronizedRenderers.h:161
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkSynchronizedRenderers::vtkRawImage::MarkInValid
void MarkInValid()
Definition: vtkSynchronizedRenderers.h:173
vtkSynchronizedRenderers::ImageReductionFactor
int ImageReductionFactor
Definition: vtkSynchronizedRenderers.h:269
vtkSmartPointer.h
vtkOpenGLRenderer
OpenGL renderer.
Definition: vtkOpenGLRenderer.h:40
vtkUnsignedCharArray.h
vtkSmartPointer::New
static vtkSmartPointer< T > New()
Create an instance of a VTK object.
Definition: vtkSmartPointer.h:153
vtkOpenGLFXAAFilter
Perform FXAA antialiasing on the current framebuffer.
Definition: vtkOpenGLFXAAFilter.h:58
vtkSynchronizedRenderers::vtkRawImage::vtkRawImage
vtkRawImage()
Definition: vtkSynchronizedRenderers.h:154
vtkObject::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkObject.h
vtkSynchronizedRenderers::vtkRawImage::GetHeight
int GetHeight()
Definition: vtkSynchronizedRenderers.h:177
vtkSynchronizedRenderers::RendererInfo::Draw
int Draw
Definition: vtkSynchronizedRenderers.h:212
vtkSynchronizedRenderers::RendererInfo::ImageReductionFactor
int ImageReductionFactor
Definition: vtkSynchronizedRenderers.h:211
vtkSynchronizedRenderers::RendererInfo
Definition: vtkSynchronizedRenderers.h:209
vtkSynchronizedRenderers::vtkRawImage
vtkRawImage can be used to make it easier to deal with images for compositing/communicating over clie...
Definition: vtkSynchronizedRenderers.h:151
vtkSynchronizedRenderers::vtkRawImage::GetRawPtr
vtkUnsignedCharArray * GetRawPtr()
Definition: vtkSynchronizedRenderers.h:178
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:57
vtkSynchronizedRenderers::Renderer
vtkOpenGLRenderer * Renderer
Definition: vtkSynchronizedRenderers.h:246
vtkSynchronizedRenderers
synchronizes renderers across processes.
Definition: vtkSynchronizedRenderers.h:45
vtkSynchronizedRenderers::vtkRawImage::MarkValid
void MarkValid()
Definition: vtkSynchronizedRenderers.h:172
vtkSynchronizedRenderers::RendererInfo::CameraViewAngle
double CameraViewAngle
Definition: vtkSynchronizedRenderers.h:220
vtkSynchronizedRenderers::ParallelRendering
bool ParallelRendering
Definition: vtkSynchronizedRenderers.h:268
vtkSynchronizedRenderers::ReducedImage
vtkRawImage ReducedImage
Definition: vtkSynchronizedRenderers.h:265
vtkSynchronizedRenderers::FullImage
vtkRawImage FullImage
Definition: vtkSynchronizedRenderers.h:266
vtkSynchronizedRenderers::vtkRawImage::IsValid
bool IsValid()
Definition: vtkSynchronizedRenderers.h:175