VTK
vtkDepthPeelingPass.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkDepthPeelingPass.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 =========================================================================*/
50 #ifndef vtkDepthPeelingPass_h
51 #define vtkDepthPeelingPass_h
52 
53 #include "vtkRenderingOpenGL2Module.h" // For export macro
54 #include "vtkOpenGLRenderPass.h"
55 #include <vector> // STL Header
56 
58 class vtkTextureObject;
60 class vtkOpenGLState;
62 
63 class VTKRENDERINGOPENGL2_EXPORT vtkDepthPeelingPass
64  : public vtkOpenGLRenderPass
65 {
66 public:
67  static vtkDepthPeelingPass *New();
69  void PrintSelf(ostream& os, vtkIndent indent) override;
70 
75  void Render(const vtkRenderState *s) override;
76 
82  void ReleaseGraphicsResources(vtkWindow *w) override;
83 
85 
91  vtkGetObjectMacro(TranslucentPass,vtkRenderPass);
92  virtual void SetTranslucentPass(vtkRenderPass *translucentPass);
94 
96 
105  vtkSetClampMacro(OcclusionRatio,double,0.0,0.5);
106  vtkGetMacro(OcclusionRatio,double);
108 
110 
115  vtkSetMacro(MaximumNumberOfPeels,int);
116  vtkGetMacro(MaximumNumberOfPeels,int);
118 
119  // vtkOpenGLRenderPass virtuals:
120  bool PostReplaceShaderValues(std::string &vertexShader,
121  std::string &geometryShader,
122  std::string &fragmentShader,
123  vtkAbstractMapper *mapper,
124  vtkProp *prop) override;
126  vtkAbstractMapper *mapper, vtkProp *prop,
127  vtkOpenGLVertexArrayObject* VAO = nullptr) override;
128 
129  // Set Opaque Z texture, this must be set from the outer FO
130  void SetOpaqueZTexture(vtkTextureObject *);
131 
132  // Set Opaque RGBA texture, this must be set from the outer FO
133  void SetOpaqueRGBATexture(vtkTextureObject *);
134 
139  vtkSetMacro(DepthFormat, int);
140 
141  protected:
146 
150  ~vtkDepthPeelingPass() override;
151 
154 
156 
164 
175 
182 
184 
187 
188  // obtained from the outer FO, we read from them
193 
194  // each peel merges two color buffers into one result
195  vtkTextureObject *TranslucentRGBATexture[3];
198 
199  // each peel compares a prior Z and writes to next
200  vtkTextureObject *TranslucentZTexture[2];
202 
203  void BlendIntermediatePeels(vtkOpenGLRenderWindow *renWin, bool);
204  void BlendFinalPeel(vtkOpenGLRenderWindow *renWin);
205 
206  // useful to store
208 
209  private:
210  vtkDepthPeelingPass(const vtkDepthPeelingPass&) = delete;
211  void operator=(const vtkDepthPeelingPass&) = delete;
212 };
213 
214 #endif
OpenGL rendering window.
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:46
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:32
int ViewportX
Cache viewport values for depth peeling.
window superclass for vtkRenderWindow
Definition: vtkWindow.h:34
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:33
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
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:55
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 //VTK::XXX:YYY declarations in the shader sources.
The ShaderProgram uses one or more Shader objects.