VTK  9.5.2
vtkOpenGLGPUVolumeRayCastMapper.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
57
58#ifndef vtkOpenGLGPUVolumeRayCastMapper_h
59#define vtkOpenGLGPUVolumeRayCastMapper_h
60#include <map> // For methods
61
63#include "vtkNew.h" // For vtkNew
64#include "vtkRenderingVolumeOpenGL2Module.h" // For export macro
65#include "vtkShader.h" // For methods
66#include "vtkSmartPointer.h" // For smartptr
67#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
68
69VTK_ABI_NAMESPACE_BEGIN
72class vtkOpenGLCamera;
73class vtkOpenGLTransferFunctions2D;
74class vtkOpenGLVolumeGradientOpacityTables;
75class vtkOpenGLVolumeOpacityTables;
76class vtkOpenGLVolumeRGBTables;
79class vtkVolume;
83
84class VTKRENDERINGVOLUMEOPENGL2_EXPORT VTK_MARSHALAUTO vtkOpenGLGPUVolumeRayCastMapper
86{
87public:
89
90 enum Passes
91 {
94 };
95
97 void PrintSelf(ostream& os, vtkIndent indent) override;
98
99 // Description:
100 // Low level API to enable access to depth texture in
101 // RenderToTexture mode. It will return either nullptr if
102 // RenderToImage was never turned on or texture captured
103 // the last time RenderToImage was on.
105
106 // Description:
107 // Low level API to enable access to color texture in
108 // RenderToTexture mode. It will return either nullptr if
109 // RenderToImage was never turned on or texture captured
110 // the last time RenderToImage was on.
112
113 // Description:
114 // Low level API to export the depth texture as vtkImageData in
115 // RenderToImage mode.
116 void GetDepthImage(vtkImageData* im) override;
117
118 // Description:
119 // Low level API to export the color texture as vtkImageData in
120 // RenderToImage mode.
121 void GetColorImage(vtkImageData* im) override;
122
123 // Description:
124 // Mapper can have multiple passes and internally it will set
125 // the state. The state can not be set externally explicitly
126 // but can be set indirectly depending on the options set by
127 // the user.
128 vtkGetMacro(CurrentPass, int);
129
130 // Sets a depth texture for this mapper to use
131 // This allows many mappers to use the same
132 // texture reducing GPU usage. If this is set
133 // the standard depth texture code is skipped
134 // The depth texture should be activated
135 // and deactivated outside of this class
137
143 void SetPartitions(unsigned short x, unsigned short y, unsigned short z);
144
154
155 // Description:
156 // Delete OpenGL objects.
157 // \post done: this->OpenGLObjectsCreated==0
158 void ReleaseGraphicsResources(vtkWindow* window) override;
159
160protected:
163
165
166 // Description:
167 // Build vertex and fragment shader for the volume rendering
169 vtkRenderer* ren, vtkVolume* vol, int noOfComponents, int independentComponents);
170
171 // Description:
172 // Build vertex and fragment shader for the volume rendering
174
175 // TODO Take these out as these are no longer needed
176 // Methods called by the AMR Volume Mapper.
177 void PreRender(vtkRenderer* vtkNotUsed(ren), vtkVolume* vtkNotUsed(vol),
178 double vtkNotUsed(datasetBounds)[6], double vtkNotUsed(scalarRange)[2],
179 int vtkNotUsed(noOfComponents), unsigned int vtkNotUsed(numberOfLevels)) override
180 {
181 }
182
183 // \pre input is up-to-date
184 void RenderBlock(vtkRenderer* vtkNotUsed(ren), vtkVolume* vtkNotUsed(vol),
185 unsigned int vtkNotUsed(level)) override
186 {
187 }
188
189 void PostRender(vtkRenderer* vtkNotUsed(ren), int vtkNotUsed(noOfComponents)) override {}
190
191 // Description:
192 // Rendering volume on GPU
193 void GPURender(vtkRenderer* ren, vtkVolume* vol) override;
194
195 // Description:
196 // Method that performs the actual rendering given a volume and a shader
198 vtkOpenGLShaderProperty* shaderProperty);
199
200 // Description:
201 // Update the reduction factor of the render viewport (this->ReductionFactor)
202 // according to the time spent in seconds to render the previous frame
203 // (this->TimeToDraw) and a time in seconds allocated to render the next
204 // frame (allocatedTime).
205 // \pre valid_current_reduction_range: this->ReductionFactor>0.0 && this->ReductionFactor<=1.0
206 // \pre positive_TimeToDraw: this->TimeToDraw>=0.0
207 // \pre positive_time: allocatedTime>0
208 // \post valid_new_reduction_range: this->ReductionFactor>0.0 && this->ReductionFactor<=1.0
209 void ComputeReductionFactor(double allocatedTime);
210
211 // Description:
212 // Returns a reduction ratio for each dimension
213 // This ratio is computed from MaxMemoryInBytes and MaxMemoryFraction so that the total
214 // memory usage of the resampled image, by the returned ratio, does not exceed
215 // `MaxMemoryInBytes * MaxMemoryFraction`
216 // \pre input is up-to-date
217 // \post Aspect ratio of image is always kept
218 // - for a 1D image `ratio[1] == ratio[2] == 1`
219 // - for a 2D image `ratio[0] == ratio[1]` and `ratio[2] == 1`
220 // - for a 3D image `ratio[0] == ratio[1] == ratio[2]`
221 void GetReductionRatio(double* ratio) override;
222
223 // Description:
224 // Empty implementation.
226 vtkRenderWindow* vtkNotUsed(window), vtkVolumeProperty* vtkNotUsed(property)) override
227 {
228 return 1;
229 }
230
232
236
241 std::map<vtkShader::Type, vtkShader*>& shaders, vtkOpenGLShaderProperty* p);
242
247 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
248
254 std::map<vtkShader::Type, vtkShader*>& shaders, vtkOpenGLShaderProperty* p);
256 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
258 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
260 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
262 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
264 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
266 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
268 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
270 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
272 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
274 std::map<vtkShader::Type, vtkShader*>& shaders, vtkVolume* vol, bool prePass);
275
280
288
291
292public:
294 using VolumeInputMap = std::map<int, vtkVolumeInputHelper>;
296
297private:
298 class vtkInternal;
299 vtkInternal* Impl;
300
301 friend class vtkVolumeTexture;
302
304 void operator=(const vtkOpenGLGPUVolumeRayCastMapper&) = delete;
305};
306
307VTK_ABI_NAMESPACE_END
308#endif // vtkOpenGLGPUVolumeRayCastMapper_h
topologically and geometrically regular array of data
abstract interface for implicit functions
a simple class to control print indentation
Definition vtkIndent.h:29
Allocate and hold a VTK object.
Definition vtkNew.h:58
OpenGL camera.
void GetColorImage(vtkImageData *im) override
Low level API to export the color texture as vtkImageData in RenderToImage mode.
void ReplaceShaderRTT(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
void SetShaderParametersRenderPass()
Update parameters from RenderPass.
void PreRender(vtkRenderer *vtkNotUsed(ren), vtkVolume *vtkNotUsed(vol), double vtkNotUsed(datasetBounds)[6], double vtkNotUsed(scalarRange)[2], int vtkNotUsed(noOfComponents), unsigned int vtkNotUsed(numberOfLevels)) override
void ReplaceShaderCustomUniforms(std::map< vtkShader::Type, vtkShader * > &shaders, vtkOpenGLShaderProperty *p)
RenderPass string replacements on shader templates called from ReplaceShaderValues.
void GetShaderTemplate(std::map< vtkShader::Type, vtkShader * > &shaders, vtkOpenGLShaderProperty *p)
Create the basic shader template strings before substitutions.
void GetDepthImage(vtkImageData *im) override
Low level API to export the depth texture as vtkImageData in RenderToImage mode.
void BuildShader(vtkRenderer *ren)
void ReplaceShaderCropping(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
void ReplaceShaderRenderPass(std::map< vtkShader::Type, vtkShader * > &shaders, vtkVolume *vol, bool prePass)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
void DoGPURender(vtkRenderer *ren, vtkOpenGLCamera *cam, vtkShaderProgram *shaderProgram, vtkOpenGLShaderProperty *shaderProperty)
std::map< int, vtkVolumeInputHelper > VolumeInputMap
bool PreLoadData(vtkRenderer *ren, vtkVolume *vol)
Load the volume texture into GPU memory.
void ReplaceShaderTermination(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
void RenderBlock(vtkRenderer *vtkNotUsed(ren), vtkVolume *vtkNotUsed(vol), unsigned int vtkNotUsed(level)) override
void PostRender(vtkRenderer *vtkNotUsed(ren), int vtkNotUsed(noOfComponents)) override
void SetSharedDepthTexture(vtkTextureObject *nt)
void ComputeReductionFactor(double allocatedTime)
void ReplaceShaderPicking(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
void ReplaceShaderBase(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
void GetReductionRatio(double *ratio) override
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
void ReplaceShaderClipping(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
vtkMTimeType GetRenderPassStageMTime(vtkVolume *vol)
vtkOpenGLRenderPass API
vtkTextureObject * GetColorTexture()
void ReplaceShaderCompute(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
void ReplaceShaderMasking(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
void BuildDepthPassShader(vtkRenderer *ren, vtkVolume *vol, int noOfComponents, int independentComponents)
vtkGenericOpenGLResourceFreeCallback * ResourceCallback
void SetPartitions(unsigned short x, unsigned short y, unsigned short z)
Set a fixed number of partitions in which to split the volume during rendering.
vtkNew< vtkInformation > LastRenderPassInfo
Caches the vtkOpenGLRenderPass::RenderPasses() information.
vtkTextureObject * GetDepthTexture()
void GPURender(vtkRenderer *ren, vtkVolume *vol) override
Handled in the subclass - the actual render method.
static vtkOpenGLGPUVolumeRayCastMapper * New()
void ReplaceShaderValues(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Perform string replacements on the shader templates.
void ReleaseGraphicsResources(vtkWindow *window) override
Release any graphics resources that are being consumed by this mapper.
void ReplaceShaderShading(std::map< vtkShader::Type, vtkShader * > &shaders, vtkRenderer *ren, vtkVolume *vol, int numComps)
Caches the vtkOpenGLRenderPass::RenderPasses() information.
int IsRenderSupported(vtkRenderWindow *vtkNotUsed(window), vtkVolumeProperty *vtkNotUsed(property)) override
Based on hardware and properties, we may or may not be able to render using 3D texture mapping.
represent GPU shader properties
create a window for renderers to draw into
abstract specification for renderers
Definition vtkRenderer.h:60
The ShaderProgram uses one or more Shader objects.
In case DepthTextureCompare is true, specify the comparison function in use.
Convenience container for internal structures specific to a volume input.
represents the common properties for rendering a volume.
Creates and manages the volume texture rendered by vtkOpenGLGPUVolumeRayCastMapper.
represents a volume (data & properties) in a rendered scene
Definition vtkVolume.h:41
window superclass for vtkRenderWindow
Definition vtkWindow.h:26
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:287
#define VTK_MARSHALAUTO