VTK  9.7.1
vtkValuePass.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
33 #ifndef vtkValuePass_h
34 #define vtkValuePass_h
35 
36 #include "vtkOpenGLRenderPass.h"
37 #include "vtkRenderingOpenGL2Module.h" // For export macro
38 #include "vtkSmartPointer.h" //for ivar
39 #include "vtkWrappingHints.h" // For VTK_MARSHALAUTO
40 
41 VTK_ABI_NAMESPACE_BEGIN
42 class vtkAbstractArray;
43 class vtkActor;
44 class vtkDataArray;
45 class vtkDataObject;
46 class vtkFloatArray;
47 class vtkMapper;
49 class vtkProperty;
50 class vtkRenderer;
51 class vtkRenderWindow;
52 class vtkShaderProgram;
53 
54 class VTKRENDERINGOPENGL2_EXPORT VTK_MARSHALAUTO vtkValuePass : public vtkOpenGLRenderPass
55 {
56 public:
57  enum Mode
58  {
59  INVERTIBLE_LUT = 1,
60  FLOATING_POINT = 2
61  };
62 
63  static vtkValuePass* New();
65  void PrintSelf(ostream& os, vtkIndent indent) override;
66 
67  void SetInputArrayToProcess(int fieldAssociation, const char* name);
68  void SetInputArrayToProcess(int fieldAssociation, int fieldId);
69  void SetInputComponentToProcess(int component);
70 
75  void Render(const vtkRenderState* s) override;
76 
82  vtkFloatArray* GetFloatImageDataArray(vtkRenderer* ren);
83 
89  void GetFloatImageData(int format, int width, int height, void* data);
90 
95  int* GetFloatImageExtents();
96 
97  void ReleaseGraphicsResources(vtkWindow* win) override;
98 
99 protected:
100  vtkValuePass();
101  ~vtkValuePass() override;
102 
104 
113  bool PostReplaceShaderValues(std::string& vertexShader, std::string& geometryShader,
114  std::string& fragmentShader, vtkAbstractMapper* mapper, vtkProp* prop) override;
119  bool SetShaderParameters(vtkShaderProgram* program, vtkAbstractMapper* mapper, vtkProp* prop,
120  vtkOpenGLVertexArrayObject* VAO = nullptr) override;
130 
135  void BeginPass(vtkRenderer* ren);
136 
140  void EndPass();
141 
146  void RenderOpaqueGeometry(const vtkRenderState* s);
147 
151  void RenderPieceFinish();
152 
156  void RenderPieceStart(vtkDataArray* dataArr, vtkMapper* m);
157 
162  void BeginMapperRender(vtkMapper* mapper, vtkDataArray* dataArray, vtkProperty* property);
163 
167  void EndMapperRender(vtkMapper* mapper, vtkProperty* property);
168 
169  void InitializeBuffers(vtkRenderer* ren);
170 
174  bool UpdateShaders(std::string& VSSource, std::string& FSSource);
175 
179  void BindAttributes(vtkShaderProgram* prog, vtkOpenGLVertexArrayObject* VAO);
180  void BindUniforms(vtkShaderProgram* prog);
181 
183 
186  bool HasWindowSizeChanged(vtkRenderer* ren);
187  bool InitializeFBO(vtkRenderer* ren);
188  void ReleaseFBO(vtkWindow* win);
190 
191  class vtkInternalsFloat;
192  vtkInternalsFloat* ImplFloat;
193 
194  class vtkInternalsInvertible;
195  vtkInternalsInvertible* ImplInv;
196 
197  struct Parameters;
198  Parameters* PassState;
199 
201 
202 private:
203  vtkDataArray* GetCurrentArray(vtkMapper* mapper, Parameters* arrayPar);
204 
205  vtkAbstractArray* GetArrayFromCompositeData(vtkMapper* mapper, Parameters* arrayPar);
206 
207  vtkSmartPointer<vtkAbstractArray> MultiBlocksArray;
208 
209  void PopulateCellCellMap(const vtkRenderState* s);
210 
211  vtkValuePass(const vtkValuePass&) = delete;
212  void operator=(const vtkValuePass&) = delete;
213 };
214 
215 VTK_ABI_NAMESPACE_END
216 #endif
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:49
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:41
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:318
represent surface properties of a geometric object
Definition: vtkProperty.h:59
Abstract superclass for all arrays.
dynamic, self-adjusting array of float
Definition: vtkFloatArray.h:31
Parameters * PassState
Definition: vtkValuePass.h:197
abstract specification for renderers
Definition: vtkRenderer.h:63
vtkInternalsFloat * ImplFloat
Definition: vtkValuePass.h:191
window superclass for vtkRenderWindow
Definition: vtkWindow.h:41
Context in which a vtkRenderPass will render.
a simple class to control print indentation
Definition: vtkIndent.h:28
The VertexArrayObject class uses, or emulates, vertex array objects.
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
Renders geometry using the values of a field array as fragment colors.
Definition: vtkValuePass.h:54
abstract class specifies interface to map data to graphics primitives
Definition: vtkMapper.h:77
abstract class specifies interface to map data
create a window for renderers to draw into
virtual void Render(const vtkRenderState *s)=0
Perform rendering according to a render state s.
virtual vtkMTimeType GetShaderStageMTime()
For multi-stage render passes that need to change shader code during a single pass, use this method to notify a mapper that the shader needs to be rebuilt (rather than reuse the last cached shader.
vtkInternalsInvertible * ImplInv
Definition: vtkValuePass.h:194
virtual void ReleaseGraphicsResources(vtkWindow *w)
Release graphics resources and ask components to release their own resources.
#define VTK_MARSHALAUTO
static vtkObject * New()
Create an object with Debug turned off, modified time initialized to zero, and reference counting on...
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.
general representation of visualization data
Definition: vtkDataObject.h:55
The ShaderProgram uses one or more Shader objects.