VTK  9.7.1
vtkGPUVolumeRayCastMapper.h
Go to the documentation of this file.
1 // SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2 // SPDX-License-Identifier: BSD-3-Clause
24 #ifndef vtkGPUVolumeRayCastMapper_h
25 #define vtkGPUVolumeRayCastMapper_h
26 #include <unordered_map> // For std::unordered_map
27 #include <vector> // For std::vector
28 
29 #include "vtkRenderingVolumeModule.h" // For export macro
30 #include "vtkVolumeMapper.h"
31 #include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
32 
33 VTK_ABI_NAMESPACE_BEGIN
34 class vtkContourValues;
35 class vtkRenderWindow;
36 class vtkVolumeProperty;
37 
38 class VTKRENDERINGVOLUME_EXPORT VTK_MARSHALAUTO vtkGPUVolumeRayCastMapper : public vtkVolumeMapper
39 {
40 public:
43  void PrintSelf(ostream& os, vtkIndent indent) override;
44 
46 
52  vtkSetClampMacro(AutoAdjustSampleDistances, vtkTypeBool, 0, 1);
53  vtkGetMacro(AutoAdjustSampleDistances, vtkTypeBool);
54  vtkBooleanMacro(AutoAdjustSampleDistances, vtkTypeBool);
56 
57  std::vector<int> GetPorts() { return this->Ports; }
58  void SetPorts(std::vector<int> ports) { this->Ports = ports; }
59 
61 
66  vtkSetClampMacro(LockSampleDistanceToInputSpacing, vtkTypeBool, 0, 1);
67  vtkGetMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
68  vtkBooleanMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
70 
72 
77  vtkSetClampMacro(UseJittering, vtkTypeBool, 0, 1);
78  vtkGetMacro(UseJittering, vtkTypeBool);
79  vtkBooleanMacro(UseJittering, vtkTypeBool);
81 
83 
91  vtkSetClampMacro(UseDepthPass, vtkTypeBool, 0, 1);
92  vtkGetMacro(UseDepthPass, vtkTypeBool);
93  vtkBooleanMacro(UseDepthPass, vtkTypeBool);
95 
101  vtkContourValues* GetDepthPassContourValues();
102  void SetDepthPassContourValues(vtkContourValues*);
103 
105 
111  vtkSetMacro(SampleDistance, float);
112  vtkGetMacro(SampleDistance, float);
114 
116 
123  vtkSetClampMacro(ImageSampleDistance, float, 0.1f, 100.0f);
124  vtkGetMacro(ImageSampleDistance, float);
126 
128 
132  vtkSetClampMacro(MinimumImageSampleDistance, float, 0.1f, 100.0f);
133  vtkGetMacro(MinimumImageSampleDistance, float);
135 
137 
141  vtkSetClampMacro(MaximumImageSampleDistance, float, 0.1f, 100.0f);
142  vtkGetMacro(MaximumImageSampleDistance, float);
144 
146 
159  vtkSetMacro(FinalColorWindow, float);
160  vtkGetMacro(FinalColorWindow, float);
161  vtkSetMacro(FinalColorLevel, float);
162  vtkGetMacro(FinalColorLevel, float);
164 
166 
171  vtkSetMacro(MaxMemoryInBytes, vtkIdType);
172  vtkGetMacro(MaxMemoryInBytes, vtkIdType);
174 
176 
181  vtkSetClampMacro(MaxMemoryFraction, float, 0.1f, 1.0f);
182  vtkGetMacro(MaxMemoryFraction, float);
184 
186 
194  vtkSetMacro(ReportProgress, bool);
195  vtkGetMacro(ReportProgress, bool);
197 
204  virtual int IsRenderSupported(
205  vtkRenderWindow* vtkNotUsed(window), vtkVolumeProperty* vtkNotUsed(property))
206  {
207  return 0;
208  }
209 
210  void CreateCanonicalView(vtkRenderer* ren, vtkVolume* volume, vtkImageData* image, int blend_mode,
211  double viewDirection[3], double viewUp[3]);
212 
214 
234  void SetMaskInput(vtkImageData* mask);
235  vtkGetObjectMacro(MaskInput, vtkImageData);
237 
238  enum
239  {
240  BinaryMaskType = 0,
241  LabelMapMaskType
242  };
243 
245 
249  vtkSetMacro(MaskType, int);
250  vtkGetMacro(MaskType, int);
251  void SetMaskTypeToBinary();
252  void SetMaskTypeToLabelMap();
254 
256 
264  vtkSetClampMacro(MaskBlendFactor, float, 0.0f, 1.0f);
265  vtkGetMacro(MaskBlendFactor, float);
267 
269 
276  vtkSetClampMacro(GlobalIlluminationReach, float, 0.0f, 1.0f);
277  vtkGetMacro(GlobalIlluminationReach, float);
279 
281 
292  vtkSetClampMacro(VolumetricScatteringBlending, float, 0.0f, 2.0f);
293  vtkGetMacro(VolumetricScatteringBlending, float);
295 
297 
311  vtkSetMacro(RenderToImage, vtkTypeBool);
312  vtkGetMacro(RenderToImage, vtkTypeBool);
313  vtkBooleanMacro(RenderToImage, vtkTypeBool);
315 
317 
322  vtkSetMacro(DepthImageScalarType, int);
323  vtkGetMacro(DepthImageScalarType, int);
324  void SetDepthImageScalarTypeToUnsignedChar();
325  void SetDepthImageScalarTypeToUnsignedShort();
326  void SetDepthImageScalarTypeToFloat();
328 
330 
341  vtkSetMacro(ClampDepthToBackface, vtkTypeBool);
342  vtkGetMacro(ClampDepthToBackface, vtkTypeBool);
343  vtkBooleanMacro(ClampDepthToBackface, vtkTypeBool);
345 
352  virtual void GetDepthImage(vtkImageData*) {}
353 
360  virtual void GetColorImage(vtkImageData*) {}
361 
366  void Render(vtkRenderer*, vtkVolume*) override;
367 
372  virtual void GPURender(vtkRenderer*, vtkVolume*) {}
373 
381 
394  virtual void GetReductionRatio(double ratio[3]) = 0;
395 
397  {
398  SCALAR = 0, // default
399  NATIVE
400  };
401 
403 
419  vtkSetMacro(ColorRangeType, int);
420  vtkGetMacro(ColorRangeType, int);
421  vtkSetMacro(ScalarOpacityRangeType, int);
422  vtkGetMacro(ScalarOpacityRangeType, int);
423  vtkSetMacro(GradientOpacityRangeType, int);
424  vtkGetMacro(GradientOpacityRangeType, int);
426 
427  vtkDataSet* GetInput() override { return this->GetInput(0); }
428 
430 
434  void RemoveInputConnection(int port, vtkAlgorithmOutput* input) override;
435  void RemoveInputConnection(int port, int idx) override;
436  void SetInputConnection(int port, vtkAlgorithmOutput* input) override;
438  {
439  this->SetInputConnection(0, input);
440  }
442 
446  int GetInputCount();
447 
448  vtkDataSet* GetTransformedInput(int port = 0);
449 
450  double* GetBoundsFromPort(int port) VTK_SIZEHINT(6);
451 
453 
456  vtkSetStringMacro(Transfer2DYAxisArray);
457  vtkGetStringMacro(Transfer2DYAxisArray);
459 
460 protected:
462  ~vtkGPUVolumeRayCastMapper() override;
463 
472  int FillInputPortInformation(int port, vtkInformation* info) override;
473 
485  void TransformInput(int port);
486 
488 
497  int ValidateRender(vtkRenderer*, vtkVolume*);
498  int ValidateInputs();
499  int ValidateInput(vtkVolumeProperty* property, int port);
501 
503 
507  void CloneInputs();
508  void CloneInput(vtkDataSet* input, int port);
510 
511  // Special version of render called during the creation
512  // of a canonical view.
513  void CanonicalViewRender(vtkRenderer*, vtkVolume*);
514 
515  // Methods called by the AMR Volume Mapper.
516  virtual void PreRender(vtkRenderer* ren, vtkVolume* vol, double datasetBounds[6],
517  double scalarRange[2], int numberOfScalarComponents, unsigned int numberOfLevels) = 0;
518 
519  // \pre input is up-to-date
520  virtual void RenderBlock(vtkRenderer* ren, vtkVolume* vol, unsigned int level) = 0;
521 
522  virtual void PostRender(vtkRenderer* ren, int numberOfScalarComponents) = 0;
523  vtkDataSet* GetInput(int port) override;
524 
530  void SetCellFlag(int cellFlag);
531  void RemovePortInternal(int port);
532 
538 
539  // Render to texture mode flag
541 
542  // Depth image scalar type
544 
545  // Clamp depth values to the depth of the face at which the ray
546  // exits the volume
548 
549  // Enable / disable stochastic jittering
551 
552  // Secondary rays ambient/global adjustment coefficient
553  float GlobalIlluminationReach = 0.0;
554 
555  float VolumetricScatteringBlending = 0.0;
556 
557  // Enable / disable two pass rendering
560 
561  // The distance between sample points along the ray
563 
567 
570 
571  // 1 if we are generating the canonical image, 0 otherwise
574 
576 
580  vtkSetClampMacro(AMRMode, vtkTypeBool, 0, 1);
581  vtkGetMacro(AMRMode, vtkTypeBool);
582  vtkBooleanMacro(AMRMode, vtkTypeBool);
584 
587  int MaskType;
588 
590 
591  // Transfer function range type
595 
596  // Point data or cell data (or field data, not handled) ?
597  int CellFlag;
598 
611  virtual void ClipCroppingRegionPlanes();
612 
613  using DataMap = std::unordered_map<int, vtkDataSet*>;
614  void SetTransformedInput(vtkDataSet*);
615  vtkDataSet* FindData(int port, DataMap& container);
616 
617  double ClippedCroppingRegionPlanes[6];
618 
621 
623  std::vector<int> Ports;
624  std::vector<int> RemovedPorts;
626 
632 
639 
640 private:
642  void operator=(const vtkGPUVolumeRayCastMapper&) = delete;
643 };
644 
645 VTK_ABI_NAMESPACE_END
646 #endif
virtual void GPURender(vtkRenderer *, vtkVolume *)
Handled in the subclass - the actual render method.
void ReleaseGraphicsResources(vtkWindow *) override
Release any graphics resources that are being consumed by this mapper.
helper object to manage setting and generating contour values
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:40
Abstract class for a volume mapper.
Store vtkAlgorithm input/output information.
abstract class to specify dataset behavior
Definition: vtkDataSet.h:56
virtual void GetDepthImage(vtkImageData *)
Low level API to export the depth texture as vtkImageData in RenderToImage mode.
virtual void GetColorImage(vtkImageData *)
Low level API to export the color texture as vtkImageData in RenderToImage mode.
abstract specification for renderers
Definition: vtkRenderer.h:63
int vtkIdType
Definition: vtkType.h:363
std::unordered_map< int, vtkDataSet * > DataMap
void Render(vtkRenderer *ren, vtkVolume *vol) override=0
WARNING: INTERNAL METHOD - NOT INTENDED FOR GENERAL USE DO NOT USE THIS METHOD OUTSIDE OF THE RENDERI...
Proxy object to connect input/output ports.
int vtkTypeBool
Definition: vtkABI.h:64
window superclass for vtkRenderWindow
Definition: vtkWindow.h:41
virtual vtkDataSet * GetInput()
Set/Get the input data.
a simple class to control print indentation
Definition: vtkIndent.h:28
void SetPorts(std::vector< int > ports)
int FillInputPortInformation(int, vtkInformation *) override
Fill the input port information objects for this algorithm.
topologically and geometrically regular array of data
Definition: vtkImageData.h:45
virtual void SetInputConnection(int port, vtkAlgorithmOutput *input)
Set the connection for the given input port index.
#define VTK_SIZEHINT(...)
represents the common properties for rendering a volume.
create a window for renderers to draw into
DataMap LastInputs
This is needed only to check if the input data has been changed since the last Render() call...
static vtkAlgorithm * New()
virtual int IsRenderSupported(vtkRenderWindow *window, vtkVolumeProperty *property)
Based on hardware and properties, we may or may not be able to render using 3D texture mapping...
#define VTK_MARSHALAUTO
char * Transfer2DYAxisArray
Define the array used for the Y axis of transfer 2D.
Ray casting performed on the GPU.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void SetInputConnection(vtkAlgorithmOutput *input) override
Add/Remove input connections.
vtkDataSet * GetInput() override
Set/Get the input data.
virtual void RemoveInputConnection(int port, vtkAlgorithmOutput *input)
Remove a connection from the given input port index.