VTK
vtkSynchronizedRenderers.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: $RCSfile$
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 =========================================================================*/
32 #ifndef vtkSynchronizedRenderers_h
33 #define vtkSynchronizedRenderers_h
34 
35 #include "vtkRenderingParallelModule.h" // For export macro
36 #include "vtkObject.h"
37 #include "vtkUnsignedCharArray.h" // needed for vtkUnsignedCharArray.
38 #include "vtkSmartPointer.h" // needed for vtkSmartPointer.
39 
40 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);
51 
53 
57  virtual void SetRenderer(vtkRenderer*);
58  virtual vtkRenderer* GetRenderer();
60 
62 
64  virtual void SetParallelController(vtkMultiProcessController*);
65  vtkGetObjectMacro(ParallelController, vtkMultiProcessController);
67 
69 
71  vtkSetMacro(ParallelRendering, bool);
72  vtkGetMacro(ParallelRendering, bool);
73  vtkBooleanMacro(ParallelRendering, bool);
75 
77 
78  vtkSetClampMacro(ImageReductionFactor, int, 1, 50);
79  vtkGetMacro(ImageReductionFactor, int);
81 
83 
86  vtkSetMacro(WriteBackImages, bool);
87  vtkGetMacro(WriteBackImages, bool);
88  vtkBooleanMacro(WriteBackImages, bool);
90 
92 
96  vtkSetMacro(RootProcessId, int);
97  vtkGetMacro(RootProcessId, int);
99 
105  void CollectiveExpandForVisiblePropBounds(double bounds[6]);
106 
108 
110  virtual void SetCaptureDelegate(vtkSynchronizedRenderers*);
111  vtkGetObjectMacro(CaptureDelegate, vtkSynchronizedRenderers);
113 
115 
121  vtkSetMacro(AutomaticEventHandling, bool);
122  vtkGetMacro(AutomaticEventHandling, bool);
123  vtkBooleanMacro(AutomaticEventHandling, bool);
125 
126 //BTX
127  enum
128  {
129  SYNC_RENDERER_TAG = 15101,
130  RESET_CAMERA_TAG = 15102,
131  COMPUTE_BOUNDS_TAG = 15103
132  };
133 
136  struct VTKRENDERINGPARALLEL_EXPORT vtkRawImage
137  {
138  public:
140  {
141  this->Valid = false;
142  this->Size[0] = this->Size[1] = 0;
144  }
145 
146  void Resize(int dx, int dy, int numcomps)
147  {
148  this->Valid = false;
149  this->Allocate(dx, dy, numcomps);
150  }
151 
153  void Initialize(int dx, int dy, vtkUnsignedCharArray* data);
154 
155  void MarkValid() { this->Valid = true; }
156  void MarkInValid() { this->Valid = false; }
157 
158  bool IsValid() { return this->Valid; }
159  int GetWidth() { return this->Size[0];}
160  int GetHeight() { return this->Size[1];}
162  { return this->Data; }
163 
164  // Pushes the image to the viewport.
165  bool PushToViewport(vtkRenderer*);
166 
167  // This is a raw version of PushToViewport() that assumes that the
168  // glViewport() has already been setup externally.
169  // the argument is optional for backwards compat with old OpenGL
170  bool PushToFrameBuffer(vtkRenderer *ren = NULL);
171 
172  // Captures the image from the viewport.
173  // This doesn't trigger a render, just captures what's currently there in
174  // the active buffer.
175  bool Capture(vtkRenderer*);
176 
177  // Save the image as a png. Useful for debugging.
178  void SaveAsPNG(const char* filename);
179 
180  private:
181  bool Valid;
182  int Size[2];
184 
185  void Allocate(int dx, int dy, int numcomps);
186  };
187 //ETX
188 protected:
191 
193  {
195  int Draw;
197  double Viewport[4];
198  double CameraPosition[3];
199  double CameraFocalPoint[3];
200  double CameraViewUp[3];
201  double CameraWindowCenter[2];
202  double CameraClippingRange[2];
205  double EyeTransformMatrix[16];
206  double ModelTransformMatrix[16];
207 
208  // Save/restore the struct to/from a stream.
209  void Save(vtkMultiProcessStream& stream);
210  bool Restore(vtkMultiProcessStream& stream);
211 
212  void CopyFrom(vtkRenderer*);
213  void CopyTo(vtkRenderer*);
214  };
215 
216  // These methods are called on all processes as a consequence of corresponding
217  // events being called on the renderer.
218  virtual void HandleStartRender();
219  virtual void HandleEndRender();
220  virtual void HandleAbortRender() {}
221 
222  virtual void MasterStartRender();
223  virtual void SlaveStartRender();
224 
225  virtual void MasterEndRender();
226  virtual void SlaveEndRender();
227 
230 
236  virtual vtkRawImage& CaptureRenderedImage();
237 
241  virtual void PushImageToScreen();
242 
246 
252 
253 private:
254  vtkSynchronizedRenderers(const vtkSynchronizedRenderers&); // Not implemented
255  void operator=(const vtkSynchronizedRenderers&); // Not implemented
256 
257  class vtkObserver;
258  vtkObserver* Observer;
259  friend class vtkObserver;
260 
261  double LastViewport[4];
262 };
263 
264 #endif
265 
abstract base class for most VTK objects
Definition: vtkObject.h:61
stream used to pass data across processes using vtkMultiProcessController.
vtkSynchronizedRenderers * CaptureDelegate
abstract specification for renderers
Definition: vtkRenderer.h:63
static vtkSmartPointer< T > New()
vtkRawImage can be used to make it easier to deal with images for compositing/communicating over clie...
virtual void PrintSelf(ostream &os, vtkIndent indent)
a simple class to control print indentation
Definition: vtkIndent.h:38
vtkMultiProcessController * ParallelController
dynamic, self-adjusting array of unsigned char
void Resize(int dx, int dy, int numcomps)
synchronizes renderers across processes.
static vtkObject * New()
OpenGL renderer.
Multiprocessing communication superclass.