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 StartService();
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(int factor);
00182 vtkGetMacro(ImageReductionFactor, int);
00184
00185 vtkSetMacro(MaxImageReductionFactor, int);
00186 vtkGetMacro(MaxImageReductionFactor, int);
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
00280
00281 enum Tags {
00282 RENDER_RMI_TAG=34532,
00283 COMPUTE_VISIBLE_PROP_BOUNDS_RMI_TAG=54636,
00284 WIN_INFO_INT_TAG=87834,
00285 WIN_INFO_DOUBLE_TAG=87835,
00286 REN_INFO_INT_TAG=87836,
00287 REN_INFO_DOUBLE_TAG=87837,
00288 LIGHT_INFO_DOUBLE_TAG=87838,
00289 REN_ID_TAG=58794,
00290 BOUNDS_TAG=23543
00291 };
00292
00293 virtual void CheckForAbortRender() {}
00294
00295
00296 protected:
00297 vtkParallelRenderManager();
00298 ~vtkParallelRenderManager();
00299
00300 vtkRenderWindow *RenderWindow;
00301 vtkMultiProcessController *Controller;
00302
00309 int RootProcessId;
00310
00311 int ObservingRenderWindow;
00312 int ObservingRenderer;
00313 int ObservingAbort;
00314
00315 unsigned long StartRenderTag;
00316 unsigned long EndRenderTag;
00317 unsigned long ResetCameraTag;
00318 unsigned long ResetCameraClippingRangeTag;
00319 unsigned long AbortRenderCheckTag;
00320
00321 int ImageReductionFactor;
00322 int MaxImageReductionFactor;
00323 int AutoImageReductionFactor;
00324
00325 int WriteBackImages;
00326 int MagnifyImages;
00327 int MagnifyImageMethod;
00328
00329 int FullImageSize[2];
00330 int ReducedImageSize[2];
00331
00332 vtkUnsignedCharArray *FullImage;
00333 vtkUnsignedCharArray *ReducedImage;
00334
00335 int FullImageUpToDate;
00336 int ReducedImageUpToDate;
00337 int RenderWindowImageUpToDate;
00338
00339 vtkDoubleArray *Viewports;
00340
00341 int Lock;
00342 int ParallelRendering;
00343 int RenderEventPropagation;
00344 int UseCompositing;
00345
00346 vtkTimerLog *Timer;
00347
00348 double RenderTime;
00349 double ImageProcessingTime;
00350
00353 double AverageTimePerPixel;
00354
00356
00357 virtual void SendWindowInformation() {}
00358 virtual void ReceiveWindowInformation() {}
00359 virtual void SendRendererInformation(vtkRenderer *) {};
00360 virtual void ReceiveRendererInformation(vtkRenderer *) {};
00362
00364
00366 virtual void PreRenderProcessing() = 0;
00367 virtual void PostRenderProcessing() = 0;
00369
00372 virtual void SetRenderWindowSize();
00373
00377 virtual void LocalComputeVisiblePropBounds(vtkRenderer *ren, double bounds[6]);
00378
00380 virtual void MagnifyReducedImage();
00381
00383 virtual void WriteFullImage();
00384
00386 virtual void ReadReducedImage();
00387
00390 virtual int LastRenderInFrontBuffer();
00391
00393 virtual int ChooseBuffer();
00394
00396
00397 virtual void SetRenderWindowPixelData(vtkUnsignedCharArray *pixels,
00398 const int pixelDimensions[2]);
00400
00401
00402 struct RenderWindowInfoInt
00403 {
00404 int FullSize[2];
00405 int ReducedSize[2];
00406 int NumberOfRenderers;
00407 int ImageReductionFactor;
00408 int UseCompositing;
00409 };
00410
00411 struct RenderWindowInfoDouble
00412 {
00413 double DesiredUpdateRate;
00414 };
00415
00416 struct RendererInfoInt
00417 {
00418 int NumberOfLights;
00419 };
00420
00421 struct RendererInfoDouble
00422 {
00423 double Viewport[4];
00424 double CameraPosition[3];
00425 double CameraFocalPoint[3];
00426 double CameraViewUp[3];
00427 double CameraClippingRange[2];
00428 double Background[3];
00429 double ParallelScale;
00430 };
00431
00432 struct LightInfoDouble
00433 {
00434 double Position[3];
00435 double FocalPoint[3];
00436 double Type;
00437 };
00438
00439 static const int WIN_INFO_INT_SIZE;
00440 static const int WIN_INFO_DOUBLE_SIZE;
00441 static const int REN_INFO_INT_SIZE;
00442 static const int REN_INFO_DOUBLE_SIZE;
00443 static const int LIGHT_INFO_DOUBLE_SIZE;
00444
00445
00446 private:
00447 vtkParallelRenderManager(const vtkParallelRenderManager &);
00448 void operator=(const vtkParallelRenderManager &);
00449 };
00450
00451 #endif //__vtkParalleRenderManager_h