VTK  9.3.1
vtkOpenGLBatchedPolyDataMapper.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
3 
18 #ifndef vtkOpenGLBatchedPolyDataMapper_h
19 #define vtkOpenGLBatchedPolyDataMapper_h
20 
21 #include "vtkColor.h" // class uses vtkColor
22 #include "vtkNew.h" // for ivar
23 #include "vtkOpenGLCompositePolyDataMapperDelegator.h" // for struct BatchElement
24 #include "vtkRenderingOpenGL2Module.h" // for export macro
25 #include "vtkSmartPointer.h" // for arg
26 #include "vtk_glew.h" // for OpenGL defs
27 
28 // clang-format off
29 // Must be included after vtk_glew.h for GL_ES_VERSION_3_0
30 #ifndef GL_ES_VERSION_3_0
32 #define vtkOpenGLPolyDataMapperImplementation vtkOpenGLPolyDataMapper
33 #else
35 #define vtkOpenGLPolyDataMapperImplementation vtkOpenGLES30PolyDataMapper
36 #endif
37 // clang-format on
38 
39 #include <cstdint> // for std::uintptr_t
40 #include <memory> // for shared_ptr
41 
42 VTK_ABI_NAMESPACE_BEGIN
44 class vtkPolyData;
45 
46 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLBatchedPolyDataMapper
48 {
49 public:
50  static vtkOpenGLBatchedPolyDataMapper* New();
52  void PrintSelf(ostream& os, vtkIndent indent) override;
53 
55 
60  void AddBatchElement(unsigned int flatIndex, BatchElement&& batchElement);
61  BatchElement* GetBatchElement(vtkPolyData* polydata);
62  void ClearBatchElements();
64 
68  std::vector<vtkPolyData*> GetRenderedList() const;
69  void SetParent(vtkCompositePolyDataMapper* parent);
70 
74  void RenderPiece(vtkRenderer* renderer, vtkActor* actor) override;
75  void UnmarkBatchElements();
76  void ClearUnmarkedBatchElements();
77 
82  void ProcessSelectorPixelBuffers(
83  vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
84 
85  virtual void ProcessCompositePixelBuffers(vtkHardwareSelector* sel, vtkProp* prop,
86  GLBatchElement* glBatchElement, std::vector<unsigned int>& mypixels);
87 
88 protected:
91 
92  void RenderPieceDraw(vtkRenderer* renderer, vtkActor* actor) override;
93  void UpdateCameraShiftScale(vtkRenderer* renderer, vtkActor* actoror) override;
94 
98  void DrawIBO(vtkRenderer* renderer, vtkActor* actoror, int primType, vtkOpenGLHelper& CellBO,
99  GLenum mode, int pointSize);
100 
104  virtual void SetShaderValues(
105  vtkShaderProgram* prog, GLBatchElement* glBatchElement, size_t primOffset);
106 
111  void UpdateShaders(vtkOpenGLHelper& cellBO, vtkRenderer* renderer, vtkActor* actor) override;
112 
117  void ReplaceShaderColor(
118  std::map<vtkShader::Type, vtkShader*> shaders, vtkRenderer* renderer, vtkActor* actor) override;
119 
123  bool GetNeedToRebuildBufferObjects(vtkRenderer* renderer, vtkActor* actor) override;
124 
128  void BuildBufferObjects(vtkRenderer* renderer, vtkActor* actor) override;
129  virtual void AppendOneBufferObject(vtkRenderer* renderer, vtkActor* actor,
130  GLBatchElement* glBatchElement, vtkIdType& vertexOffset, std::vector<unsigned char>& colors,
131  std::vector<float>& norms);
132 
136  void BuildSelectionIBO(
137  vtkPolyData* poly, std::vector<unsigned int> (&indices)[4], vtkIdType offset) override;
138 
144  int CanUseTextureMapForColoring(vtkDataObject*) override;
145 
146  // Reference to CPDM
147  vtkCompositePolyDataMapper* Parent = nullptr;
148  // Maps an address of a vtkPolyData to its rendering attributes.
149  std::map<std::uintptr_t, std::unique_ptr<GLBatchElement>> VTKPolyDataToGLBatchElement;
150  // Index arrays for vert, line, poly, strip, edge, stripedge
151  std::vector<unsigned int> IndexArray[PrimitiveEnd];
152  // Whether primitive IDs are used
154  // Whether override color is used for a vtkPolyData
156  // Reference to the current selector.
158  // used by the hardware selector
159  std::vector<std::vector<unsigned int>> PickPixels;
160  // cached array map
161  std::map<vtkAbstractArray*, vtkDataArray*> ColorArrayMap;
162 
163 private:
165  void operator=(const vtkOpenGLBatchedPolyDataMapper&) = delete;
166 };
167 
168 VTK_ABI_NAMESPACE_END
169 #endif
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:45
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:40
An OpenGL mapper for batched rendering of vtkPolyData.
abstract specification for renderers
Definition: vtkRenderer.h:61
int vtkIdType
Definition: vtkType.h:315
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:79
vtkCompositePolyDataMapperDelegator::BatchElement BatchElement
a simple class to control print indentation
Definition: vtkIndent.h:28
std::map< std::uintptr_t, std::unique_ptr< GLBatchElement > > VTKPolyDataToGLBatchElement
#define vtkOpenGLPolyDataMapperImplementation
std::map< vtkAbstractArray *, vtkDataArray * > ColorArrayMap
general representation of visualization data
Definition: vtkDataObject.h:54
std::vector< std::vector< unsigned int > > PickPixels
a class that renders hierarchical polygonal data
The ShaderProgram uses one or more Shader objects.