VTK  9.0.1
vtkParallelRenderManager.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkParallelRenderManager.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  Copyright 2003 Sandia Corporation. Under the terms of Contract
11  DE-AC04-94AL85000, there is a non-exclusive license for use of this work by
12  or on behalf of the U.S. Government. Redistribution and use in source and
13  binary forms, with or without modification, are permitted provided that this
14  Notice and any statement of authorship are reproduced on all copies.
15 
16  This software is distributed WITHOUT ANY WARRANTY; without even
17  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
18  PURPOSE. See the above copyright notice for more information.
19 
20 =========================================================================*/
50 #ifndef vtkParallelRenderManager_h
51 #define vtkParallelRenderManager_h
52 
53 #include "vtkObject.h"
54 #include "vtkRenderingParallelModule.h" // For export macro
55 
56 class vtkDoubleArray;
59 class vtkRenderer;
61 class vtkRenderWindow;
62 class vtkTimerLog;
64 
65 class VTKRENDERINGPARALLEL_EXPORT vtkParallelRenderManager : public vtkObject
66 {
67 public:
69  void PrintSelf(ostream& os, vtkIndent indent) override;
70 
78  virtual vtkRenderWindow* MakeRenderWindow();
79 
86  virtual vtkRenderer* MakeRenderer();
87 
89 
93  vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
94  virtual void SetRenderWindow(vtkRenderWindow* renWin);
96 
98 
102  vtkGetObjectMacro(Controller, vtkMultiProcessController);
103  virtual void SetController(vtkMultiProcessController* controller);
105 
110  virtual void InitializePieces();
111 
119  virtual void InitializeOffScreen();
120 
127  virtual void StartInteractor();
128 
133  virtual void StartServices();
134 
138  virtual void StopServices();
139 
141 
144  virtual void StartRender();
145  virtual void EndRender();
146  virtual void SatelliteStartRender();
147  virtual void SatelliteEndRender();
148  virtual void RenderRMI();
149  virtual void ResetCamera(vtkRenderer* ren);
150  virtual void ResetCameraClippingRange(vtkRenderer* ren);
151  virtual void ComputeVisiblePropBoundsRMI(int renderId);
153 
154  virtual void InitializeRMIs();
155 
161  virtual void ResetAllCameras();
162 
166  virtual void ComputeVisiblePropBounds(vtkRenderer* ren, double bounds[6]);
167 
169 
175  vtkSetMacro(ParallelRendering, int);
176  vtkGetMacro(ParallelRendering, int);
177  vtkBooleanMacro(ParallelRendering, int);
179 
181 
187  vtkSetMacro(RenderEventPropagation, int);
188  vtkGetMacro(RenderEventPropagation, int);
189  vtkBooleanMacro(RenderEventPropagation, int);
191 
197  static void SetDefaultRenderEventPropagation(bool val)
198  {
200  }
202  {
204  }
205 
207 
212  vtkSetMacro(UseCompositing, int);
213  vtkGetMacro(UseCompositing, int);
214  vtkBooleanMacro(UseCompositing, int);
216 
218 
231  virtual void SetImageReductionFactor(double factor);
232  vtkGetMacro(ImageReductionFactor, double);
234 
235  vtkSetMacro(MaxImageReductionFactor, double);
236  vtkGetMacro(MaxImageReductionFactor, double);
237 
244  virtual void SetImageReductionFactorForUpdateRate(double DesiredUpdateRate);
245 
247 
252  vtkSetMacro(AutoImageReductionFactor, int);
253  vtkGetMacro(AutoImageReductionFactor, int);
254  vtkBooleanMacro(AutoImageReductionFactor, int);
256 
258 
261  vtkGetMacro(RenderTime, double);
262  vtkGetMacro(ImageProcessingTime, double);
264 
266 
275  vtkGetMacro(SyncRenderWindowRenderers, int);
276  vtkSetMacro(SyncRenderWindowRenderers, int);
277  vtkBooleanMacro(SyncRenderWindowRenderers, int);
278  virtual void AddRenderer(vtkRenderer*);
279  virtual void RemoveRenderer(vtkRenderer*);
280  virtual void RemoveAllRenderers();
282 
284 
293  vtkSetMacro(WriteBackImages, int);
294  vtkGetMacro(WriteBackImages, int);
295  vtkBooleanMacro(WriteBackImages, int);
297 
299 
304  vtkSetMacro(MagnifyImages, int);
305  vtkGetMacro(MagnifyImages, int);
306  vtkBooleanMacro(MagnifyImages, int);
308 
309  enum
310  {
312  LINEAR
313  };
314 
316 
321  virtual void SetMagnifyImageMethod(int method);
322  vtkGetMacro(MagnifyImageMethod, int);
323  void SetMagnifyImageMethodToNearest() { this->SetMagnifyImageMethod(NEAREST); }
324  void SetMagnifyImageMethodToLinear() { this->SetMagnifyImageMethod(LINEAR); }
326 
328 
331  virtual void MagnifyImage(vtkUnsignedCharArray* fullImage, const int fullImageSize[2],
332  vtkUnsignedCharArray* reducedImage, const int reducedImageSize[2],
333  const int fullImageViewport[4] = nullptr, const int reducedImageViewport[4] = nullptr);
334  static void MagnifyImageNearest(vtkUnsignedCharArray* fullImage, const int fullImageSize[2],
335  vtkUnsignedCharArray* reducedImage, const int reducedImageSize[2],
336  const int fullImageViewport[4] = nullptr, const int reducedImageViewport[4] = nullptr);
337  static void MagnifyImageLinear(vtkUnsignedCharArray* fullImage, const int fullImageSize[2],
338  vtkUnsignedCharArray* reducedImage, const int reducedImageSize[2],
339  const int fullImageViewport[4] = nullptr, const int reducedImageViewport[4] = nullptr);
341 
343 
350  virtual void GetPixelData(vtkUnsignedCharArray* data);
351  virtual void GetPixelData(int x1, int y1, int x2, int y2, vtkUnsignedCharArray* data);
353 
355 
362  virtual void GetReducedPixelData(vtkUnsignedCharArray* data);
363  virtual void GetReducedPixelData(int x1, int y1, int x2, int y2, vtkUnsignedCharArray* data);
365 
367 
370  vtkGetVector2Macro(FullImageSize, int);
372 
373 
376  vtkGetVector2Macro(ReducedImageSize, int);
378 
383  void TileWindows(int xsize, int ysize, int nColumns);
384 
386 
390  vtkSetMacro(UseRGBA, int);
391  vtkGetMacro(UseRGBA, int);
393 
395 
399  vtkSetMacro(ForceRenderWindowSize, int);
400  vtkGetMacro(ForceRenderWindowSize, int);
402 
404 
408  vtkSetVector2Macro(ForcedRenderWindowSize, int);
409  vtkGetVector2Macro(ForcedRenderWindowSize, int);
411 
412  enum Tags
413  {
414  RENDER_RMI_TAG = 34532,
415  COMPUTE_VISIBLE_PROP_BOUNDS_RMI_TAG = 54636,
416  WIN_INFO_TAG = 87834,
417  REN_INFO_TAG = 87836,
418  LIGHT_INFO_TAG = 87838,
419  REN_ID_TAG = 58794,
420  BOUNDS_TAG = 23543
421  };
422 
423  virtual void CheckForAbortRender() {}
424  virtual int CheckForAbortComposite() { return 0; }
425 
427 
433  vtkSetMacro(UseBackBuffer, int);
434  vtkGetMacro(UseBackBuffer, int);
435  vtkBooleanMacro(UseBackBuffer, int);
437 
439 
444  vtkSetMacro(SynchronizeTileProperties, int);
445  vtkGetMacro(SynchronizeTileProperties, int);
446  vtkBooleanMacro(SynchronizeTileProperties, int);
448 
450 
455  virtual void GenericStartRenderCallback();
456  virtual void GenericEndRenderCallback();
458 
459 protected:
461  ~vtkParallelRenderManager() override;
462 
464 
467  void AddRenderWindowEventHandlers();
468  void RemoveRenderWindowEventHandlers();
470 
474 
475  virtual vtkRendererCollection* GetRenderers();
476 
478  int ForcedRenderWindowSize[2];
479 
489 
492 
493  unsigned long StartRenderTag;
494  unsigned long EndRenderTag;
495  unsigned long ResetCameraTag;
497  unsigned long AbortRenderCheckTag;
498 
502 
506 
507  int UseRGBA;
509  int FullImageSize[2];
510  int ReducedImageSize[2];
511 
514 
518 
520 
521  int Lock;
526 
528 
529  double RenderTime;
531 
537 
544  virtual void SendWindowInformation() {}
545  virtual void ReceiveWindowInformation() {}
548 
558  virtual bool ProcessWindowInformation(vtkMultiProcessStream&) { return true; }
561 
563 
567  virtual void PreRenderProcessing() = 0;
568  virtual void PostRenderProcessing() = 0;
570 
575  virtual void SetRenderWindowSize();
576 
582  virtual void LocalComputeVisiblePropBounds(vtkRenderer* ren, double bounds[6]);
583 
587  virtual void MagnifyReducedImage();
588 
592  virtual void WriteFullImage();
593 
597  virtual void ReadReducedImage();
598 
603  virtual int LastRenderInFrontBuffer();
604 
608  virtual int ChooseBuffer();
609 
613  virtual void SetRenderWindowPixelData(vtkUnsignedCharArray* pixels, const int pixelDimensions[2]);
614 
621  virtual int ImageReduceRenderer(vtkRenderer*) { return 1; }
622 
624  {
625  int FullSize[2];
626  int ReducedSize[2];
629  int TileScale[2];
632  double TileViewport[4];
633 
634  // Initialize members
636 
637  // Save/restore the struct to/from a stream.
638  void Save(vtkMultiProcessStream& stream);
639  bool Restore(vtkMultiProcessStream& stream);
640  };
641 
643  {
644  int Draw;
646  double Viewport[4];
647  double CameraPosition[3];
648  double CameraFocalPoint[3];
649  double CameraViewUp[3];
650  double WindowCenter[2];
651  double CameraClippingRange[2];
653  double Background[3];
654  double Background2[3];
656 
658 
659  // Initialize members
661 
662  // Save/restore the struct to/from a stream.
663  void Save(vtkMultiProcessStream& stream);
664  bool Restore(vtkMultiProcessStream& stream);
665  };
666 
667  struct LightInfo
668  {
669  double Position[3];
670  double FocalPoint[3];
671  double Type;
672 
673  // Initialize members
675 
676  // Save/restore the struct to/from a stream.
677  void Save(vtkMultiProcessStream& stream);
678  bool Restore(vtkMultiProcessStream& stream);
679  };
680 
682  unsigned long RenderRMIId;
683  unsigned long BoundsRMIId;
685 
687 
688 private:
690  void operator=(const vtkParallelRenderManager&) = delete;
691 };
692 
693 #endif // vtkParalleRenderManager_h
vtkParallelRenderManager::RenderWindowInfo::ImageReductionFactor
double ImageReductionFactor
Definition: vtkParallelRenderManager.h:630
vtkParallelRenderManager::ObservingRenderWindow
int ObservingRenderWindow
Definition: vtkParallelRenderManager.h:490
vtkParallelRenderManager::CollectWindowInformation
virtual void CollectWindowInformation(vtkMultiProcessStream &)
Subclass should override these methods (instead of SendWindowInformation/ReceiveWindowInformation or ...
Definition: vtkParallelRenderManager.h:557
vtkParallelRenderManager::UseCompositing
int UseCompositing
Definition: vtkParallelRenderManager.h:524
vtkParallelRenderManager::UseBackBuffer
int UseBackBuffer
Definition: vtkParallelRenderManager.h:684
vtkParallelRenderManager::RendererInfo::NumberOfLights
int NumberOfLights
Definition: vtkParallelRenderManager.h:645
vtkParallelRenderManager::RenderWindow
vtkRenderWindow * RenderWindow
Definition: vtkParallelRenderManager.h:471
vtkParallelRenderManager::RenderWindowInfo::DesiredUpdateRate
double DesiredUpdateRate
Definition: vtkParallelRenderManager.h:631
vtkParallelRenderManager::RenderWindowInfo::NumberOfRenderers
int NumberOfRenderers
Definition: vtkParallelRenderManager.h:627
vtkParallelRenderManager
An object to control parallel rendering.
Definition: vtkParallelRenderManager.h:65
vtkParallelRenderManager::AverageTimePerPixel
double AverageTimePerPixel
Used by SetImageReductionFactorForUpdateRate to smooth transitions transitions between image reductio...
Definition: vtkParallelRenderManager.h:536
vtkParallelRenderManager::ResetCameraClippingRangeTag
unsigned long ResetCameraClippingRangeTag
Definition: vtkParallelRenderManager.h:496
vtkX3D::data
@ data
Definition: vtkX3D.h:321
vtkMultiProcessStream
stream used to pass data across processes using vtkMultiProcessController.
Definition: vtkMultiProcessStream.h:37
vtkParallelRenderManager::RenderEventPropagation
int RenderEventPropagation
Definition: vtkParallelRenderManager.h:523
vtkUnsignedCharArray
dynamic, self-adjusting array of unsigned char
Definition: vtkUnsignedCharArray.h:35
vtkObject
abstract base class for most VTK objects
Definition: vtkObject.h:62
vtkParallelRenderManager::ParallelRendering
int ParallelRendering
Definition: vtkParallelRenderManager.h:522
vtkParallelRenderManager::CheckForAbortRender
virtual void CheckForAbortRender()
Definition: vtkParallelRenderManager.h:423
vtkParallelRenderManager::Tags
Tags
Definition: vtkParallelRenderManager.h:412
vtkParallelRenderManager::MagnifyImageMethod
int MagnifyImageMethod
Definition: vtkParallelRenderManager.h:505
vtkParallelRenderManager::ImageReductionFactor
double ImageReductionFactor
Definition: vtkParallelRenderManager.h:499
vtkParallelRenderManager::MagnifyImages
int MagnifyImages
Definition: vtkParallelRenderManager.h:504
vtkParallelRenderManager::FullImageUpToDate
int FullImageUpToDate
Definition: vtkParallelRenderManager.h:515
vtkRendererCollection
an ordered list of renderers
Definition: vtkRendererCollection.h:34
vtkParallelRenderManager::SendWindowInformation
virtual void SendWindowInformation()
Used to synchronize rendering information per frame.
Definition: vtkParallelRenderManager.h:544
vtkParallelRenderManager::ResetCameraTag
unsigned long ResetCameraTag
Definition: vtkParallelRenderManager.h:495
vtkParallelRenderManager::LightInfo::LightInfo
LightInfo()
Definition: vtkParallelRenderManager.h:674
vtkParallelRenderManager::AutoImageReductionFactor
int AutoImageReductionFactor
Definition: vtkParallelRenderManager.h:501
vtkParallelRenderManager::DefaultRenderEventPropagation
static bool DefaultRenderEventPropagation
Definition: vtkParallelRenderManager.h:686
vtkParallelRenderManager::StartRenderTag
unsigned long StartRenderTag
Definition: vtkParallelRenderManager.h:493
vtkParallelRenderManager::EndRenderTag
unsigned long EndRenderTag
Definition: vtkParallelRenderManager.h:494
vtkParallelRenderManager::ProcessWindowInformation
virtual bool ProcessWindowInformation(vtkMultiProcessStream &)
Definition: vtkParallelRenderManager.h:558
vtkParallelRenderManager::ImageProcessingTime
double ImageProcessingTime
Definition: vtkParallelRenderManager.h:530
vtkParallelRenderManager::ForceRenderWindowSize
int ForceRenderWindowSize
Definition: vtkParallelRenderManager.h:477
vtkParallelRenderManager::AddedRMIs
int AddedRMIs
Definition: vtkParallelRenderManager.h:681
vtkParallelRenderManager::GetDefaultRenderEventPropagation
static bool GetDefaultRenderEventPropagation()
Definition: vtkParallelRenderManager.h:201
vtkX3D::Background
@ Background
Definition: vtkX3D.h:77
vtkParallelRenderManager::SynchronizeTileProperties
int SynchronizeTileProperties
Definition: vtkParallelRenderManager.h:508
vtkParallelRenderManager::ImageReduceRenderer
virtual int ImageReduceRenderer(vtkRenderer *)
Returns true if the image for the given renderer should be rendered at a reduced size to be magnified...
Definition: vtkParallelRenderManager.h:621
vtkMultiProcessController
Multiprocessing communication superclass.
Definition: vtkMultiProcessController.h:75
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:33
vtkParallelRenderManager::Controller
vtkMultiProcessController * Controller
Definition: vtkParallelRenderManager.h:472
vtkParallelRenderManager::RendererInfo::GradientBackground
bool GradientBackground
Definition: vtkParallelRenderManager.h:655
vtkParallelRenderManager::RenderWindowImageUpToDate
int RenderWindowImageUpToDate
Definition: vtkParallelRenderManager.h:517
vtkParallelRenderManager::AbortRenderCheckTag
unsigned long AbortRenderCheckTag
Definition: vtkParallelRenderManager.h:497
vtkParallelRenderManager::CollectRendererInformation
virtual void CollectRendererInformation(vtkRenderer *, vtkMultiProcessStream &)
Definition: vtkParallelRenderManager.h:559
vtkParallelRenderManager::LightInfo
Definition: vtkParallelRenderManager.h:667
vtkParallelRenderManager::RendererInfo::CameraViewAngle
double CameraViewAngle
Definition: vtkParallelRenderManager.h:652
vtkParallelRenderManager::BoundsRMIId
unsigned long BoundsRMIId
Definition: vtkParallelRenderManager.h:683
vtkObject::PrintSelf
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkParallelRenderManager::RendererInfo
Definition: vtkParallelRenderManager.h:642
vtkParallelRenderManager::RootProcessId
int RootProcessId
The "root" node's process id.
Definition: vtkParallelRenderManager.h:488
vtkParallelRenderManager::RenderRMIId
unsigned long RenderRMIId
Definition: vtkParallelRenderManager.h:682
vtkObject.h
vtkParallelRenderManager::RendererInfo::RendererInfo
RendererInfo()
Definition: vtkParallelRenderManager.h:660
vtkParallelRenderManager::NEAREST
@ NEAREST
Definition: vtkParallelRenderManager.h:311
vtkParallelRenderManager::Timer
vtkTimerLog * Timer
Definition: vtkParallelRenderManager.h:527
vtkParallelRenderManager::RenderWindowInfo
Definition: vtkParallelRenderManager.h:623
vtkTimerLog
Timer support and logging.
Definition: vtkTimerLog.h:90
vtkParallelRenderManager::CheckForAbortComposite
virtual int CheckForAbortComposite()
Definition: vtkParallelRenderManager.h:424
vtkParallelRenderManager::ReducedImage
vtkUnsignedCharArray * ReducedImage
Definition: vtkParallelRenderManager.h:513
vtkParallelRenderManager::MaxImageReductionFactor
double MaxImageReductionFactor
Definition: vtkParallelRenderManager.h:500
vtkParallelRenderManager::ReceiveWindowInformation
virtual void ReceiveWindowInformation()
Definition: vtkParallelRenderManager.h:545
vtkParallelRenderManager::RendererInfo::ParallelScale
double ParallelScale
Definition: vtkParallelRenderManager.h:657
vtkParallelRenderManager::ReceiveRendererInformation
virtual void ReceiveRendererInformation(vtkRenderer *)
Definition: vtkParallelRenderManager.h:547
vtkParallelRenderManager::SendRendererInformation
virtual void SendRendererInformation(vtkRenderer *)
Definition: vtkParallelRenderManager.h:546
vtkParallelRenderManager::Renderers
vtkRendererCollection * Renderers
Definition: vtkParallelRenderManager.h:473
vtkParallelRenderManager::SyncRenderWindowRenderers
int SyncRenderWindowRenderers
Definition: vtkParallelRenderManager.h:525
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:67
vtkParallelRenderManager::Lock
int Lock
Definition: vtkParallelRenderManager.h:521
vtkParallelRenderManager::RendererInfo::Draw
int Draw
Definition: vtkParallelRenderManager.h:644
vtkParallelRenderManager::RenderWindowInfo::UseCompositing
int UseCompositing
Definition: vtkParallelRenderManager.h:628
vtkParallelRenderManager::SetMagnifyImageMethodToLinear
void SetMagnifyImageMethodToLinear()
Definition: vtkParallelRenderManager.h:324
vtkParallelRenderManager::WriteBackImages
int WriteBackImages
Definition: vtkParallelRenderManager.h:503
vtkParallelRenderManager::RenderWindowInfo::RenderWindowInfo
RenderWindowInfo()
Definition: vtkParallelRenderManager.h:635
vtkDoubleArray
dynamic, self-adjusting array of double
Definition: vtkDoubleArray.h:35
vtkParallelRenderManager::Viewports
vtkDoubleArray * Viewports
Definition: vtkParallelRenderManager.h:519
vtkParallelRenderManager::UseRGBA
int UseRGBA
Definition: vtkParallelRenderManager.h:507
vtkParallelRenderManager::SetDefaultRenderEventPropagation
static void SetDefaultRenderEventPropagation(bool val)
Get/Set the default value used for RenderEventPropagation when a new instance of vtkParallelRenderMan...
Definition: vtkParallelRenderManager.h:197
vtkRenderWindow
create a window for renderers to draw into
Definition: vtkRenderWindow.h:93
vtkParallelRenderManager::ProcessRendererInformation
virtual bool ProcessRendererInformation(vtkRenderer *, vtkMultiProcessStream &)
Definition: vtkParallelRenderManager.h:560
vtkParallelRenderManager::SetMagnifyImageMethodToNearest
void SetMagnifyImageMethodToNearest()
Definition: vtkParallelRenderManager.h:323
vtkParallelRenderManager::LightInfo::Type
double Type
Definition: vtkParallelRenderManager.h:671
vtkParallelRenderManager::RenderTime
double RenderTime
Definition: vtkParallelRenderManager.h:529
vtkParallelRenderManager::FullImage
vtkUnsignedCharArray * FullImage
Definition: vtkParallelRenderManager.h:512
vtkParallelRenderManager::ObservingAbort
int ObservingAbort
Definition: vtkParallelRenderManager.h:491
vtkParallelRenderManager::ReducedImageUpToDate
int ReducedImageUpToDate
Definition: vtkParallelRenderManager.h:516