VTK
|
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