VTK  9.7.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 
22 
23 #include "vtkColor.h" // class uses vtkColor
24 #include "vtkNew.h" // for ivar
25 #include "vtkOpenGLCompositePolyDataMapperDelegator.h" // for struct BatchElement
26 #include "vtkRenderingOpenGL2Module.h" // for export macro
27 #include "vtkSmartPointer.h" // for arg
28 #include "vtk_glad.h" // for OpenGL defs
29 
30 #include <cstdint> // for std::uintptr_t
31 #include <memory> // for shared_ptr
32 
33 VTK_ABI_NAMESPACE_BEGIN
35 class vtkPolyData;
36 
37 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLBatchedPolyDataMapper : public vtkOpenGLPolyDataMapper
38 {
39 public:
42  void PrintSelf(ostream& os, vtkIndent indent) override;
43 
45 
50  void AddBatchElement(unsigned int flatIndex, BatchElement&& batchElement);
51  BatchElement* GetBatchElement(vtkPolyData* polydata);
52  void ClearBatchElements();
54 
58  std::vector<vtkPolyData*> GetRenderedList() const;
59  void SetParent(vtkCompositePolyDataMapper* parent);
60 
64  void RenderPieceStart(vtkRenderer* renderer, vtkActor* actor) override;
65  void RenderPiece(vtkRenderer* renderer, vtkActor* actor) override;
66  void UnmarkBatchElements();
67  void ClearUnmarkedBatchElements();
68 
74  vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
75 
76  virtual void ProcessCompositePixelBuffers(vtkHardwareSelector* sel, vtkProp* prop,
77  GLBatchElement* glBatchElement, std::vector<unsigned int>& mypixels);
78 
82  vtkMTimeType GetMTime() override;
83 
84 protected:
87 
88  void RenderPieceDraw(vtkRenderer* renderer, vtkActor* actor) override;
89  void UpdateCameraShiftScale(vtkRenderer* renderer, vtkActor* actoror) override;
90 
94  void DrawIBO(vtkRenderer* renderer, vtkActor* actoror, int primType, vtkOpenGLHelper& CellBO,
95  GLenum mode, int pointSize);
96 
100  virtual void SetShaderValues(
101  vtkShaderProgram* prog, GLBatchElement* glBatchElement, size_t primOffset);
102 
107  void UpdateShaders(vtkOpenGLHelper& cellBO, vtkRenderer* renderer, vtkActor* actor) override;
108 
113  void ReplaceShaderColor(
114  std::map<vtkShader::Type, vtkShader*> shaders, vtkRenderer* renderer, vtkActor* actor) override;
115 
119  bool GetNeedToRebuildBufferObjects(vtkRenderer* renderer, vtkActor* actor) override;
120 
124  void BuildBufferObjects(vtkRenderer* renderer, vtkActor* actor) override;
125  virtual void AppendOneBufferObject(vtkRenderer* renderer, vtkActor* actor,
126  GLBatchElement* glBatchElement, vtkIdType& vertexOffset, std::vector<unsigned char>& colors,
127  std::vector<float>& norms);
128 
132  void BuildSelectionIBO(
133  vtkPolyData* poly, std::vector<unsigned int> (&indices)[4], vtkIdType offset) override;
134 
141 
147  std::vector<texinfo> GetTextures(vtkActor* actor) override;
148 
149  // Reference to CPDM
150  vtkCompositePolyDataMapper* Parent = nullptr;
151  // Maps an address of a vtkPolyData to its rendering attributes.
152  std::map<std::uintptr_t, std::unique_ptr<GLBatchElement>> VTKPolyDataToGLBatchElement;
153  std::map<unsigned int, std::uintptr_t> FlatIndexToPolyData;
154  // Index arrays for vert, line, poly, strip, edge, stripedge
155  std::vector<unsigned int> IndexArray[PrimitiveEnd];
156  // Whether primitive IDs are used
158  // Whether override color is used for a vtkPolyData
160  // Reference to the current selector.
162  // used by the hardware selector
163  std::vector<std::vector<unsigned int>> PickPixels;
164  // cached array map
165  std::map<vtkAbstractArray*, vtkDataArray*> ColorArrayMap;
166 
167 private:
169  void operator=(const vtkOpenGLBatchedPolyDataMapper&) = delete;
170 
177  vtkSmartPointer<vtkOpenGLTexture> BlockTexturePrototype;
178 };
179 
180 VTK_ABI_NAMESPACE_END
181 #endif
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:49
virtual void RenderPieceDraw(vtkRenderer *ren, vtkActor *act)
Implemented by sub classes.
PolyDataMapper using OpenGL to render.
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:41
static vtkOpenGLPolyDataMapper * New()
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:318
virtual std::vector< texinfo > GetTextures(vtkActor *actor)
Recover current texture informations on the provided actor into a vector.
virtual void BuildSelectionIBO(vtkPolyData *poly, std::vector< unsigned int >(&indices)[4], vtkIdType offset)
Build the selection IBO, called by UpdateBufferObjects.
An OpenGL mapper for batched rendering of vtkPolyData.
abstract specification for renderers
Definition: vtkRenderer.h:63
virtual void UpdateShaders(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
Make sure appropriate shaders are defined, compiled and bound.
int vtkIdType
Definition: vtkType.h:363
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:71
vtkCompositePolyDataMapperDelegator::BatchElement BatchElement
virtual int CanUseTextureMapForColoring(vtkDataObject *input)
Returns if we can use texture maps for scalar coloring.
virtual bool GetNeedToRebuildBufferObjects(vtkRenderer *ren, vtkActor *act)
Does the VBO/IBO need to be rebuilt.
a simple class to control print indentation
Definition: vtkIndent.h:28
void ProcessSelectorPixelBuffers(vtkHardwareSelector *sel, std::vector< unsigned int > &pixeloffsets, vtkProp *prop) override
allows a mapper to update a selections color buffers Called from a prop which in turn is called from ...
void RenderPiece(vtkRenderer *ren, vtkActor *act) override
Implemented by sub classes.
vtkMTimeType GetMTime() override
Overload standard modified time function.
std::map< unsigned int, std::uintptr_t > FlatIndexToPolyData
virtual void ReplaceShaderColor(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
Perform string replacements on the shader templates, called from ReplaceShaderValues.
virtual void RenderPieceStart(vtkRenderer *ren, vtkActor *act)
Implemented by sub classes.
virtual void UpdateCameraShiftScale(vtkRenderer *ren, vtkActor *actor)
virtual void BuildBufferObjects(vtkRenderer *ren, vtkActor *act)
Build the VBO/IBO, called by UpdateBufferObjects.
std::map< std::uintptr_t, std::unique_ptr< GLBatchElement > > VTKPolyDataToGLBatchElement
std::map< vtkAbstractArray *, vtkDataArray * > ColorArrayMap
general representation of visualization data
Definition: vtkDataObject.h:55
std::vector< std::vector< unsigned int > > PickPixels
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
a class that renders hierarchical polygonal data
The ShaderProgram uses one or more Shader objects.