VTK
dox/Rendering/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 "vtkRenderingParallelModule.h" // For export macro
00030 #include "vtkObject.h"
00031 
00032 class vtkRenderWindow;
00033 class vtkMultiProcessController;
00034 class vtkCommand;
00035 class vtkMultiProcessStream;
00036 
00037 class VTKRENDERINGPARALLEL_EXPORT vtkSynchronizedRenderWindows : public vtkObject
00038 {
00039 public:
00040   static vtkSynchronizedRenderWindows* New();
00041   vtkTypeMacro(vtkSynchronizedRenderWindows, vtkObject);
00042   void PrintSelf(ostream& os, vtkIndent indent);
00043 
00045 
00048   void SetRenderWindow(vtkRenderWindow*);
00049   vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
00051 
00053 
00055   void SetParallelController(vtkMultiProcessController*);
00056   vtkGetObjectMacro(ParallelController, vtkMultiProcessController);
00058 
00060 
00069   void SetIdentifier(unsigned int id);
00070   vtkGetMacro(Identifier, unsigned int);
00072 
00074 
00077   vtkSetMacro(ParallelRendering, bool);
00078   vtkGetMacro(ParallelRendering, bool);
00079   vtkBooleanMacro(ParallelRendering, bool);
00081 
00082   // Turns on/off render event propagation.  When on (the default) and
00083   // ParallelRendering is on, process 0 will send an RMI call to all remote
00084   // processes to perform a synchronized render.  When off, render must be
00085   // manually called on each process.
00086   vtkSetMacro(RenderEventPropagation, bool);
00087   vtkGetMacro(RenderEventPropagation, bool);
00088   vtkBooleanMacro(RenderEventPropagation, bool);
00089 
00092   virtual void AbortRender();
00093 
00095 
00099   vtkSetMacro(RootProcessId, int);
00100   vtkGetMacro(RootProcessId, int);
00102 
00103 //BTX
00104   enum
00105     {
00106     SYNC_RENDER_TAG = 15001,
00107     };
00108 protected:
00109   vtkSynchronizedRenderWindows();
00110   ~vtkSynchronizedRenderWindows();
00111 
00112   struct RenderWindowInfo
00113   {
00114     int WindowSize[2];
00115     int TileScale[2];
00116     double TileViewport[4];
00117     double DesiredUpdateRate;
00118 
00119     // Save/restore the struct to/from a stream.
00120     void Save(vtkMultiProcessStream& stream);
00121     bool Restore(vtkMultiProcessStream& stream);
00122     void CopyFrom(vtkRenderWindow*);
00123     void CopyTo(vtkRenderWindow*);
00124   };
00125 
00126   // These methods are called on all processes as a consequence of corresponding
00127   // events being called on the render window.
00128   virtual void HandleStartRender();
00129   virtual void HandleEndRender() {}
00130   virtual void HandleAbortRender() {}
00131 
00132   virtual void MasterStartRender();
00133   virtual void SlaveStartRender();
00134 
00135   unsigned int Identifier;
00136   bool ParallelRendering;
00137   bool RenderEventPropagation;
00138   int RootProcessId;
00139 
00140   vtkRenderWindow* RenderWindow;
00141   vtkMultiProcessController* ParallelController;
00142 
00143 private:
00144   vtkSynchronizedRenderWindows(const vtkSynchronizedRenderWindows&); // Not implemented.
00145   void operator=(const vtkSynchronizedRenderWindows&); // Not implemented.
00146 
00147   class vtkObserver;
00148   vtkObserver* Observer;
00149   friend class vtkObserver;
00150 //ETX
00151 };
00152 
00153 #endif
00154 
00155