VTK
dox/Parallel/vtkSynchronizedRenderWindows.h
Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Visualization Toolkit
00004   Module:    $RCSfile$
00005 
00006   Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
00007   All rights reserved.
00008   See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
00009 
00010      This software is distributed WITHOUT ANY WARRANTY; without even
00011      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
00012      PURPOSE.  See the above copyright notice for more information.
00013 
00014 =========================================================================*/
00026 #ifndef __vtkSynchronizedRenderWindows_h
00027 #define __vtkSynchronizedRenderWindows_h
00028 
00029 #include "vtkObject.h"
00030 
00031 class vtkRenderWindow;
00032 class vtkMultiProcessController;
00033 class vtkCommand;
00034 class vtkMultiProcessStream;
00035 
00036 class VTK_PARALLEL_EXPORT vtkSynchronizedRenderWindows : public vtkObject
00037 {
00038 public:
00039   static vtkSynchronizedRenderWindows* New();
00040   vtkTypeMacro(vtkSynchronizedRenderWindows, vtkObject);
00041   void PrintSelf(ostream& os, vtkIndent indent);
00042 
00044 
00047   void SetRenderWindow(vtkRenderWindow*);
00048   vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
00050 
00052 
00054   void SetParallelController(vtkMultiProcessController*);
00055   vtkGetObjectMacro(ParallelController, vtkMultiProcessController);
00057 
00059 
00068   void SetIdentifier(unsigned int id);
00069   vtkGetMacro(Identifier, unsigned int);
00071 
00073 
00076   vtkSetMacro(ParallelRendering, bool);
00077   vtkGetMacro(ParallelRendering, bool);
00078   vtkBooleanMacro(ParallelRendering, bool);
00080 
00081   // Turns on/off render event propagation.  When on (the default) and
00082   // ParallelRendering is on, process 0 will send an RMI call to all remote
00083   // processes to perform a synchronized render.  When off, render must be
00084   // manually called on each process.
00085   vtkSetMacro(RenderEventPropagation, bool);
00086   vtkGetMacro(RenderEventPropagation, bool);
00087   vtkBooleanMacro(RenderEventPropagation, bool);
00088 
00091   virtual void AbortRender();
00092 
00094 
00098   vtkSetMacro(RootProcessId, int);
00099   vtkGetMacro(RootProcessId, int);
00101 
00102 //BTX
00103   enum
00104     {
00105     SYNC_RENDER_TAG = 15001,
00106     };
00107 protected:
00108   vtkSynchronizedRenderWindows();
00109   ~vtkSynchronizedRenderWindows();
00110 
00111   struct RenderWindowInfo
00112   {
00113     int WindowSize[2];
00114     int TileScale[2];
00115     double TileViewport[4];
00116     double DesiredUpdateRate;
00117 
00118     // Save/restore the struct to/from a stream.
00119     void Save(vtkMultiProcessStream& stream);
00120     bool Restore(vtkMultiProcessStream& stream);
00121     void CopyFrom(vtkRenderWindow*);
00122     void CopyTo(vtkRenderWindow*);
00123   };
00124 
00125   // These methods are called on all processes as a consequence of corresponding
00126   // events being called on the render window.
00127   virtual void HandleStartRender();
00128   virtual void HandleEndRender() {}
00129   virtual void HandleAbortRender() {}
00130 
00131   virtual void MasterStartRender();
00132   virtual void SlaveStartRender();
00133 
00134   unsigned int Identifier;
00135   bool ParallelRendering;
00136   bool RenderEventPropagation;
00137   int RootProcessId;
00138 
00139   vtkRenderWindow* RenderWindow;
00140   vtkMultiProcessController* ParallelController;
00141 
00142 private:
00143   vtkSynchronizedRenderWindows(const vtkSynchronizedRenderWindows&); // Not implemented.
00144   void operator=(const vtkSynchronizedRenderWindows&); // Not implemented.
00145 
00146   class vtkObserver;
00147   vtkObserver* Observer;
00148   friend class vtkObserver;
00149 //ETX
00150 };
00151 
00152 #endif
00153 
00154