VTK  9.3.1
vtkCompositeMapperHelper2.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 
4 #ifndef vtkCompositeMapperHelper2_h
5 #define vtkCompositeMapperHelper2_h
6 
7 #include "vtkColor.h" // class uses vtkColor
8 #include "vtkDeprecation.h" // For VTK_DEPRECATED_IN_9_3_0
9 #include "vtkRenderingOpenGL2Module.h" // for export macro
10 #include "vtk_glew.h" // for OpenGL enums
11 // clang-format off
12 // Must be included after vtk_glew.h for GL_ES_VERSION_3_0
13 #ifndef GL_ES_VERSION_3_0
15 #define vtkOpenGLPolyDataMapperImplementation vtkOpenGLPolyDataMapper
16 #else
18 #define vtkOpenGLPolyDataMapperImplementation vtkOpenGLES30PolyDataMapper
19 #endif
20 // clang-format on
21 
22 VTK_ABI_NAMESPACE_BEGIN
23 class vtkPolyData;
25 
26 // this class encapsulates values tied to a
27 // polydata
28 
31 {
32 public:
34  unsigned int FlatIndex;
35  double Opacity;
36  bool IsOpaque;
37  bool Visibility;
44 
45  bool Marked;
46 
47  unsigned int StartVertex;
48  unsigned int NextVertex;
49 
50  // point line poly strip edge stripedge
51  unsigned int StartIndex[vtkOpenGLPolyDataMapper::PrimitiveEnd];
52  unsigned int NextIndex[vtkOpenGLPolyDataMapper::PrimitiveEnd];
53 
54  // stores the mapping from vtk cells to gl_PrimitiveId
56 };
57 
58 //===================================================================
61  VTKRENDERINGOPENGL2_EXPORT vtkCompositeMapperHelper2
63 {
64 public:
65  static vtkCompositeMapperHelper2* New();
67  void PrintSelf(ostream& os, vtkIndent indent) override;
68 
69  void SetParent(vtkCompositePolyDataMapper2* p) { this->Parent = p; }
70 
71  vtkCompositeMapperHelperData* AddData(vtkPolyData* pd, unsigned int flatIndex);
72 
76  void RenderPiece(vtkRenderer* ren, vtkActor* act) override;
77 
81  void ClearMark();
82  void RemoveUnused();
83  bool GetMarked() { return this->Marked; }
84  void SetMarked(bool v) { this->Marked = v; }
86 
90  std::vector<vtkPolyData*> GetRenderedList() const;
91 
96  void ProcessSelectorPixelBuffers(
97  vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
98 
99  virtual void ProcessCompositePixelBuffers(vtkHardwareSelector* sel, vtkProp* prop,
100  vtkCompositeMapperHelperData* hdata, std::vector<unsigned int>& mypixels);
101 
102 protected:
104  std::map<vtkPolyData*, vtkCompositeMapperHelperData*> Data;
105 
106  bool Marked;
107 
109  void UpdateCameraShiftScale(vtkRenderer* ren, vtkActor* actor) override;
110 
111  vtkCompositeMapperHelper2() { this->Parent = nullptr; };
112  ~vtkCompositeMapperHelper2() override;
113 
114  void DrawIBO(vtkRenderer* ren, vtkActor* actor, int primType, vtkOpenGLHelper& CellBO,
115  GLenum mode, int pointSize);
116 
117  virtual void SetShaderValues(
118  vtkShaderProgram* prog, vtkCompositeMapperHelperData* hdata, size_t primOffset);
119 
124  void UpdateShaders(vtkOpenGLHelper& cellBO, vtkRenderer* ren, vtkActor* act) override;
125 
130  void ReplaceShaderColor(
131  std::map<vtkShader::Type, vtkShader*> shaders, vtkRenderer* ren, vtkActor* act) override;
132 
136  bool GetNeedToRebuildBufferObjects(vtkRenderer* ren, vtkActor* act) override;
137 
141  void BuildBufferObjects(vtkRenderer* ren, vtkActor* act) override;
142  virtual void AppendOneBufferObject(vtkRenderer* ren, vtkActor* act,
143  vtkCompositeMapperHelperData* hdata, vtkIdType& flat_index, std::vector<unsigned char>& colors,
144  std::vector<float>& norms);
145 
149  void BuildSelectionIBO(
150  vtkPolyData* poly, std::vector<unsigned int> (&indices)[4], vtkIdType offset) override;
151 
157  int CanUseTextureMapForColoring(vtkDataObject*) override;
158 
159  std::vector<unsigned int> VertexOffsets;
160 
161  // vert line poly strip edge stripedge
162  std::vector<unsigned int> IndexArray[PrimitiveEnd];
163 
164  void RenderPieceDraw(vtkRenderer* ren, vtkActor* act) override;
165 
168 
170 
172  std::vector<std::vector<unsigned int>> PickPixels;
173 
174  std::map<vtkAbstractArray*, vtkDataArray*> ColorArrayMap;
175 
176 private:
178  void operator=(const vtkCompositeMapperHelper2&) = delete;
179 };
180 
181 VTK_ABI_NAMESPACE_END
182 #endif
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:45
std::map< vtkAbstractArray *, vtkDataArray * > ColorArrayMap
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:40
std::vector< unsigned int > VertexOffsets
mapper for composite dataset consisting of polygonal data.
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
vtkCompositePolyDataMapper2 * Parent
#define VTK_DEPRECATED_IN_9_3_0(reason)
a simple class to control print indentation
Definition: vtkIndent.h:28
#define vtkOpenGLPolyDataMapperImplementation
std::map< vtkPolyData *, vtkCompositeMapperHelperData * > Data
Helper class for vtkCompositePolyDataMapper2 that is a subclass of vtkOpenGLPolyDataMapper.
std::vector< std::vector< unsigned int > > PickPixels
used by the hardware selector
vtkNew< vtkOpenGLCellToVTKCellMap > CellCellMap
general representation of visualization data
Definition: vtkDataObject.h:54
vtkHardwareSelector * CurrentSelector
void SetParent(vtkCompositePolyDataMapper2 *p)
a class that renders hierarchical polygonal data
The ShaderProgram uses one or more Shader objects.