VTK  9.0.1
vtkCompositePolyDataMapper2Internal.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkCameraPass.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
15 
16 #ifndef vtkCompositeMapperHelper2_h
17 #define vtkCompositeMapperHelper2_h
18 
19 #ifndef __VTK_WRAP__
20 
21 #include "vtkColor.h"
22 #include "vtkOpenGL.h"
24 #include "vtkRenderingOpenGL2Module.h"
25 
26 class vtkPolyData;
28 
29 // this class encapsulates values tied to a
30 // polydata
32 {
33 public:
35  unsigned int FlatIndex;
36  double Opacity;
37  bool IsOpaque;
38  bool Visibility;
43 
44  bool Marked;
45 
46  unsigned int StartVertex;
47  unsigned int NextVertex;
48 
49  // point line poly strip edge stripedge
52 
53  // stores the mapping from vtk cells to gl_PrimitiveId
55 };
56 
57 //===================================================================
58 // We define a helper class that is a subclass of vtkOpenGLPolyDataMapper
59 class VTKRENDERINGOPENGL2_EXPORT vtkCompositeMapperHelper2 : public vtkOpenGLPolyDataMapper
60 {
61 public:
64 
65  void SetParent(vtkCompositePolyDataMapper2* p) { this->Parent = p; }
66 
67  vtkCompositeMapperHelperData* AddData(vtkPolyData* pd, unsigned int flatIndex);
68 
69  // Description:
70  // Implemented by sub classes. Actual rendering is done here.
71  void RenderPiece(vtkRenderer* ren, vtkActor* act) override;
72 
73  // keep track of what data is being used as the multiblock
74  // can change
75  void ClearMark();
76  void RemoveUnused();
77  bool GetMarked() { return this->Marked; }
78  void SetMarked(bool v) { this->Marked = v; }
79 
83  std::vector<vtkPolyData*> GetRenderedList() { return this->RenderedList; }
84 
90  vtkHardwareSelector* sel, std::vector<unsigned int>& pixeloffsets, vtkProp* prop) override;
91 
92  virtual void ProcessCompositePixelBuffers(vtkHardwareSelector* sel, vtkProp* prop,
93  vtkCompositeMapperHelperData* hdata, std::vector<unsigned int>& mypixels);
94 
95 protected:
97  std::map<vtkPolyData*, vtkCompositeMapperHelperData*> Data;
98 
99  bool Marked;
100 
101  vtkCompositeMapperHelper2() { this->Parent = nullptr; };
102  ~vtkCompositeMapperHelper2() override;
103 
104  void DrawIBO(vtkRenderer* ren, vtkActor* actor, int primType, vtkOpenGLHelper& CellBO,
105  GLenum mode, int pointSize);
106 
107  virtual void SetShaderValues(
108  vtkShaderProgram* prog, vtkCompositeMapperHelperData* hdata, size_t primOffset);
109 
114  void UpdateShaders(vtkOpenGLHelper& cellBO, vtkRenderer* ren, vtkActor* act) override;
115 
116  // Description:
117  // Perform string replacements on the shader templates, called from
118  // ReplaceShaderValues
119  void ReplaceShaderColor(
120  std::map<vtkShader::Type, vtkShader*> shaders, vtkRenderer* ren, vtkActor* act) override;
121 
122  // Description:
123  // Build the VBO/IBO, called by UpdateBufferObjects
124  void BuildBufferObjects(vtkRenderer* ren, vtkActor* act) override;
125  virtual void AppendOneBufferObject(vtkRenderer* ren, vtkActor* act,
126  vtkCompositeMapperHelperData* hdata, vtkIdType& flat_index, std::vector<unsigned char>& colors,
127  std::vector<float>& norms);
128 
129  // Description:
130  // Returns if we can use texture maps for scalar coloring. Note this doesn't
131  // say we "will" use scalar coloring. It says, if we do use scalar coloring,
132  // we will use a texture. Always off for this mapper.
134 
135  std::vector<unsigned int> VertexOffsets;
136 
137  // vert line poly strip edge stripedge
138  std::vector<unsigned int> IndexArray[PrimitiveEnd];
139 
140  void RenderPieceDraw(vtkRenderer* ren, vtkActor* act) override;
141 
144 
146 
147  // bookkeeping required by vtkValuePass
148  std::vector<vtkPolyData*> RenderedList;
149 
150  // used by the hardware selector
151  std::vector<std::vector<unsigned int> > PickPixels;
152 
153  std::map<vtkAbstractArray*, vtkDataArray*> ColorArrayMap;
154 
155 private:
157  void operator=(const vtkCompositeMapperHelper2&) = delete;
158 };
159 
160 #endif
161 
162 #endif
163 // VTK-HeaderTest-Exclude: vtkCompositePolyDataMapper2Internal.h
vtkOpenGLPolyDataMapper::BuildBufferObjects
virtual void BuildBufferObjects(vtkRenderer *ren, vtkActor *act)
Build the VBO/IBO, called by UpdateBufferObjects.
vtkCompositeMapperHelperData::NextVertex
unsigned int NextVertex
Definition: vtkCompositePolyDataMapper2Internal.h:47
vtkCompositeMapperHelper2::Data
std::map< vtkPolyData *, vtkCompositeMapperHelperData * > Data
Definition: vtkCompositePolyDataMapper2Internal.h:97
vtkCompositeMapperHelperData::StartVertex
unsigned int StartVertex
Definition: vtkCompositePolyDataMapper2Internal.h:46
vtkCompositeMapperHelperData::AmbientColor
vtkColor3d AmbientColor
Definition: vtkCompositePolyDataMapper2Internal.h:41
vtkCompositeMapperHelper2::SetParent
void SetParent(vtkCompositePolyDataMapper2 *p)
Definition: vtkCompositePolyDataMapper2Internal.h:65
vtkOpenGLPolyDataMapper::UpdateShaders
virtual void UpdateShaders(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
Make sure appropriate shaders are defined, compiled and bound.
vtkIdType
int vtkIdType
Definition: vtkType.h:338
vtkCompositeMapperHelper2::OverideColorUsed
bool OverideColorUsed
Definition: vtkCompositePolyDataMapper2Internal.h:143
vtkCompositeMapperHelperData::FlatIndex
unsigned int FlatIndex
Definition: vtkCompositePolyDataMapper2Internal.h:35
vtkCompositeMapperHelperData::Data
vtkPolyData * Data
Definition: vtkCompositePolyDataMapper2Internal.h:34
vtkCompositeMapperHelperData::NextIndex
unsigned int NextIndex[vtkOpenGLPolyDataMapper::PrimitiveEnd]
Definition: vtkCompositePolyDataMapper2Internal.h:51
vtkOpenGLPolyDataMapper::New
static vtkOpenGLPolyDataMapper * New()
vtkOpenGLPolyDataMapper::RenderPieceDraw
virtual void RenderPieceDraw(vtkRenderer *ren, vtkActor *act)
vtkMapper::CanUseTextureMapForColoring
virtual int CanUseTextureMapForColoring(vtkDataObject *input)
Returns if we can use texture maps for scalar coloring.
vtkCompositeMapperHelper2::SetMarked
void SetMarked(bool v)
Definition: vtkCompositePolyDataMapper2Internal.h:78
vtkCompositePolyDataMapper2
mapper for composite dataset consisting of polygonal data.
Definition: vtkCompositePolyDataMapper2.h:47
vtkCompositeMapperHelperData
Definition: vtkCompositePolyDataMapper2Internal.h:31
vtkCompositeMapperHelper2::CurrentSelector
vtkHardwareSelector * CurrentSelector
Definition: vtkCompositePolyDataMapper2Internal.h:145
vtkCompositeMapperHelperData::Marked
bool Marked
Definition: vtkCompositePolyDataMapper2Internal.h:44
vtkOpenGLPolyDataMapper::PrimitiveEnd
@ PrimitiveEnd
Definition: vtkOpenGLPolyDataMapper.h:201
vtkCompositeMapperHelper2::Marked
bool Marked
Definition: vtkCompositePolyDataMapper2Internal.h:99
vtkCompositeMapperHelper2
Definition: vtkCompositePolyDataMapper2Internal.h:59
vtkCompositeMapperHelperData::DiffuseColor
vtkColor3d DiffuseColor
Definition: vtkCompositePolyDataMapper2Internal.h:42
vtkCompositeMapperHelper2::PickPixels
std::vector< std::vector< unsigned int > > PickPixels
Definition: vtkCompositePolyDataMapper2Internal.h:151
vtkShaderProgram
The ShaderProgram uses one or more Shader objects.
Definition: vtkShaderProgram.h:44
vtkHardwareSelector
Definition: vtkHardwareSelector.h:123
vtkColor.h
vtkOpenGLHelper
Definition: vtkOpenGLHelper.h:30
vtkActor
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:45
vtkCompositeMapperHelperData::CellCellMap
vtkNew< vtkOpenGLCellToVTKCellMap > CellCellMap
Definition: vtkCompositePolyDataMapper2Internal.h:54
vtkCompositeMapperHelperData::Opacity
double Opacity
Definition: vtkCompositePolyDataMapper2Internal.h:36
vtkCompositeMapperHelper2::ColorArrayMap
std::map< vtkAbstractArray *, vtkDataArray * > ColorArrayMap
Definition: vtkCompositePolyDataMapper2Internal.h:153
vtkCompositeMapperHelperData::IsOpaque
bool IsOpaque
Definition: vtkCompositePolyDataMapper2Internal.h:37
vtkNew< vtkOpenGLCellToVTKCellMap >
vtkCompositeMapperHelperData::StartIndex
unsigned int StartIndex[vtkOpenGLPolyDataMapper::PrimitiveEnd]
Definition: vtkCompositePolyDataMapper2Internal.h:50
vtkCompositeMapperHelper2::RenderedList
std::vector< vtkPolyData * > RenderedList
Definition: vtkCompositePolyDataMapper2Internal.h:148
vtkProp
abstract superclass for all actors, volumes and annotations
Definition: vtkProp.h:53
vtkCompositeMapperHelperData::Pickability
bool Pickability
Definition: vtkCompositePolyDataMapper2Internal.h:39
vtkOpenGLPolyDataMapper::RenderPiece
void RenderPiece(vtkRenderer *ren, vtkActor *act) override
Implemented by sub classes.
vtkColor3d
Definition: vtkColor.h:246
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:67
vtkCompositeMapperHelperData::Visibility
bool Visibility
Definition: vtkCompositePolyDataMapper2Internal.h:38
vtkOpenGLPolyDataMapper::ProcessSelectorPixelBuffers
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 ...
vtkCompositeMapperHelper2::vtkCompositeMapperHelper2
vtkCompositeMapperHelper2()
Definition: vtkCompositePolyDataMapper2Internal.h:101
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:84
vtkCompositeMapperHelper2::VertexOffsets
std::vector< unsigned int > VertexOffsets
Definition: vtkCompositePolyDataMapper2Internal.h:135
vtkCompositeMapperHelper2::GetMarked
bool GetMarked()
Definition: vtkCompositePolyDataMapper2Internal.h:77
vtkX3D::mode
@ mode
Definition: vtkX3D.h:253
vtkCompositeMapperHelper2::Parent
vtkCompositePolyDataMapper2 * Parent
Definition: vtkCompositePolyDataMapper2Internal.h:96
vtkOpenGLPolyDataMapper::ReplaceShaderColor
virtual void ReplaceShaderColor(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkDataObject
general representation of visualization data
Definition: vtkDataObject.h:59
vtkOpenGLPolyDataMapper.h
vtkOpenGLPolyDataMapper
PolyDataMapper using OpenGL to render.
Definition: vtkOpenGLPolyDataMapper.h:57
vtkCompositeMapperHelperData::OverridesColor
bool OverridesColor
Definition: vtkCompositePolyDataMapper2Internal.h:40
vtkCompositeMapperHelper2::GetRenderedList
std::vector< vtkPolyData * > GetRenderedList()
Accessor to the ordered list of PolyData that we last drew.
Definition: vtkCompositePolyDataMapper2Internal.h:83
vtkOpenGL.h
vtkCompositeMapperHelper2::PrimIDUsed
bool PrimIDUsed
Definition: vtkCompositePolyDataMapper2Internal.h:142