VTK  9.1.0
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=========================================================================*/
44#ifndef vtkParallelRenderManager_h
45#define vtkParallelRenderManager_h
46
47#include "vtkObject.h"
48#include "vtkRenderingParallelModule.h" // For export macro
49
50class vtkDoubleArray;
53class vtkRenderer;
55class vtkRenderWindow;
56class vtkTimerLog;
58
59class VTKRENDERINGPARALLEL_EXPORT vtkParallelRenderManager : public vtkObject
60{
61public:
63 void PrintSelf(ostream& os, vtkIndent indent) override;
64
73
81
83
87 vtkGetObjectMacro(RenderWindow, vtkRenderWindow);
88 virtual void SetRenderWindow(vtkRenderWindow* renWin);
90
92
96 vtkGetObjectMacro(Controller, vtkMultiProcessController);
97 virtual void SetController(vtkMultiProcessController* controller);
99
104 virtual void InitializePieces();
105
113 virtual void InitializeOffScreen();
114
121 virtual void StartInteractor();
122
127 virtual void StartServices();
128
132 virtual void StopServices();
133
135
138 virtual void StartRender();
139 virtual void EndRender();
140 virtual void SatelliteStartRender();
141 virtual void SatelliteEndRender();
142 virtual void RenderRMI();
143 virtual void ResetCamera(vtkRenderer* ren);
145 virtual void ComputeVisiblePropBoundsRMI(int renderId);
147
148 virtual void InitializeRMIs();
149
155 virtual void ResetAllCameras();
156
160 virtual void ComputeVisiblePropBounds(vtkRenderer* ren, double bounds[6]);
161
163
169 vtkSetMacro(ParallelRendering, int);
170 vtkGetMacro(ParallelRendering, int);
171 vtkBooleanMacro(ParallelRendering, int);
173
175
181 vtkSetMacro(RenderEventPropagation, int);
182 vtkGetMacro(RenderEventPropagation, int);
183 vtkBooleanMacro(RenderEventPropagation, int);
185
192 {
194 }
196 {
198 }
199
201
206 vtkSetMacro(UseCompositing, int);
207 vtkGetMacro(UseCompositing, int);
208 vtkBooleanMacro(UseCompositing, int);
210
212
225 virtual void SetImageReductionFactor(double factor);
226 vtkGetMacro(ImageReductionFactor, double);
228
229 vtkSetMacro(MaxImageReductionFactor, double);
230 vtkGetMacro(MaxImageReductionFactor, double);
231
238 virtual void SetImageReductionFactorForUpdateRate(double DesiredUpdateRate);
239
241
246 vtkSetMacro(AutoImageReductionFactor, int);
247 vtkGetMacro(AutoImageReductionFactor, int);
248 vtkBooleanMacro(AutoImageReductionFactor, int);
250
252
255 vtkGetMacro(RenderTime, double);
256 vtkGetMacro(ImageProcessingTime, double);
258
260
269 vtkGetMacro(SyncRenderWindowRenderers, int);
270 vtkSetMacro(SyncRenderWindowRenderers, int);
271 vtkBooleanMacro(SyncRenderWindowRenderers, int);
272 virtual void AddRenderer(vtkRenderer*);
274 virtual void RemoveAllRenderers();
276
278
287 vtkSetMacro(WriteBackImages, int);
288 vtkGetMacro(WriteBackImages, int);
289 vtkBooleanMacro(WriteBackImages, int);
291
293
298 vtkSetMacro(MagnifyImages, int);
299 vtkGetMacro(MagnifyImages, int);
300 vtkBooleanMacro(MagnifyImages, int);
302
303 enum
304 {
306 LINEAR
307 };
308
310
315 virtual void SetMagnifyImageMethod(int method);
316 vtkGetMacro(MagnifyImageMethod, int);
317 void SetMagnifyImageMethodToNearest() { this->SetMagnifyImageMethod(NEAREST); }
318 void SetMagnifyImageMethodToLinear() { this->SetMagnifyImageMethod(LINEAR); }
320
322
325 virtual void MagnifyImage(vtkUnsignedCharArray* fullImage, const int fullImageSize[2],
326 vtkUnsignedCharArray* reducedImage, const int reducedImageSize[2],
327 const int fullImageViewport[4] = nullptr, const int reducedImageViewport[4] = nullptr);
328 static void MagnifyImageNearest(vtkUnsignedCharArray* fullImage, const int fullImageSize[2],
329 vtkUnsignedCharArray* reducedImage, const int reducedImageSize[2],
330 const int fullImageViewport[4] = nullptr, const int reducedImageViewport[4] = nullptr);
331 static void MagnifyImageLinear(vtkUnsignedCharArray* fullImage, const int fullImageSize[2],
332 vtkUnsignedCharArray* reducedImage, const int reducedImageSize[2],
333 const int fullImageViewport[4] = nullptr, const int reducedImageViewport[4] = nullptr);
335
337
345 virtual void GetPixelData(int x1, int y1, int x2, int y2, vtkUnsignedCharArray* data);
347
349
357 virtual void GetReducedPixelData(int x1, int y1, int x2, int y2, vtkUnsignedCharArray* data);
359
361
364 vtkGetVector2Macro(FullImageSize, int);
367
370 vtkGetVector2Macro(ReducedImageSize, int);
372
377 void TileWindows(int xsize, int ysize, int nColumns);
378
380
384 vtkSetMacro(UseRGBA, int);
385 vtkGetMacro(UseRGBA, int);
387
389
393 vtkSetMacro(ForceRenderWindowSize, int);
394 vtkGetMacro(ForceRenderWindowSize, int);
396
398
402 vtkSetVector2Macro(ForcedRenderWindowSize, int);
403 vtkGetVector2Macro(ForcedRenderWindowSize, int);
405
406 enum Tags
407 {
408 RENDER_RMI_TAG = 34532,
409 COMPUTE_VISIBLE_PROP_BOUNDS_RMI_TAG = 54636,
410 WIN_INFO_TAG = 87834,
411 REN_INFO_TAG = 87836,
412 LIGHT_INFO_TAG = 87838,
413 REN_ID_TAG = 58794,
414 BOUNDS_TAG = 23543
415 };
416
417 virtual void CheckForAbortRender() {}
418 virtual int CheckForAbortComposite() { return 0; }
419
421
427 vtkSetMacro(UseBackBuffer, int);
428 vtkGetMacro(UseBackBuffer, int);
429 vtkBooleanMacro(UseBackBuffer, int);
431
433
438 vtkSetMacro(SynchronizeTileProperties, int);
439 vtkGetMacro(SynchronizeTileProperties, int);
440 vtkBooleanMacro(SynchronizeTileProperties, int);
442
444
452
453protected:
456
458
464
468
470
472 int ForcedRenderWindowSize[2];
473
483
486
487 unsigned long StartRenderTag;
488 unsigned long EndRenderTag;
489 unsigned long ResetCameraTag;
491 unsigned long AbortRenderCheckTag;
492
496
500
503 int FullImageSize[2];
504 int ReducedImageSize[2];
505
508
512
514
515 int Lock;
520
522
525
531
538 virtual void SendWindowInformation() {}
539 virtual void ReceiveWindowInformation() {}
542
552 virtual bool ProcessWindowInformation(vtkMultiProcessStream&) { return true; }
555
557
561 virtual void PreRenderProcessing() = 0;
562 virtual void PostRenderProcessing() = 0;
564
569 virtual void SetRenderWindowSize();
570
576 virtual void LocalComputeVisiblePropBounds(vtkRenderer* ren, double bounds[6]);
577
581 virtual void MagnifyReducedImage();
582
586 virtual void WriteFullImage();
587
591 virtual void ReadReducedImage();
592
598
602 virtual int ChooseBuffer();
603
607 virtual void SetRenderWindowPixelData(vtkUnsignedCharArray* pixels, const int pixelDimensions[2]);
608
615 virtual int ImageReduceRenderer(vtkRenderer*) { return 1; }
616
618 {
619 int FullSize[2];
620 int ReducedSize[2];
623 int TileScale[2];
626 double TileViewport[4];
627
628 // Initialize members
629 RenderWindowInfo() = default;
630
631 // Save/restore the struct to/from a stream.
634 };
635
637 {
638 int Draw = 0;
639 int NumberOfLights = 0;
640 double Viewport[4] = { 0., 0., 0., 0. };
641 double CameraPosition[3] = { 0., 0., 0. };
642 double CameraFocalPoint[3] = { 0., 0., 0. };
643 double CameraViewUp[3] = { 0., 0., 0. };
644 double WindowCenter[2] = { 0., 0. };
645 double CameraClippingRange[2] = { 0., 0. };
646 double CameraViewAngle = 0.;
647 double Background[3] = { 0., 0., 0. };
648 double Background2[3] = { 0., 0., 0. };
649 bool GradientBackground = false;
650
651 double ParallelScale = 0.;
652
653 // Initialize members
654 RendererInfo() = default;
655
656 // Save/restore the struct to/from a stream.
659 };
660
662 {
663 double Position[3];
664 double FocalPoint[3];
665 double Type;
666
667 // Initialize members
668 LightInfo() = default;
669
670 // Save/restore the struct to/from a stream.
673 };
674
676 unsigned long RenderRMIId;
677 unsigned long BoundsRMIId;
679
681
682private:
684 void operator=(const vtkParallelRenderManager&) = delete;
685};
686
687#endif // vtkParalleRenderManager_h
dynamic, self-adjusting array of double
a simple class to control print indentation
Definition: vtkIndent.h:113
Multiprocessing communication superclass.
stream used to pass data across processes using vtkMultiProcessController.
abstract base class for most VTK objects
Definition: vtkObject.h:73
An object to control parallel rendering.
static void MagnifyImageNearest(vtkUnsignedCharArray *fullImage, const int fullImageSize[2], vtkUnsignedCharArray *reducedImage, const int reducedImageSize[2], const int fullImageViewport[4]=nullptr, const int reducedImageViewport[4]=nullptr)
Convenience functions for magnifying images.
virtual vtkRenderer * MakeRenderer()
Builds a vtkRenderer compatible with this render manager.
void RemoveRenderWindowEventHandlers()
Add/Remove event handlers for the render window.
virtual void PreRenderProcessing()=0
Here is a good place to handle processing of data before and after render.
virtual void EndRender()
Callbacks that initialize and finish rendering and other tasks.
virtual int ImageReduceRenderer(vtkRenderer *)
Returns true if the image for the given renderer should be rendered at a reduced size to be magnified...
virtual void ComputeVisiblePropBoundsRMI(int renderId)
Callbacks that initialize and finish rendering and other tasks.
virtual void ResetCameraClippingRange(vtkRenderer *ren)
Callbacks that initialize and finish rendering and other tasks.
virtual void SendRendererInformation(vtkRenderer *)
virtual void InitializeOffScreen()
Make all rendering windows not viewable set as off screen rendering.
virtual void MagnifyReducedImage()
When called, fills FullImage.
virtual void SendWindowInformation()
Used to synchronize rendering information per frame.
virtual bool ProcessWindowInformation(vtkMultiProcessStream &)
virtual bool ProcessRendererInformation(vtkRenderer *, vtkMultiProcessStream &)
void SetMagnifyImageMethodToLinear()
Sets the method used to magnify images.
virtual void GetPixelData(vtkUnsignedCharArray *data)
The most appropriate way to retrieve full size image data after a render.
virtual vtkRenderWindow * MakeRenderWindow()
Builds a vtkRenderWindow compatible with this render manager.
virtual int LastRenderInFrontBuffer()
Returns 1 if the RenderWindow's last image is in the front buffer, 0 if it is in the back.
virtual void RenderRMI()
Callbacks that initialize and finish rendering and other tasks.
virtual void SetImageReductionFactor(double factor)
Set/Get the reduction factor (for sort-last based parallel renderers).
virtual void GetReducedPixelData(int x1, int y1, int x2, int y2, vtkUnsignedCharArray *data)
The most appropriate way to retrieve reduced size image data after a render.
virtual void PostRenderProcessing()=0
Here is a good place to handle processing of data before and after render.
virtual void InitializePieces()
This method sets the piece and number of pieces for each actor with a polydata mapper.
virtual void SetRenderWindowPixelData(vtkUnsignedCharArray *pixels, const int pixelDimensions[2])
Sets the current render window's pixel data.
static void MagnifyImageLinear(vtkUnsignedCharArray *fullImage, const int fullImageSize[2], vtkUnsignedCharArray *reducedImage, const int reducedImageSize[2], const int fullImageViewport[4]=nullptr, const int reducedImageViewport[4]=nullptr)
Convenience functions for magnifying images.
virtual void ReceiveRendererInformation(vtkRenderer *)
virtual void WriteFullImage()
Write the full image back to the RenderWindow.
virtual void GetPixelData(int x1, int y1, int x2, int y2, vtkUnsignedCharArray *data)
The most appropriate way to retrieve full size image data after a render.
virtual void GenericEndRenderCallback()
INTERNAL METHODS (DON NOT USE).
virtual void ReadReducedImage()
Reads in the reduced image from the RenderWindow.
vtkRendererCollection * Renderers
virtual void CollectWindowInformation(vtkMultiProcessStream &)
Subclass should override these methods (instead of SendWindowInformation/ReceiveWindowInformation or ...
static void SetDefaultRenderEventPropagation(bool val)
Get/Set the default value used for RenderEventPropagation when a new instance of vtkParallelRenderMan...
virtual void InitializeRMIs()
virtual void AddRenderer(vtkRenderer *)
By default, the state of all renderers in the root's render window is propagated to the rest of the p...
virtual void RemoveAllRenderers()
By default, the state of all renderers in the root's render window is propagated to the rest of the p...
vtkUnsignedCharArray * ReducedImage
void TileWindows(int xsize, int ysize, int nColumns)
Given the x and y size of the render windows, reposition them in a tile of n columns.
double AverageTimePerPixel
Used by SetImageReductionFactorForUpdateRate to smooth transitions transitions between image reductio...
virtual void GetReducedPixelData(vtkUnsignedCharArray *data)
The most appropriate way to retrieve reduced size image data after a render.
virtual void ResetAllCameras()
Resets the camera of each renderer contained in the RenderWindow.
virtual void MagnifyImage(vtkUnsignedCharArray *fullImage, const int fullImageSize[2], vtkUnsignedCharArray *reducedImage, const int reducedImageSize[2], const int fullImageViewport[4]=nullptr, const int reducedImageViewport[4]=nullptr)
Convenience functions for magnifying images.
virtual void SetRenderWindowSize()
Called in satellites to set the render window size to the current FullImageSize and ReducedImageSize ...
int RootProcessId
The "root" node's process id.
virtual void SetImageReductionFactorForUpdateRate(double DesiredUpdateRate)
Sets the ReductionFactor based on the given desired update rate and the rendering metrics taken from ...
virtual void SetRenderWindow(vtkRenderWindow *renWin)
Set/Get the RenderWindow to use for compositing.
vtkMultiProcessController * Controller
virtual void CollectRendererInformation(vtkRenderer *, vtkMultiProcessStream &)
virtual void SatelliteStartRender()
Callbacks that initialize and finish rendering and other tasks.
virtual void GenericStartRenderCallback()
INTERNAL METHODS (DON NOT USE).
void AddRenderWindowEventHandlers()
Add/Remove event handlers for the render window.
vtkUnsignedCharArray * FullImage
virtual void SetMagnifyImageMethod(int method)
Sets the method used to magnify images.
virtual void StartServices()
If on node other than root, starts serving RMI requests for parallel renders.
virtual void StartInteractor()
Initializes the RMIs and then, if on root node, starts the interactor on the attached render window.
virtual void SatelliteEndRender()
Callbacks that initialize and finish rendering and other tasks.
virtual void ComputeVisiblePropBounds(vtkRenderer *ren, double bounds[6])
Calculates the bounds by gathering information from all processes.
~vtkParallelRenderManager() override
virtual void SetController(vtkMultiProcessController *controller)
Set/Get the vtkMultiProcessController which will handle communications for the parallel rendering.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
virtual void StopServices()
If on root node, stops the RMI processing on all service nodes.
virtual void LocalComputeVisiblePropBounds(vtkRenderer *ren, double bounds[6])
Called by ComputeVisiblePropBoundsRMI to get the bounds of a local renderer.
virtual vtkRendererCollection * GetRenderers()
void SetMagnifyImageMethodToNearest()
Sets the method used to magnify images.
virtual void StartRender()
Callbacks that initialize and finish rendering and other tasks.
virtual void RemoveRenderer(vtkRenderer *)
By default, the state of all renderers in the root's render window is propagated to the rest of the p...
virtual int ChooseBuffer()
Select buffer to read from / render into.
virtual void ResetCamera(vtkRenderer *ren)
Callbacks that initialize and finish rendering and other tasks.
create a window for renderers to draw into
an ordered list of renderers
abstract specification for renderers
Definition: vtkRenderer.h:173
Timer support and logging.
Definition: vtkTimerLog.h:199
dynamic, self-adjusting array of unsigned char
@ Background
Definition: vtkX3D.h:77
@ data
Definition: vtkX3D.h:321
void Save(vtkMultiProcessStream &stream)
bool Restore(vtkMultiProcessStream &stream)
bool Restore(vtkMultiProcessStream &stream)
void Save(vtkMultiProcessStream &stream)
void Save(vtkMultiProcessStream &stream)
bool Restore(vtkMultiProcessStream &stream)