VTK  9.1.0
vtkGPUVolumeRayCastMapper.h
Go to the documentation of this file.
1/*=========================================================================
2
3 Program: Visualization Toolkit
4 Module: vtkGPUVolumeRayCastMapper.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 This software is distributed WITHOUT ANY WARRANTY; without even
11 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12 PURPOSE. See the above copyright notice for more information.
13
14=========================================================================*/
30#ifndef vtkGPUVolumeRayCastMapper_h
31#define vtkGPUVolumeRayCastMapper_h
32#include <unordered_map> // For std::unordered_map
33#include <vector> // For std::vector
34
35#include "vtkRenderingVolumeModule.h" // For export macro
36#include "vtkVolumeMapper.h"
37
39class vtkRenderWindow;
41
42class VTKRENDERINGVOLUME_EXPORT vtkGPUVolumeRayCastMapper : public vtkVolumeMapper
43{
44public:
47 void PrintSelf(ostream& os, vtkIndent indent) override;
48
50
56 vtkSetClampMacro(AutoAdjustSampleDistances, vtkTypeBool, 0, 1);
57 vtkGetMacro(AutoAdjustSampleDistances, vtkTypeBool);
58 vtkBooleanMacro(AutoAdjustSampleDistances, vtkTypeBool);
60
62
67 vtkSetClampMacro(LockSampleDistanceToInputSpacing, vtkTypeBool, 0, 1);
68 vtkGetMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
69 vtkBooleanMacro(LockSampleDistanceToInputSpacing, vtkTypeBool);
71
73
78 vtkSetClampMacro(UseJittering, vtkTypeBool, 0, 1);
79 vtkGetMacro(UseJittering, vtkTypeBool);
80 vtkBooleanMacro(UseJittering, vtkTypeBool);
82
84
92 vtkSetClampMacro(UseDepthPass, vtkTypeBool, 0, 1);
93 vtkGetMacro(UseDepthPass, vtkTypeBool);
94 vtkBooleanMacro(UseDepthPass, vtkTypeBool);
96
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
235 vtkGetObjectMacro(MaskInput, vtkImageData);
237
238 enum
239 {
240 BinaryMaskType = 0,
241 LabelMapMaskType
242 };
243
245
249 vtkSetMacro(MaskType, int);
250 vtkGetMacro(MaskType, int);
254
256
264 vtkSetClampMacro(MaskBlendFactor, float, 0.0f, 1.0f);
265 vtkGetMacro(MaskBlendFactor, float);
267
269
283 vtkSetMacro(RenderToImage, vtkTypeBool);
284 vtkGetMacro(RenderToImage, vtkTypeBool);
285 vtkBooleanMacro(RenderToImage, vtkTypeBool);
287
289
294 vtkSetMacro(DepthImageScalarType, int);
295 vtkGetMacro(DepthImageScalarType, int);
300
302
313 vtkSetMacro(ClampDepthToBackface, vtkTypeBool);
314 vtkGetMacro(ClampDepthToBackface, vtkTypeBool);
315 vtkBooleanMacro(ClampDepthToBackface, vtkTypeBool);
317
324 virtual void GetDepthImage(vtkImageData*) {}
325
332 virtual void GetColorImage(vtkImageData*) {}
333
338 void Render(vtkRenderer*, vtkVolume*) override;
339
344 virtual void GPURender(vtkRenderer*, vtkVolume*) {}
345
353
366 virtual void GetReductionRatio(double ratio[3]) = 0;
367
369 {
370 SCALAR = 0, // default
371 NATIVE
372 };
373
375
391 vtkSetMacro(ColorRangeType, int);
392 vtkGetMacro(ColorRangeType, int);
393 vtkSetMacro(ScalarOpacityRangeType, int);
394 vtkGetMacro(ScalarOpacityRangeType, int);
395 vtkSetMacro(GradientOpacityRangeType, int);
396 vtkGetMacro(GradientOpacityRangeType, int);
398
399 vtkDataSet* GetInput() override { return this->GetInput(0); };
400
402
407 void RemoveInputConnection(int port, int idx) override;
408 void SetInputConnection(int port, vtkAlgorithmOutput* input) override;
410 {
411 this->SetInputConnection(0, input);
412 }
414
419
421
422 double* GetBoundsFromPort(const int port) VTK_SIZEHINT(6);
423
425
428 vtkSetStringMacro(Transfer2DYAxisArray);
429 vtkGetStringMacro(Transfer2DYAxisArray);
431
432protected:
435
445
457 void TransformInput(const int port);
458
460
471 int ValidateInput(vtkVolumeProperty* property, const int port);
473
475
480 void CloneInput(vtkDataSet* input, const int port);
482
483 // Special version of render called during the creation
484 // of a canonical view.
486
487 // Methods called by the AMR Volume Mapper.
488 virtual void PreRender(vtkRenderer* ren, vtkVolume* vol, double datasetBounds[6],
489 double scalarRange[2], int numberOfScalarComponents, unsigned int numberOfLevels) = 0;
490
491 // \pre input is up-to-date
492 virtual void RenderBlock(vtkRenderer* ren, vtkVolume* vol, unsigned int level) = 0;
493
494 virtual void PostRender(vtkRenderer* ren, int numberOfScalarComponents) = 0;
495 vtkDataSet* GetInput(const int port) override;
496
502 void SetCellFlag(int cellFlag);
503 void RemovePortInternal(const int port);
504
510
511 // Render to texture mode flag
513
514 // Depth image scalar type
516
517 // Clamp depth values to the depth of the face at which the ray
518 // exits the volume
520
521 // Enable / disable stochastic jittering
523
524 // Enable / disable two pass rendering
527
528 // The distance between sample points along the ray
530
534
537
538 // 1 if we are generating the canonical image, 0 otherwise
541
543
547 vtkSetClampMacro(AMRMode, vtkTypeBool, 0, 1);
548 vtkGetMacro(AMRMode, vtkTypeBool);
549 vtkBooleanMacro(AMRMode, vtkTypeBool);
551
555
557
558 // Transfer function range type
562
563 // Point data or cell data (or field data, not handled) ?
565
579
580 using DataMap = std::unordered_map<int, vtkDataSet*>;
582 vtkDataSet* FindData(int port, DataMap& container);
583
584 double ClippedCroppingRegionPlanes[6];
585
588
590 std::vector<int> Ports;
591 std::vector<int> RemovedPorts;
593
599
606
607private:
609 void operator=(const vtkGPUVolumeRayCastMapper&) = delete;
610};
611
612#endif
Proxy object to connect input/output ports.
virtual void SetInputConnection(int port, vtkAlgorithmOutput *input)
Set the connection for the given input port index.
helper object to manage setting and generating contour values
abstract class to specify dataset behavior
Definition: vtkDataSet.h:166
Ray casting performed on the GPU.
virtual void GetDepthImage(vtkImageData *)
Low level API to export the depth texture as vtkImageData in RenderToImage mode.
vtkDataSet * GetTransformedInput(const int port=0)
virtual int IsRenderSupported(vtkRenderWindow *vtkNotUsed(window), vtkVolumeProperty *vtkNotUsed(property))
Based on hardware and properties, we may or may not be able to render using 3D texture mapping.
void CloneInputs()
Shallow-copy the inputs into a transform-adjusted clone.
void SetMaskTypeToLabelMap()
Set the mask type, if mask is to be used.
void RemoveInputConnection(int port, int idx) override
Add/Remove input connections.
void SetTransformedInput(vtkDataSet *)
void SetDepthImageScalarTypeToFloat()
Set/Get the scalar type of the depth texture in RenderToImage mode.
virtual void GPURender(vtkRenderer *, vtkVolume *)
Handled in the subclass - the actual render method.
char * Transfer2DYAxisArray
Define the array used for the Y axis of transfer 2D.
int ValidateRender(vtkRenderer *, vtkVolume *)
This method is used by the Render() method to validate everything before attempting to render.
virtual void GetColorImage(vtkImageData *)
Low level API to export the color texture as vtkImageData in RenderToImage mode.
vtkDataSet * GetInput() override
Set/Get the input data.
vtkContourValues * GetDepthPassContourValues()
Return handle to contour values container so that values can be set by the application.
void SetInputConnection(vtkAlgorithmOutput *input) override
Add/Remove input connections.
void SetDepthImageScalarTypeToUnsignedShort()
Set/Get the scalar type of the depth texture in RenderToImage mode.
void SetMaskInput(vtkImageData *mask)
Optionally, set a mask input.
~vtkGPUVolumeRayCastMapper() override
virtual void GetReductionRatio(double ratio[3])=0
Return how much the dataset has to be reduced in each dimension to fit on the GPU.
void RemovePortInternal(const int port)
DataMap LastInputs
This is needed only to check if the input data has been changed since the last Render() call.
void CreateCanonicalView(vtkRenderer *ren, vtkVolume *volume, vtkImageData *image, int blend_mode, double viewDirection[3], double viewUp[3])
void SetDepthImageScalarTypeToUnsignedChar()
Set/Get the scalar type of the depth texture in RenderToImage mode.
int ValidateInputs()
This method is used by the Render() method to validate everything before attempting to render.
std::unordered_map< int, vtkDataSet * > DataMap
int ValidateInput(vtkVolumeProperty *property, const int port)
This method is used by the Render() method to validate everything before attempting to render.
void ReleaseGraphicsResources(vtkWindow *) override
Release any graphics resources that are being consumed by this mapper.
void Render(vtkRenderer *, vtkVolume *) override
Initialize rendering for this volume.
double * GetBoundsFromPort(const int port)
void TransformInput(const int port)
A transformation is applied (translation) to the input.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void RemoveInputConnection(int port, vtkAlgorithmOutput *input) override
Add/Remove input connections.
virtual void PreRender(vtkRenderer *ren, vtkVolume *vol, double datasetBounds[6], double scalarRange[2], int numberOfScalarComponents, unsigned int numberOfLevels)=0
vtkDataSet * GetInput(const int port) override
Set/Get the input data.
virtual void RenderBlock(vtkRenderer *ren, vtkVolume *vol, unsigned int level)=0
void SetInputConnection(int port, vtkAlgorithmOutput *input) override
Add/Remove input connections.
static vtkGPUVolumeRayCastMapper * New()
int GetInputCount()
Number of currently active ports.
virtual void ClipCroppingRegionPlanes()
Compute the cropping planes clipped by the bounds of the volume.
int FillInputPortInformation(int port, vtkInformation *info) override
Handle inputs.
vtkDataSet * FindData(int port, DataMap &container)
void SetMaskTypeToBinary()
Set the mask type, if mask is to be used.
void CloneInput(vtkDataSet *input, const int port)
Shallow-copy the inputs into a transform-adjusted clone.
virtual void PostRender(vtkRenderer *ren, int numberOfScalarComponents)=0
void SetCellFlag(int cellFlag)
Called by the AMR Volume Mapper.
void CanonicalViewRender(vtkRenderer *, vtkVolume *)
topologically and geometrically regular array of data
Definition: vtkImageData.h:157
a simple class to control print indentation
Definition: vtkIndent.h:113
Store vtkAlgorithm input/output information.
create a window for renderers to draw into
abstract specification for renderers
Definition: vtkRenderer.h:173
Abstract class for a volume mapper.
represents the common properties for rendering a volume.
represents a volume (data & properties) in a rendered scene
Definition: vtkVolume.h:134
window superclass for vtkRenderWindow
Definition: vtkWindow.h:36
@ info
Definition: vtkX3D.h:382
@ level
Definition: vtkX3D.h:401
@ port
Definition: vtkX3D.h:453
@ image
Definition: vtkX3D.h:380
int vtkTypeBool
Definition: vtkABI.h:69
int vtkIdType
Definition: vtkType.h:332
#define VTK_SIZEHINT(...)