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 =========================================================================*/
53 #ifndef vtkDepthPeelingPass_h
54 #define vtkDepthPeelingPass_h
55 
56 #include "vtkRenderingOpenGL2Module.h" // For export macro
57 #include "vtkOpenGLRenderPass.h"
58 #include <vector> // STL Header
59 
61 class vtkTextureObject;
63 class vtkOpenGLHelper;
64 
65 class VTKRENDERINGOPENGL2_EXPORT vtkDepthPeelingPass
66  : public vtkOpenGLRenderPass
67 {
68 public:
69  static vtkDepthPeelingPass *New();
71  void PrintSelf(ostream& os, vtkIndent indent) override;
72 
77  void Render(const vtkRenderState *s) override;
78 
84  void ReleaseGraphicsResources(vtkWindow *w) override;
85 
87 
93  vtkGetObjectMacro(TranslucentPass,vtkRenderPass);
94  virtual void SetTranslucentPass(vtkRenderPass *translucentPass);
96 
98 
107  vtkSetClampMacro(OcclusionRatio,double,0.0,0.5);
108  vtkGetMacro(OcclusionRatio,double);
110 
112 
117  vtkSetMacro(MaximumNumberOfPeels,int);
118  vtkGetMacro(MaximumNumberOfPeels,int);
120 
121  // vtkOpenGLRenderPass virtuals:
122  bool PostReplaceShaderValues(std::string &vertexShader,
123  std::string &geometryShader,
124  std::string &fragmentShader,
125  vtkAbstractMapper *mapper,
126  vtkProp *prop) override;
128  vtkAbstractMapper *mapper, vtkProp *prop,
129  vtkOpenGLVertexArrayObject* VAO = nullptr) override;
130 
131  // Set Opaque Z texture, this must be set from the outer FO
132  void SetOpaqueZTexture(vtkTextureObject *);
133 
134  // Set Opaque RGBA texture, this must be set from the outer FO
135  void SetOpaqueRGBATexture(vtkTextureObject *);
136 
141  vtkSetMacro(DepthFormat, int);
142 
143  protected:
148 
152  ~vtkDepthPeelingPass() override;
153 
154  vtkRenderPass *TranslucentPass;
155  vtkTimeStamp CheckTime;
156 
158 
161  int ViewportX;
162  int ViewportY;
163  int ViewportWidth;
164  int ViewportHeight;
166 
176  double OcclusionRatio;
177 
183  int MaximumNumberOfPeels;
184 
186 
189 
190  // obtained from the outer FO, we read from them
195 
196  // each peel merges two color buffers into one result
197  vtkTextureObject *TranslucentRGBATexture[3];
200 
201  // each peel compares a prior Z and writes to next
202  vtkTextureObject *TranslucentZTexture[2];
204 
205  void BlendIntermediatePeels(vtkOpenGLRenderWindow *renWin, bool);
206  void BlendFinalPeel(vtkOpenGLRenderWindow *renWin);
207 
208  private:
209  vtkDepthPeelingPass(const vtkDepthPeelingPass&) = delete;
210  void operator=(const vtkDepthPeelingPass&) = delete;
211 };
212 
213 #endif
OpenGL rendering window.
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:50
Implement an Order Independent Transparency render pass.
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
record modification and/or execution time
Definition: vtkTimeStamp.h:35
vtkOpenGLHelper * IntermediateBlendProgram
window superclass for vtkRenderWindow
Definition: vtkWindow.h:37
Context in which a vtkRenderPass will render.
vtkTextureObject * OpaqueZTexture
vtkOpenGLFramebufferObject * Framebuffer
a simple class to control print indentation
Definition: vtkIndent.h:39
The VertexArrayObject class uses, or emulates, vertex array objects.
Internal class which encapsulates OpenGL FramebufferObject.
vtkSetMacro(IgnoreDriverBugs, bool)
When set known driver bugs are ignored during driver feature detection.
abstract class specifies interface to map data
abstracts an OpenGL texture object.
virtual void Render(const vtkRenderState *s)=0
Perform rendering according to a render state s.
vtkTextureObject * OpaqueRGBATexture
virtual void ReleaseGraphicsResources(vtkWindow *w)
Release graphics resources and ask components to release their own resources.
vtkOpenGLHelper * FinalBlendProgram
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:58
virtual bool SetShaderParameters(vtkShaderProgram *program, vtkAbstractMapper *mapper, vtkProp *prop, vtkOpenGLVertexArrayObject *VAO=nullptr)
Update the uniforms of the shader program.
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.