VTK  9.7.1
vtkDepthPeelingPass.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
41 #ifndef vtkDepthPeelingPass_h
42 #define vtkDepthPeelingPass_h
43 
44 #include "vtkOpenGLRenderPass.h"
45 #include "vtkRenderingOpenGL2Module.h" // For export macro
46 #include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
47 #include <vector> // STL Header
48 
49 VTK_ABI_NAMESPACE_BEGIN
51 class vtkTextureObject;
53 class vtkOpenGLState;
55 
56 class VTKRENDERINGOPENGL2_EXPORT VTK_MARSHALAUTO vtkDepthPeelingPass : public vtkOpenGLRenderPass
57 {
58 public:
59  static vtkDepthPeelingPass* New();
61  void PrintSelf(ostream& os, vtkIndent indent) override;
62 
67  void Render(const vtkRenderState* s) override;
68 
74  void ReleaseGraphicsResources(vtkWindow* w) override;
75 
77 
83  vtkGetObjectMacro(TranslucentPass, vtkRenderPass);
84  virtual void SetTranslucentPass(vtkRenderPass* translucentPass);
86 
88 
97  vtkSetClampMacro(OcclusionRatio, double, 0.0, 0.5);
98  vtkGetMacro(OcclusionRatio, double);
100 
102 
107  vtkSetMacro(MaximumNumberOfPeels, int);
108  vtkGetMacro(MaximumNumberOfPeels, int);
110 
111  // vtkOpenGLRenderPass virtuals:
112  bool PostReplaceShaderValues(std::string& vertexShader, std::string& geometryShader,
113  std::string& fragmentShader, vtkAbstractMapper* mapper, vtkProp* prop) override;
114  bool SetShaderParameters(vtkShaderProgram* program, vtkAbstractMapper* mapper, vtkProp* prop,
115  vtkOpenGLVertexArrayObject* VAO = nullptr) override;
116 
117  // Set Opaque Z texture, this must be set from the outer FO
118  void SetOpaqueZTexture(vtkTextureObject*);
119 
120  // Set Opaque RGBA texture, this must be set from the outer FO
121  void SetOpaqueRGBATexture(vtkTextureObject*);
122 
127  vtkSetMacro(DepthFormat, int);
128 
129 protected:
134 
138  ~vtkDepthPeelingPass() override;
139 
142 
144 
152 
163 
170 
172 
175 
176  // obtained from the outer FO, we read from them
181 
182  // each peel merges two color buffers into one result
183  vtkTextureObject* TranslucentRGBATexture[3];
186 
187  // each peel compares a prior Z and writes to next
188  vtkTextureObject* TranslucentZTexture[2];
190 
191  void BlendIntermediatePeels(vtkOpenGLRenderWindow* renWin, bool);
192  void BlendFinalPeel(vtkOpenGLRenderWindow* renWin);
193 
194  // useful to store
196 
197 private:
198  vtkDepthPeelingPass(const vtkDepthPeelingPass&) = delete;
199  void operator=(const vtkDepthPeelingPass&) = delete;
200 };
201 
202 VTK_ABI_NAMESPACE_END
203 #endif
OpenGL rendering window.
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:49
Implement Depth Peeling for use within a framebuffer pass.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
int ViewportHeight
Cache viewport values for depth peeling.
vtkOpenGLQuadHelper * FinalBlend
record modification and/or execution time
Definition: vtkTimeStamp.h:24
int ViewportX
Cache viewport values for depth peeling.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:41
double OcclusionRatio
In case of use of depth peeling technique for rendering translucent material, define the threshold un...
Context in which a vtkRenderPass will render.
vtkTextureObject * OpaqueZTexture
OpenGL state storage.
vtkOpenGLFramebufferObject * Framebuffer
vtkOpenGLQuadHelper * IntermediateBlend
a simple class to control print indentation
Definition: vtkIndent.h:28
The VertexArrayObject class uses, or emulates, vertex array objects.
int ViewportWidth
Cache viewport values for depth peeling.
Internal class which encapsulates OpenGL FramebufferObject.
abstract class specifies interface to map data
abstracts an OpenGL texture object.
int MaximumNumberOfPeels
In case of depth peeling, define the maximum number of peeling layers.
virtual void Render(const vtkRenderState *s)=0
Perform rendering according to a render state s.
vtkTextureObject * OpaqueRGBATexture
Class to make rendering a full screen quad easier.
virtual void ReleaseGraphicsResources(vtkWindow *w)
Release graphics resources and ask components to release their own resources.
int ViewportY
Cache viewport values for depth peeling.
vtkRenderPass * TranslucentPass
#define VTK_MARSHALAUTO
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
Perform part of the rendering of a vtkRenderer.
Definition: vtkRenderPass.h:49
virtual bool SetShaderParameters(vtkShaderProgram *program, vtkAbstractMapper *mapper, vtkProp *prop, vtkOpenGLVertexArrayObject *VAO=nullptr)
Update the uniforms of the shader program.
vtkOpenGLState * State
Abstract render pass with shader modifications.
virtual bool PostReplaceShaderValues(std::string &vertexShader, std::string &geometryShader, std::string &fragmentShader, vtkAbstractMapper *mapper, vtkProp *prop)
Use vtkShaderProgram::Substitute to replace.
The ShaderProgram uses one or more Shader objects.