00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00049 #ifndef __vtkParallelRenderManager_h
00050 #define __vtkParallelRenderManager_h
00051 
00052 #include "vtkObject.h"
00053 
00054 class vtkRenderWindow;
00055 class vtkRenderer;
00056 class vtkUnsignedCharArray;
00057 class vtkDoubleArray;
00058 class vtkTimerLog;
00059 class vtkMultiProcessController;
00060 
00061 class VTK_PARALLEL_EXPORT vtkParallelRenderManager : public vtkObject
00062 {
00063 public:
00064   vtkTypeRevisionMacro(vtkParallelRenderManager, vtkObject);
00065   virtual void PrintSelf(ostream &os, vtkIndent indent);
00066 
00072   virtual vtkRenderWindow *MakeRenderWindow();
00073 
00078   virtual vtkRenderer *MakeRenderer();
00079 
00081 
00083   vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
00084   virtual void SetRenderWindow(vtkRenderWindow *renWin);
00086 
00088 
00090   vtkGetObjectMacro(Controller, vtkMultiProcessController);
00091   virtual void SetController(vtkMultiProcessController *controller);
00093 
00096   virtual void InitializePieces();
00097 
00103   virtual void InitializeOffScreen();
00104 
00109   virtual void StartInteractor();
00110 
00113   virtual void StartServices();
00114 
00116   virtual void StopServices();
00117 
00119 
00120   virtual void StartRender();
00121   virtual void EndRender();
00122   virtual void SatelliteStartRender();
00123   virtual void SatelliteEndRender();
00124   virtual void RenderRMI();
00125   virtual void ResetCamera(vtkRenderer *ren);
00126   virtual void ResetCameraClippingRange(vtkRenderer *ren);
00127   virtual void ComputeVisiblePropBoundsRMI();
00129 
00130   virtual void InitializeRMIs();
00131 
00135   virtual void ResetAllCameras();
00136 
00138   virtual void ComputeVisiblePropBounds(vtkRenderer *ren, double bounds[6]);
00139 
00141 
00145   vtkSetMacro(ParallelRendering, int);
00146   vtkGetMacro(ParallelRendering, int);
00147   vtkBooleanMacro(ParallelRendering, int);
00149 
00151 
00155   vtkSetMacro(RenderEventPropagation, int);
00156   vtkGetMacro(RenderEventPropagation, int);
00157   vtkBooleanMacro(RenderEventPropagation, int);
00159 
00161 
00164   vtkSetMacro(UseCompositing, int);
00165   vtkGetMacro(UseCompositing, int);
00166   vtkBooleanMacro(UseCompositing, int);
00168 
00170 
00181   virtual void SetImageReductionFactor(double factor);
00182   vtkGetMacro(ImageReductionFactor, double);
00184 
00185   vtkSetMacro(MaxImageReductionFactor, double);
00186   vtkGetMacro(MaxImageReductionFactor, double);
00187 
00193   virtual void SetImageReductionFactorForUpdateRate(double DesiredUpdateRate);
00194 
00196 
00199   vtkSetMacro(AutoImageReductionFactor, int);
00200   vtkGetMacro(AutoImageReductionFactor, int);
00201   vtkBooleanMacro(AutoImageReductionFactor, int);
00203 
00205 
00206   vtkGetMacro(RenderTime, double);
00207   vtkGetMacro(ImageProcessingTime, double);
00209 
00211 
00218   vtkSetMacro(WriteBackImages, int);
00219   vtkGetMacro(WriteBackImages, int);
00220   vtkBooleanMacro(WriteBackImages, int);
00222 
00224 
00227   vtkSetMacro(MagnifyImages, int);
00228   vtkGetMacro(MagnifyImages, int);
00229   vtkBooleanMacro(MagnifyImages, int);
00231 
00232 
00233   enum { NEAREST, LINEAR };
00234 
00235 
00237 
00240   virtual void SetMagnifyImageMethod(int method);
00241   vtkGetMacro(MagnifyImageMethod, int);
00242   void SetMagnifyImageMethodToNearest() {
00243     this->SetMagnifyImageMethod(NEAREST);
00244   }
00245   void SetMagnifyImageMethodToLinear() {
00246     this->SetMagnifyImageMethod(LINEAR);
00247   }
00249 
00251 
00256   virtual void GetPixelData(vtkUnsignedCharArray *data);
00257   virtual void GetPixelData(int x1, int y1, int x2, int y2,
00258           vtkUnsignedCharArray *data);
00260 
00262 
00267   virtual void GetReducedPixelData(vtkUnsignedCharArray *data);
00268   virtual void GetReducedPixelData(int x1, int y1, int x2, int y2,
00269            vtkUnsignedCharArray *data);
00271 
00273 
00274   vtkGetVector2Macro(FullImageSize, int);
00275   
00276   
00277   vtkGetVector2Macro(ReducedImageSize, int);
00279 
00282   void TileWindows(int xsize, int ysize, int nColumns);
00283 
00285 
00287   vtkSetMacro(UseRGBA, int);
00288   vtkGetMacro(UseRGBA, int);
00290 
00291 
00292   enum Tags {
00293     RENDER_RMI_TAG=34532,
00294     COMPUTE_VISIBLE_PROP_BOUNDS_RMI_TAG=54636,
00295     WIN_INFO_INT_TAG=87834,
00296     WIN_INFO_DOUBLE_TAG=87835,
00297     REN_INFO_INT_TAG=87836,
00298     REN_INFO_DOUBLE_TAG=87837,
00299     LIGHT_INFO_DOUBLE_TAG=87838,
00300     REN_ID_TAG=58794,
00301     BOUNDS_TAG=23543
00302   };
00303 
00304   virtual void CheckForAbortRender() {}
00305   virtual int CheckForAbortComposite() {return 0;}  
00306 
00307 
00308 
00309 #if defined(_COMPILER_VERSION)
00310 # pragma set woff 3303
00311 #endif
00312 #if defined(__INTEL_COMPILER)
00313 # pragma warning (push)
00314 # pragma warning (disable:858)
00315 #endif
00316 
00317 #ifdef VTK_WORKAROUND_WINDOWS_MANGLE
00318 # define StartServiceA StartService
00319 # define StartServiceW StartService
00320 #endif
00321 
00324   VTK_LEGACY(virtual void const StartService());
00325 
00326 #ifdef VTK_WORKAROUND_WINDOWS_MANGLE
00327 # undef StartServiceW
00328 # undef StartServiceA
00329   
00330   VTK_LEGACY(virtual void const StartServiceA());
00331   VTK_LEGACY(virtual void const StartServiceW());
00332   
00333 #endif
00334 
00335 
00336 #if defined(__INTEL_COMPILER)
00337 # pragma warning (pop)
00338 #endif
00339 #if defined(_COMPILER_VERSION)
00340 # pragma reset woff 3303
00341 #endif
00342 
00343 protected:
00344   vtkParallelRenderManager();
00345   ~vtkParallelRenderManager();
00346 
00347   vtkRenderWindow *RenderWindow;
00348   vtkMultiProcessController *Controller;
00349 
00356   int RootProcessId;
00357 
00358   int ObservingRenderWindow;
00359   int ObservingRenderer;
00360   int ObservingAbort;
00361 
00362   unsigned long StartRenderTag;
00363   unsigned long EndRenderTag;
00364   unsigned long ResetCameraTag;
00365   unsigned long ResetCameraClippingRangeTag;
00366   unsigned long AbortRenderCheckTag;
00367 
00368   double ImageReductionFactor;
00369   double MaxImageReductionFactor;
00370   int AutoImageReductionFactor;
00371 
00372   int WriteBackImages;
00373   int MagnifyImages;
00374   int MagnifyImageMethod;
00375 
00376   int UseRGBA;
00377 
00378   int FullImageSize[2];
00379   int ReducedImageSize[2];
00380 
00381   vtkUnsignedCharArray *FullImage;
00382   vtkUnsignedCharArray *ReducedImage;
00383 
00384   int FullImageUpToDate;
00385   int ReducedImageUpToDate;
00386   int RenderWindowImageUpToDate;
00387 
00388   vtkDoubleArray *Viewports;
00389 
00390   int Lock;
00391   int ParallelRendering;
00392   int RenderEventPropagation;
00393   int UseCompositing;
00394 
00395   vtkTimerLog *Timer;
00396 
00397   double RenderTime;
00398   double ImageProcessingTime;
00399 
00402   double AverageTimePerPixel;
00403 
00405 
00406   virtual void SendWindowInformation() {}
00407   virtual void ReceiveWindowInformation() {}
00408   virtual void SendRendererInformation(vtkRenderer *) {};
00409   virtual void ReceiveRendererInformation(vtkRenderer *) {};
00411 
00413 
00415   virtual void PreRenderProcessing() = 0;
00416   virtual void PostRenderProcessing() = 0;
00418 
00421   virtual void SetRenderWindowSize();
00422 
00426   virtual void LocalComputeVisiblePropBounds(vtkRenderer *ren, double bounds[6]);
00427 
00429   virtual void MagnifyReducedImage();
00430 
00432   virtual void WriteFullImage();
00433 
00435   virtual void ReadReducedImage();
00436 
00439   virtual int LastRenderInFrontBuffer();
00440 
00442   virtual int ChooseBuffer();
00443   
00445 
00446   virtual void SetRenderWindowPixelData(vtkUnsignedCharArray *pixels,
00447           const int pixelDimensions[2]);
00449 
00450 
00451   struct RenderWindowInfoInt
00452   {
00453     int FullSize[2];
00454     int ReducedSize[2];
00455     int NumberOfRenderers;
00456     int UseCompositing;
00457   };
00458 
00459   struct RenderWindowInfoDouble
00460   {
00461     double ImageReductionFactor;
00462     double DesiredUpdateRate;
00463   };
00464   
00465   struct RendererInfoInt
00466   {
00467     int NumberOfLights;
00468   };
00469 
00470   struct RendererInfoDouble
00471   {
00472     double Viewport[4];
00473     double CameraPosition[3];
00474     double CameraFocalPoint[3];
00475     double CameraViewUp[3];
00476     double WindowCenter[2];
00477     double CameraClippingRange[2];
00478     double CameraViewAngle;
00479     double Background[3];
00480     double ParallelScale;
00481   };
00482   
00483   struct LightInfoDouble
00484   {
00485     double Position[3];
00486     double FocalPoint[3];
00487     double Type;
00488   };
00489 
00490   static const int WIN_INFO_INT_SIZE;
00491   static const int WIN_INFO_DOUBLE_SIZE;
00492   static const int REN_INFO_INT_SIZE;
00493   static const int REN_INFO_DOUBLE_SIZE;
00494   static const int LIGHT_INFO_DOUBLE_SIZE;
00495 
00496 
00497   int AddedRMIs;
00498 private:
00499   vtkParallelRenderManager(const vtkParallelRenderManager &); 
00500   void operator=(const vtkParallelRenderManager &);  
00501 };
00502 
00503 #endif //__vtkParalleRenderManager_h