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 =========================================================================*/
33 #ifndef vtkSynchronizedRenderers_h
34 #define vtkSynchronizedRenderers_h
35 
36 #include "vtkRenderingParallelModule.h" // For export macro
37 #include "vtkObject.h"
38 #include "vtkUnsignedCharArray.h" // needed for vtkUnsignedCharArray.
39 #include "vtkSmartPointer.h" // needed for vtkSmartPointer.
40 
41 class vtkFXAAOptions;
42 class vtkRenderer;
46 class vtkOpenGLRenderer;
47 
48 class VTKRENDERINGPARALLEL_EXPORT vtkSynchronizedRenderers : public vtkObject
49 {
50 public:
53  void PrintSelf(ostream& os, vtkIndent indent);
54 
56 
62  virtual void SetRenderer(vtkRenderer*);
65 
67 
72  vtkGetObjectMacro(ParallelController, vtkMultiProcessController);
74 
76 
80  vtkSetMacro(ParallelRendering, bool);
81  vtkGetMacro(ParallelRendering, bool);
82  vtkBooleanMacro(ParallelRendering, bool);
84 
86 
89  vtkSetClampMacro(ImageReductionFactor, int, 1, 50);
90  vtkGetMacro(ImageReductionFactor, int);
92 
94 
99  vtkSetMacro(WriteBackImages, bool);
100  vtkGetMacro(WriteBackImages, bool);
101  vtkBooleanMacro(WriteBackImages, bool);
103 
105 
109  vtkSetMacro(UseFXAA, bool)
110  vtkGetMacro(UseFXAA, bool)
111  vtkBooleanMacro(UseFXAA, bool)
113 
115 
118  vtkGetObjectMacro(FXAAOptions, vtkFXAAOptions)
119  virtual void SetFXAAOptions(vtkFXAAOptions*);
121 
123 
128  vtkSetMacro(RootProcessId, int);
129  vtkGetMacro(RootProcessId, int);
131 
139  void CollectiveExpandForVisiblePropBounds(double bounds[6]);
140 
142 
146  virtual void SetCaptureDelegate(vtkSynchronizedRenderers*);
147  vtkGetObjectMacro(CaptureDelegate, vtkSynchronizedRenderers);
149 
151 
158  vtkSetMacro(AutomaticEventHandling, bool);
159  vtkGetMacro(AutomaticEventHandling, bool);
160  vtkBooleanMacro(AutomaticEventHandling, bool);
162 
163  enum
164  {
165  SYNC_RENDERER_TAG = 15101,
166  RESET_CAMERA_TAG = 15102,
167  COMPUTE_BOUNDS_TAG = 15103
168  };
169 
172  struct VTKRENDERINGPARALLEL_EXPORT vtkRawImage
173  {
174  public:
176  {
177  this->Valid = false;
178  this->Size[0] = this->Size[1] = 0;
180  }
181 
182  void Resize(int dx, int dy, int numcomps)
183  {
184  this->Valid = false;
185  this->Allocate(dx, dy, numcomps);
186  }
187 
191  void Initialize(int dx, int dy, vtkUnsignedCharArray* data);
192 
193  void MarkValid() { this->Valid = true; }
194  void MarkInValid() { this->Valid = false; }
195 
196  bool IsValid() { return this->Valid; }
197  int GetWidth() { return this->Size[0];}
198  int GetHeight() { return this->Size[1];}
200  { return this->Data; }
201 
202  // Pushes the image to the viewport.
204 
205  // This is a raw version of PushToViewport() that assumes that the
206  // glViewport() has already been setup externally.
207  // the argument is optional for backwards compat with old OpenGL
208  bool PushToFrameBuffer(vtkRenderer *ren = NULL);
209 
210  // Captures the image from the viewport.
211  // This doesn't trigger a render, just captures what's currently there in
212  // the active buffer.
214 
215  // Save the image as a png. Useful for debugging.
216  void SaveAsPNG(const char* filename);
217 
218  private:
219  bool Valid;
220  int Size[2];
222 
223  void Allocate(int dx, int dy, int numcomps);
224  };
225 
226 protected:
229 
231  {
233  int Draw;
235  double Viewport[4];
236  double CameraPosition[3];
237  double CameraFocalPoint[3];
238  double CameraViewUp[3];
239  double CameraWindowCenter[2];
240  double CameraClippingRange[2];
243  double EyeTransformMatrix[16];
244  double ModelTransformMatrix[16];
245 
246  // Save/restore the struct to/from a stream.
249 
252  };
253 
254  bool UseFXAA;
257 
258  // These methods are called on all processes as a consequence of corresponding
259  // events being called on the renderer.
260  virtual void HandleStartRender();
261  virtual void HandleEndRender();
262  virtual void HandleAbortRender() {}
263 
264  virtual void MasterStartRender();
265  virtual void SlaveStartRender();
266 
267  virtual void MasterEndRender();
268  virtual void SlaveEndRender();
269 
272 
281 
287  virtual void PushImageToScreen();
288 
292 
298 
299 private:
300  vtkSynchronizedRenderers(const vtkSynchronizedRenderers&) VTK_DELETE_FUNCTION;
301  void operator=(const vtkSynchronizedRenderers&) VTK_DELETE_FUNCTION;
302 
303  class vtkObserver;
304  vtkObserver* Observer;
305  friend class vtkObserver;
306 
307  double LastViewport[4];
308 };
309 
310 #endif
311 
vtkSynchronizedRenderers::CaptureDelegate
vtkSynchronizedRenderers * CaptureDelegate
Definition: vtkSynchronizedRenderers.h:289
vtkSynchronizedRenderers::CaptureRenderedImage
virtual vtkRawImage & CaptureRenderedImage()
Can be used in HandleEndRender(), MasterEndRender() or SlaveEndRender() calls to capture the rendered...
vtkSynchronizedRenderers::RendererInfo::CameraParallelProjection
int CameraParallelProjection
Definition: vtkSynchronizedRenderers.h:234
vtkSynchronizedRenderers::RendererInfo::Restore
bool Restore(vtkMultiProcessStream &stream)
vtkSynchronizedRenderers::vtkRawImage::SaveAsPNG
void SaveAsPNG(const char *filename)
vtkX3D::data
@ data
Definition: vtkX3D.h:315
vtkSynchronizedRenderers::WriteBackImages
bool WriteBackImages
Definition: vtkSynchronizedRenderers.h:295
vtkMultiProcessStream
stream used to pass data across processes using vtkMultiProcessController.
Definition: vtkMultiProcessStream.h:41
vtkSynchronizedRenderers::vtkRawImage::PushToViewport
bool PushToViewport(vtkRenderer *)
vtkUnsignedCharArray
dynamic, self-adjusting array of unsigned char
Definition: vtkUnsignedCharArray.h:42
vtkSynchronizedRenderers::RootProcessId
int RootProcessId
Definition: vtkSynchronizedRenderers.h:296
vtkSynchronizedRenderers::FXAAFilter
vtkOpenGLFXAAFilter * FXAAFilter
Definition: vtkSynchronizedRenderers.h:256
vtkSmartPointer< vtkUnsignedCharArray >
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:60
vtkSynchronizedRenderers::FXAAOptions
vtkFXAAOptions * FXAAOptions
Definition: vtkSynchronizedRenderers.h:255
vtkFXAAOptions
Configuration for FXAA implementations.
Definition: vtkFXAAOptions.h:31
vtkSynchronizedRenderers::HandleAbortRender
virtual void HandleAbortRender()
Definition: vtkSynchronizedRenderers.h:262
vtkSynchronizedRenderers::RendererInfo::Save
void Save(vtkMultiProcessStream &stream)
vtkSynchronizedRenderers::AutomaticEventHandling
bool AutomaticEventHandling
Definition: vtkSynchronizedRenderers.h:297
vtkSynchronizedRenderers::ParallelController
vtkMultiProcessController * ParallelController
Definition: vtkSynchronizedRenderers.h:270
vtkSynchronizedRenderers::vtkSynchronizedRenderers
vtkSynchronizedRenderers()
vtkSynchronizedRenderers::GetRenderer
virtual vtkRenderer * GetRenderer()
vtkSynchronizedRenderers::vtkRawImage::GetWidth
int GetWidth()
Definition: vtkSynchronizedRenderers.h:197
vtkSynchronizedRenderers::SetParallelController
virtual void SetParallelController(vtkMultiProcessController *)
Set the parallel message communicator.
vtkMultiProcessController
Multiprocessing communication superclass.
Definition: vtkMultiProcessController.h:83
vtkSynchronizedRenderers::RendererInfo::CameraParallelScale
double CameraParallelScale
Definition: vtkSynchronizedRenderers.h:242
vtkSynchronizedRenderers::UseFXAA
bool UseFXAA
Definition: vtkSynchronizedRenderers.h:254
vtkSynchronizedRenderers::vtkRawImage::Resize
void Resize(int dx, int dy, int numcomps)
Definition: vtkSynchronizedRenderers.h:182
vtkSynchronizedRenderers::HandleEndRender
virtual void HandleEndRender()
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:40
vtkSynchronizedRenderers::HandleStartRender
virtual void HandleStartRender()
vtkSynchronizedRenderers::PushImageToScreen
virtual void PushImageToScreen()
Can be used in HandleEndRender(), MasterEndRender() or SlaveEndRender() calls to paste back the image...
vtkSynchronizedRenderers::vtkRawImage::MarkInValid
void MarkInValid()
Definition: vtkSynchronizedRenderers.h:194
vtkSynchronizedRenderers::RendererInfo::CopyTo
void CopyTo(vtkRenderer *)
vtkSynchronizedRenderers::ImageReductionFactor
int ImageReductionFactor
Definition: vtkSynchronizedRenderers.h:294
vtkSmartPointer.h
vtkOpenGLRenderer
OpenGL renderer.
Definition: vtkOpenGLRenderer.h:34
vtkUnsignedCharArray.h
vtkSmartPointer::New
static vtkSmartPointer< T > New()
Create an instance of a VTK object.
Definition: vtkSmartPointer.h:141
vtkOpenGLFXAAFilter
Perform FXAA antialiasing on the current framebuffer.
Definition: vtkOpenGLFXAAFilter.h:58
vtkSynchronizedRenderers::vtkRawImage::vtkRawImage
vtkRawImage()
Definition: vtkSynchronizedRenderers.h:175
vtkSynchronizedRenderers::RendererInfo::CopyFrom
void CopyFrom(vtkRenderer *)
vtkSynchronizedRenderers::vtkRawImage::Capture
bool Capture(vtkRenderer *)
vtkSynchronizedRenderers::SlaveEndRender
virtual void SlaveEndRender()
vtkSynchronizedRenderers::SlaveStartRender
virtual void SlaveStartRender()
vtkObject.h
vtkSynchronizedRenderers::vtkRawImage::GetHeight
int GetHeight()
Definition: vtkSynchronizedRenderers.h:198
vtkBooleanMacro
vtkBooleanMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkSetMacro
vtkSetMacro(IgnoreDriverBugs, bool)
Updates the extensions string.
vtkSynchronizedRenderers::vtkRawImage::PushToFrameBuffer
bool PushToFrameBuffer(vtkRenderer *ren=NULL)
vtkSynchronizedRenderers::RendererInfo::Draw
int Draw
Definition: vtkSynchronizedRenderers.h:233
vtkSynchronizedRenderers::RendererInfo::ImageReductionFactor
int ImageReductionFactor
Definition: vtkSynchronizedRenderers.h:232
vtkSynchronizedRenderers::RendererInfo
Definition: vtkSynchronizedRenderers.h:231
vtkSynchronizedRenderers::~vtkSynchronizedRenderers
~vtkSynchronizedRenderers()
vtkSynchronizedRenderers::vtkRawImage
vtkRawImage can be used to make it easier to deal with images for compositing/communicating over clie...
Definition: vtkSynchronizedRenderers.h:173
vtkSynchronizedRenderers::vtkRawImage::GetRawPtr
vtkUnsignedCharArray * GetRawPtr()
Definition: vtkSynchronizedRenderers.h:199
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:64
vtkSynchronizedRenderers::Renderer
vtkOpenGLRenderer * Renderer
Definition: vtkSynchronizedRenderers.h:271
vtkSynchronizedRenderers
synchronizes renderers across processes.
Definition: vtkSynchronizedRenderers.h:49
vtkSynchronizedRenderers::vtkRawImage::MarkValid
void MarkValid()
Definition: vtkSynchronizedRenderers.h:193
vtkSynchronizedRenderers::RendererInfo::CameraViewAngle
double CameraViewAngle
Definition: vtkSynchronizedRenderers.h:241
vtkSynchronizedRenderers::ParallelRendering
bool ParallelRendering
Definition: vtkSynchronizedRenderers.h:293
vtkSynchronizedRenderers::New
static vtkSynchronizedRenderers * New()
vtkSynchronizedRenderers::MasterStartRender
virtual void MasterStartRender()
vtkSynchronizedRenderers::MasterEndRender
virtual void MasterEndRender()
vtkSynchronizedRenderers::vtkRawImage::Initialize
void Initialize(int dx, int dy, vtkUnsignedCharArray *data)
Create the buffer from an image data.
vtkSynchronizedRenderers::SetRenderer
virtual void SetRenderer(vtkRenderer *)
Set the renderer to be synchronized by this instance.
vtkSynchronizedRenderers::ReducedImage
vtkRawImage ReducedImage
Definition: vtkSynchronizedRenderers.h:290
vtkSynchronizedRenderers::FullImage
vtkRawImage FullImage
Definition: vtkSynchronizedRenderers.h:291
vtkSynchronizedRenderers::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent)
Methods invoked by print to print information about the object including superclasses.
vtkSynchronizedRenderers::vtkRawImage::IsValid
bool IsValid()
Definition: vtkSynchronizedRenderers.h:196