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