VTK  9.7.1
vtkOpenGLLowMemoryBatchedPolyDataMapper.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 
14 #ifndef vtkOpenGLLowMemoryBatchedPolyDataMapper_h
15 #define vtkOpenGLLowMemoryBatchedPolyDataMapper_h
16 
17 #include "vtkBoundingBox.h"
19 
20 #include "vtkColor.h" // class uses vtkColor
21 #include "vtkNew.h" // for ivar
22 #include "vtkOpenGLCompositePolyDataMapperDelegator.h" // for struct BatchElement
23 #include "vtkRenderingOpenGL2Module.h" // for export macro
24 #include "vtkSmartPointer.h" // for arg
25 #include "vtk_glad.h" // for OpenGL defs
26 
27 #include <cstdint> // for std::uintptr_t
28 #include <memory> // for shared_ptr
29 
30 VTK_ABI_NAMESPACE_BEGIN
32 class vtkPolyData;
33 
34 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLLowMemoryBatchedPolyDataMapper
36 {
37 public:
40  void PrintSelf(ostream& os, vtkIndent indent) override;
41 
43 
48  {
50  std::size_t CellGroupId;
51  };
52  void AddBatchElement(unsigned int flatIndex, BatchElement&& batchElement);
53  BatchElement* GetBatchElement(vtkPolyData* polydata);
54  void ClearBatchElements();
56 
60  std::vector<vtkPolyData*> GetRenderedList() const;
61  void SetParent(vtkCompositePolyDataMapper* parent);
62 
66  void RenderPiece(vtkRenderer* renderer, vtkActor* actor) override;
67  void UnmarkBatchElements();
68  void ClearUnmarkedBatchElements();
69 
75  vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
76 
77  virtual void ProcessCompositePixelBuffers(vtkHardwareSelector* sel, vtkProp* prop,
78  GLBatchElement* glBatchElement, std::vector<unsigned int>& mypixels);
79 
83  vtkMTimeType GetMTime() override;
84 
85 protected:
88 
89  void RenderPieceStart(vtkRenderer* renderer, vtkActor* actor) override;
90  void RenderPieceDraw(vtkRenderer* renderer, vtkActor* actor) override;
91 
92  bool IsDataObjectUpToDate() override;
93  vtkDataArray* GetColors(vtkPolyData* mesh) override;
94  bool BindArraysToTextureBuffers(vtkRenderer* renderer, vtkActor* actor,
96  bool IsShaderColorSourceUpToDate(vtkActor* actor) override;
97  bool IsShaderNormalSourceUpToDate(vtkActor* actor) override;
98  void UpdateShaders(vtkRenderer* renderer, vtkActor* actor) override;
99  void UpdateShiftScale(vtkRenderer* renderer, vtkActor* actor) override;
100  void ReplaceShaderColor(
101  vtkRenderer* renderer, vtkActor* actor, std::string& vsSource, std::string& fsSource) override;
103 
104  void DrawPrimitives(vtkRenderer* renderer, vtkActor*, PrimitiveInformation& primitive);
108  virtual void SetShaderValues(GLBatchElement* glBatchElement);
109 
110  std::vector<TextureInfo> GetTextures(vtkActor* actor) override;
111 
112  // Reference to CPDM
113  vtkCompositePolyDataMapper* Parent = nullptr;
114  // Maps an address of a vtkPolyData to its rendering attributes.
115  std::map<std::uintptr_t, std::unique_ptr<GLBatchElement>> VTKPolyDataToGLBatchElement;
116  // Whether override color is used for a vtkPolyData
118  // Reference to the current selector.
119  vtkHardwareSelector* CurrentSelector = nullptr;
120  // used by the hardware selector
121  std::vector<std::vector<unsigned int>> PickPixels;
122  // cached array map
123  std::map<vtkAbstractArray*, vtkDataArray*> ColorArrayMap;
124  // cached bbox of all points
126 
128 
129 private:
131  void operator=(const vtkOpenGLLowMemoryBatchedPolyDataMapper&) = delete;
132 };
133 
134 VTK_ABI_NAMESPACE_END
135 #endif
virtual void UpdateShaders(vtkRenderer *renderer, vtkActor *actor)
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
vtkTypeUInt32 vtkMTimeType
Definition: vtkType.h:318
virtual void UpdateShiftScale(vtkRenderer *renderer, vtkActor *actor)
abstract specification for renderers
Definition: vtkRenderer.h:63
virtual void RenderPieceStart(vtkRenderer *renderer, vtkActor *actor)
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:71
vtkCompositePolyDataMapperDelegator::BatchElement BatchElement
An OpenGL mapper for batched rendering of vtkPolyData.
virtual int CanUseTextureMapForColoring(vtkDataObject *input)
Returns if we can use texture maps for scalar coloring.
std::map< std::uintptr_t, std::unique_ptr< GLBatchElement > > VTKPolyDataToGLBatchElement
PolyDataMapper using OpenGL to render surface meshes.
virtual bool IsShaderNormalSourceUpToDate(vtkActor *actor)
virtual void RenderPieceDraw(vtkRenderer *renderer, vtkActor *actor)
virtual bool IsShaderColorSourceUpToDate(vtkActor *actor)
static vtkOpenGLLowMemoryPolyDataMapper * New()
a simple class to control print indentation
Definition: vtkIndent.h:28
void PrintSelf(ostream &os, vtkIndent indent) override
Methods invoked by print to print information about the object including superclasses.
abstract superclass for arrays of numeric data
Definition: vtkDataArray.h:44
void RenderPiece(vtkRenderer *renderer, vtkActor *actor) override
Implemented by sub classes.
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 ...
vtkMTimeType GetMTime() override
Overload standard modified time function.
std::map< vtkAbstractArray *, vtkDataArray * > ColorArrayMap
virtual vtkDataArray * GetColors(vtkPolyData *mesh)
virtual void ReplaceShaderColor(vtkRenderer *renderer, vtkActor *actor, std::string &vsSource, std::string &fsSource)
virtual std::vector< TextureInfo > GetTextures(vtkActor *actor)
std::vector< std::vector< unsigned int > > PickPixels
virtual bool BindArraysToTextureBuffers(vtkRenderer *renderer, vtkActor *actor, vtkCellGraphicsPrimitiveMap::CellTypeMapperOffsets &offsets)
general representation of visualization data
Definition: vtkDataObject.h:55
Fast, simple class for representing and operating on 3D bounds.
a class that renders hierarchical polygonal data