VTK  9.7.20260720
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
79
80#ifndef vtkOpenGLGPUVolumeRayCastMapper_h
81#define vtkOpenGLGPUVolumeRayCastMapper_h
82#include <map> // For methods
83
85#include "vtkNew.h" // For vtkNew
86#include "vtkRenderingVolumeOpenGL2Module.h" // For export macro
87#include "vtkShader.h" // For methods
88#include "vtkSmartPointer.h" // For smartptr
89#include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
90
91VTK_ABI_NAMESPACE_BEGIN
94class vtkOpenGLCamera;
95class vtkOpenGLTransferFunctions2D;
96class vtkOpenGLVolumeGradientOpacityTables;
97class vtkOpenGLVolumeOpacityTables;
98class vtkOpenGLVolumeRGBTables;
100class vtkTextureObject;
101class vtkVolume;
103class vtkVolumeTexture;
105
106class VTKRENDERINGVOLUMEOPENGL2_EXPORT VTK_MARSHALAUTO vtkOpenGLGPUVolumeRayCastMapper
108{
109public:
111
113 {
116 };
117
119 void PrintSelf(ostream& os, vtkIndent indent) override;
120
121 // Description:
122 // Low level API to enable access to depth texture in
123 // RenderToTexture mode. It will return either nullptr if
124 // RenderToImage was never turned on or texture captured
125 // the last time RenderToImage was on.
127
128 // Description:
129 // Low level API to enable access to color texture in
130 // RenderToTexture mode. It will return either nullptr if
131 // RenderToImage was never turned on or texture captured
132 // the last time RenderToImage was on.
134
135 // Description:
136 // Low level API to export the depth texture as vtkImageData in
137 // RenderToImage mode.
138 void GetDepthImage(vtkImageData* im) override;
139
140 // Description:
141 // Low level API to export the color texture as vtkImageData in
142 // RenderToImage mode.
143 void GetColorImage(vtkImageData* im) override;
144
145 // Description:
146 // Mapper can have multiple passes and internally it will set
147 // the state. The state can not be set externally explicitly
148 // but can be set indirectly depending on the options set by
149 // the user.
150 vtkGetMacro(CurrentPass, int);
151
152 // Sets a depth texture for this mapper to use
153 // This allows many mappers to use the same
154 // texture reducing GPU usage. If this is set
155 // the standard depth texture code is skipped
156 // The depth texture should be activated
157 // and deactivated outside of this class
159
165 void SetPartitions(unsigned short x, unsigned short y, unsigned short z);
166
176
177 // Description:
178 // Delete OpenGL objects.
179 // \post done: this->OpenGLObjectsCreated==0
180 void ReleaseGraphicsResources(vtkWindow* window) override;
181
194 void GetReductionRatio(double* ratio) override;
195
196protected:
199
201
202 // Description:
203 // Build vertex and fragment shader for the volume rendering
205 vtkRenderer* ren, vtkVolume* vol, int noOfComponents, int independentComponents);
206
207 // Description:
208 // Build vertex and fragment shader for the volume rendering
210
211 // TODO Take these out as these are no longer needed
212 // Methods called by the AMR Volume Mapper.
213 void PreRender(vtkRenderer* vtkNotUsed(ren), vtkVolume* vtkNotUsed(vol),
214 double vtkNotUsed(datasetBounds)[6], double vtkNotUsed(scalarRange)[2],
215 int vtkNotUsed(noOfComponents), unsigned int vtkNotUsed(numberOfLevels)) override
216 {
217 }
218
219 // \pre input is up-to-date
220 void RenderBlock(vtkRenderer* vtkNotUsed(ren), vtkVolume* vtkNotUsed(vol),
221 unsigned int vtkNotUsed(level)) override
222 {
223 }
224
225 void PostRender(vtkRenderer* vtkNotUsed(ren), int vtkNotUsed(noOfComponents)) override {}
226
227 // Description:
228 // Rendering volume on GPU
229 void GPURender(vtkRenderer* ren, vtkVolume* vol) override;
230
231 // Description:
232 // Method that performs the actual rendering given a volume and a shader
234 vtkOpenGLShaderProperty* shaderProperty);
235
236 // Description:
237 // Update the reduction factor of the render viewport (this->ReductionFactor)
238 // according to the time spent in seconds to render the previous frame
239 // (this->TimeToDraw) and a time in seconds allocated to render the next
240 // frame (allocatedTime).
241 // \pre valid_current_reduction_range: this->ReductionFactor>0.0 && this->ReductionFactor<=1.0
242 // \pre positive_TimeToDraw: this->TimeToDraw>=0.0
243 // \pre positive_time: allocatedTime>0
244 // \post valid_new_reduction_range: this->ReductionFactor>0.0 && this->ReductionFactor<=1.0
245 void ComputeReductionFactor(double allocatedTime);
246
247 // Description:
248 // Empty implementation.
250 vtkRenderWindow* vtkNotUsed(window), vtkVolumeProperty* vtkNotUsed(property)) override
251 {
252 return 1;
253 }
254
256
260
265 std::map<vtkShader::Type, vtkShader*>& shaders, vtkOpenGLShaderProperty* p);
266
271 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
272
278 std::map<vtkShader::Type, vtkShader*>& shaders, vtkOpenGLShaderProperty* p);
280 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
282 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
284 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
286 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
288 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
290 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
292 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
294 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
296 std::map<vtkShader::Type, vtkShader*>& shaders, vtkRenderer* ren, vtkVolume* vol, int numComps);
298 std::map<vtkShader::Type, vtkShader*>& shaders, vtkVolume* vol, bool prePass);
299
304
312
315
316public:
318 using VolumeInputMap = std::map<int, vtkVolumeInputHelper>;
320
321private:
322 class vtkInternal;
323 vtkInternal* Impl;
324
325 friend class vtkVolumeTexture;
326
328 void operator=(const vtkOpenGLGPUVolumeRayCastMapper&) = delete;
329};
330
331VTK_ABI_NAMESPACE_END
332#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:108
Allocate and hold a VTK object.
Definition vtkNew.h:168
OpenGL camera.
void GetColorImage(vtkImageData *im) override
Low level API to export the color texture as vtkImageData in RenderToImage mode.
int IsRenderSupported(vtkRenderWindow *window, vtkVolumeProperty *property) override
Based on hardware and properties, we may or may not be able to render using 3D texture mapping.
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 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 SetSharedDepthTexture(vtkTextureObject *nt)
void RenderBlock(vtkRenderer *ren, vtkVolume *vol, unsigned int level) override
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
Description: Returns a reduction ratio for each dimension This ratio is computed from MaxMemoryInByte...
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 PreRender(vtkRenderer *ren, vtkVolume *vol, double datasetBounds[6], double scalarRange[2], int noOfComponents, unsigned int numberOfLevels) override
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.
void PostRender(vtkRenderer *ren, int noOfComponents) override
represent GPU shader properties
create a window for renderers to draw into
abstract specification for renderers
The ShaderProgram uses one or more Shader objects.
abstracts an OpenGL texture object.
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:130
window superclass for vtkRenderWindow
Definition vtkWindow.h:62
vtkTypeUInt32 vtkMTimeType
Definition vtkType.h:318
#define VTK_MARSHALAUTO