VTK
vtkOpenGLPolyDataMapper.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4 
5  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
6  All rights reserved.
7  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
8 
9  This software is distributed WITHOUT ANY WARRANTY; without even
10  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
11  PURPOSE. See the above copyright notice for more information.
12 
13 =========================================================================*/
23 #ifndef vtkOpenGLPolyDataMapper_h
24 #define vtkOpenGLPolyDataMapper_h
25 
26 #include "vtkRenderingOpenGL2Module.h" // For export macro
27 #include "vtkPolyDataMapper.h"
28 #include "vtkShader.h" // for methods
29 #include "vtkOpenGLHelper.h" // used for ivars
30 #include <vector> //for ivars
31 #include <map> //for methods
32 
33 class vtkCellArray;
34 class vtkMatrix4x4;
35 class vtkMatrix3x3;
36 class vtkOpenGLTexture;
39 class vtkTextureObject;
40 
41 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLPolyDataMapper : public vtkPolyDataMapper
42 {
43 public:
46  void PrintSelf(ostream& os, vtkIndent indent);
47 
49  virtual void RenderPiece(vtkRenderer *ren, vtkActor *act);
50 
52 
53  virtual void RenderPieceStart(vtkRenderer *ren, vtkActor *act);
54  virtual void RenderPieceDraw(vtkRenderer *ren, vtkActor *act);
55  virtual void RenderPieceFinish(vtkRenderer *ren, vtkActor *act);
56  virtual void RenderEdges(vtkRenderer *ren, vtkActor *act);
58 
62  void ReleaseGraphicsResources(vtkWindow *);
63 
64  vtkGetMacro(PopulateSelectionSettings,int);
65  void SetPopulateSelectionSettings(int v) { this->PopulateSelectionSettings = v; };
66 
71  virtual bool GetSupportsSelection() { return true; }
72 
81  virtual bool GetIsOpaque();
82 
83  // used by RenderPiece and functions it calls to reduce
84  // calls to get the input and allow for rendering of
85  // other polydata (not the input)
87 
89 
94  vtkSetStringMacro(PointIdArrayName);
95  vtkGetStringMacro(PointIdArrayName);
96  vtkSetStringMacro(CellIdArrayName);
97  vtkGetStringMacro(CellIdArrayName);
99 
101 
104  vtkSetStringMacro(ProcessIdArrayName);
105  vtkGetStringMacro(ProcessIdArrayName);
107 
109 
116  vtkSetStringMacro(CompositeIdArrayName);
117  vtkGetStringMacro(CompositeIdArrayName);
119 
120  // the following is all extra stuff to work around the
121  // fact that gl_PrimitiveID does not work correctly on
122  // Apple devices with AMD graphics hardware. See apple
123  // bug ID 20747550
125  vtkPolyData *poly,
126  std::vector<float> &buffData);
127 
128 protected:
131 
132  // the following is all extra stuff to work around the
133  // fact that gl_PrimitiveID does not work correctly on
134  // Apple devices with AMD graphics hardware. See apple
135  // bug ID 20747550
137  std::vector<float> AppleBugPrimIDs;
139 
144  virtual void ComputeBounds();
145 
147 
150  virtual void UpdateShaders(
151  vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act);
153 
155 
157  vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act);
159 
161 
162  virtual void BuildShaders(
163  std::map<vtkShader::Type, vtkShader *> shaders,
164  vtkRenderer *ren, vtkActor *act);
166 
168 
169  virtual void GetShaderTemplate(
170  std::map<vtkShader::Type, vtkShader *> shaders,
171  vtkRenderer *ren, vtkActor *act);
173 
175 
176  virtual void ReplaceShaderValues(
177  std::map<vtkShader::Type, vtkShader *> shaders,
178  vtkRenderer *ren, vtkActor *act);
180 
182 
184  virtual void ReplaceShaderColor(
185  std::map<vtkShader::Type, vtkShader *> shaders,
186  vtkRenderer *ren, vtkActor *act);
187  virtual void ReplaceShaderLight(
188  std::map<vtkShader::Type, vtkShader *> shaders,
189  vtkRenderer *ren, vtkActor *act);
190  virtual void ReplaceShaderTCoord(
191  std::map<vtkShader::Type, vtkShader *> shaders,
192  vtkRenderer *ren, vtkActor *act);
193  virtual void ReplaceShaderPicking(
194  std::map<vtkShader::Type, vtkShader *> shaders,
195  vtkRenderer *ren, vtkActor *act);
197  std::map<vtkShader::Type, vtkShader *> shaders,
198  vtkRenderer *ren, vtkActor *act);
199  virtual void ReplaceShaderPrimID(
200  std::map<vtkShader::Type, vtkShader *> shaders,
201  vtkRenderer *ren, vtkActor *act);
202  virtual void ReplaceShaderNormal(
203  std::map<vtkShader::Type, vtkShader *> shaders,
204  vtkRenderer *ren, vtkActor *act);
205  virtual void ReplaceShaderClip(
206  std::map<vtkShader::Type, vtkShader *> shaders,
207  vtkRenderer *ren, vtkActor *act);
209  std::map<vtkShader::Type, vtkShader *> shaders,
210  vtkRenderer *ren, vtkActor *act);
212 
216 
220 
224 
228 
230  virtual void UpdateBufferObjects(vtkRenderer *ren, vtkActor *act);
231 
234 
236  virtual void BuildBufferObjects(vtkRenderer *ren, vtkActor *act);
237 
239  virtual void BuildIBO(vtkRenderer *ren, vtkActor *act, vtkPolyData *poly);
240 
241  // The VBO and its layout.
243 
244  // Structures for the various cell types we render.
253 
254  // do we have wide lines that require special handling
255  virtual bool HaveWideLines(vtkRenderer *, vtkActor *);
256 
257  // values we use to determine if we need to rebuild
260 
263 
266 
268  vtkTimeStamp VBOBuildTime; // When was the OpenGL VBO updated?
269  vtkOpenGLTexture* InternalColorTexture;
270 
273 
276 
277  // this vector can be used while building
278  // the shader program to record specific variables
279  // that are being used by the program. This is
280  // useful later on when setting uniforms. At
281  // that point IsShaderVariableUsed can be called
282  // to see if the uniform should be set or not.
283  std::vector<std::string> ShaderVariablesUsed;
284 
285  // used to see if the shader building code indicated that
286  // a specific variable is being used. Only some variables
287  // are currently populated.
288  bool IsShaderVariableUsed(const char *);
289 
290  // if set to true, tcoords will be passed to the
291  // VBO even if the mapper knows of no texture maps
292  // normally tcoords are only added to the VBO if the
293  // mapper has indentified a texture map as well.
295 
297  vtkRenderer *ren,
298  vtkActor *,
299  vtkCellArray *prims[4],
300  int representation);
301 
303  vtkRenderer *ren,
304  vtkActor *,
305  vtkCellArray *prims[4],
306  int representation,
307  std::vector<unsigned char> &colors,
308  std::vector<float> &normals,
309  vtkPolyData *pd);
310 
318 
319  // aditional picking indirection
324 
326 
327 private:
328  vtkOpenGLPolyDataMapper(const vtkOpenGLPolyDataMapper&); // Not implemented.
329  void operator=(const vtkOpenGLPolyDataMapper&); // Not implemented.
330 };
331 
332 #endif
vtkPolyDataMapper
map vtkPolyData to graphics primitives
Definition: vtkPolyDataMapper.h:42
vtkOpenGLPolyDataMapper::BuildBufferObjects
virtual void BuildBufferObjects(vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::IsShaderVariableUsed
bool IsShaderVariableUsed(const char *)
vtkOpenGLPolyDataMapper::TriStripsEdges
vtkOpenGLHelper TriStripsEdges
Definition: vtkOpenGLPolyDataMapper.h:250
vtkOpenGLPolyDataMapper::CompositeIdArrayName
char * CompositeIdArrayName
Definition: vtkOpenGLPolyDataMapper.h:323
vtkOpenGLPolyDataMapper::ForceTextureCoordinates
bool ForceTextureCoordinates
Definition: vtkOpenGLPolyDataMapper.h:294
vtkOpenGLPolyDataMapper::DrawingEdges
bool DrawingEdges
Definition: vtkOpenGLPolyDataMapper.h:252
vtkOpenGLPolyDataMapper::TrisEdges
vtkOpenGLHelper TrisEdges
Definition: vtkOpenGLPolyDataMapper.h:249
vtkOpenGLPolyDataMapper::UsingScalarColoring
bool UsingScalarColoring
Definition: vtkOpenGLPolyDataMapper.h:267
vtkOpenGLPolyDataMapper::VBO
vtkOpenGLVertexBufferObject * VBO
Definition: vtkOpenGLPolyDataMapper.h:242
vtkOpenGLBufferObject
OpenGL buffer object.
Definition: vtkOpenGLBufferObject.h:33
vtkShader.h
vtkOpenGLPolyDataMapper::ReplaceShaderValues
virtual void ReplaceShaderValues(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::UpdateShaders
virtual void UpdateShaders(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::ReplaceShaderLight
virtual void ReplaceShaderLight(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::BuildIBO
virtual void BuildIBO(vtkRenderer *ren, vtkActor *act, vtkPolyData *poly)
vtkTimeStamp
record modification and/or execution time
Definition: vtkTimeStamp.h:35
vtkOpenGLPolyDataMapper::ReplaceShaderDepthPeeling
virtual void ReplaceShaderDepthPeeling(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLHelper.h
vtkTypeMacro
#define vtkTypeMacro(thisClass, superclass)
Definition: vtkSetGet.h:642
vtkOpenGLPolyDataMapper::LightComplexityChanged
vtkTimeStamp LightComplexityChanged
Definition: vtkOpenGLPolyDataMapper.h:259
vtkOpenGLPolyDataMapper::AppleBugPrimIDs
std::vector< float > AppleBugPrimIDs
Definition: vtkOpenGLPolyDataMapper.h:137
vtkOpenGLPolyDataMapper::GetNeedToRebuildBufferObjects
virtual bool GetNeedToRebuildBufferObjects(vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::New
static vtkOpenGLPolyDataMapper * New()
vtkOpenGLPolyDataMapper::PrimitiveIDOffset
int PrimitiveIDOffset
Definition: vtkOpenGLPolyDataMapper.h:272
vtkgl::v
const GLdouble * v
Definition: vtkgl.h:11595
vtkOpenGLPolyDataMapper::ShaderVariablesUsed
std::vector< std::string > ShaderVariablesUsed
Definition: vtkOpenGLPolyDataMapper.h:283
vtkOpenGLPolyDataMapper::ReplaceShaderPositionVC
virtual void ReplaceShaderPositionVC(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::SetLightingShaderParameters
virtual void SetLightingShaderParameters(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
vtkMatrix3x3
represent and manipulate 3x3 transformation matrices
Definition: vtkMatrix3x3.h:36
vtkOpenGLPolyDataMapper::BuildShaders
virtual void BuildShaders(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::GetShaderTemplate
virtual void GetShaderTemplate(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::LastSelectionState
int LastSelectionState
Definition: vtkOpenGLPolyDataMapper.h:261
vtkWindow
window superclass for vtkRenderWindow
Definition: vtkWindow.h:34
vtkgl::shaders
const GLuint * shaders
Definition: vtkgl.h:14179
vtkOpenGLPolyDataMapper::ReplaceShaderClip
virtual void ReplaceShaderClip(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::CellNormalTexture
vtkTextureObject * CellNormalTexture
Definition: vtkOpenGLPolyDataMapper.h:315
vtkOpenGLPolyDataMapper::~vtkOpenGLPolyDataMapper
~vtkOpenGLPolyDataMapper()
vtkOpenGLPolyDataMapper::LastBoundBO
vtkOpenGLHelper * LastBoundBO
Definition: vtkOpenGLPolyDataMapper.h:251
vtkOpenGLPolyDataMapper::Lines
vtkOpenGLHelper Lines
Definition: vtkOpenGLPolyDataMapper.h:246
vtkOpenGLPolyDataMapper::SetPropertyShaderParameters
virtual void SetPropertyShaderParameters(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::ReplaceShaderPicking
virtual void ReplaceShaderPicking(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::UpdateBufferObjects
virtual void UpdateBufferObjects(vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::VBOBuildTime
vtkTimeStamp VBOBuildTime
Definition: vtkOpenGLPolyDataMapper.h:268
vtkOpenGLPolyDataMapper::CurrentInput
vtkPolyData * CurrentInput
Definition: vtkOpenGLPolyDataMapper.h:86
vtkOpenGLPolyDataMapper::ComputeBounds
virtual void ComputeBounds()
vtkOpenGLPolyDataMapper::CellNormalBuffer
vtkOpenGLBufferObject * CellNormalBuffer
Definition: vtkOpenGLPolyDataMapper.h:316
vtkOpenGLPolyDataMapper::GetIsOpaque
virtual bool GetIsOpaque()
vtkOpenGLHelper
Definition: vtkOpenGLHelper.h:31
vtkActor
represents an object (geometry & properties) in a rendered scene
Definition: vtkActor.h:51
vtkIndent
a simple class to control print indentation
Definition: vtkIndent.h:39
vtkTextureObject
abstracts an OpenGL texture object.
Definition: vtkTextureObject.h:40
vtkMatrix4x4
represent and manipulate 4x4 transformation matrices
Definition: vtkMatrix4x4.h:39
vtkOpenGLPolyDataMapper::SetCameraShaderParameters
virtual void SetCameraShaderParameters(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
vtkCellArray
object to represent cell connectivity
Definition: vtkCellArray.h:50
vtkSetStringMacro
#define vtkSetStringMacro(name)
Definition: vtkSetGet.h:104
vtkOpenGLPolyDataMapper::HavePickScalars
bool HavePickScalars
Definition: vtkOpenGLPolyDataMapper.h:311
vtkOpenGLPolyDataMapper::DepthPeelingChanged
vtkTimeStamp DepthPeelingChanged
Definition: vtkOpenGLPolyDataMapper.h:265
vtkOpenGLPolyDataMapper::HaveCellNormals
bool HaveCellNormals
Definition: vtkOpenGLPolyDataMapper.h:317
vtkOpenGLPolyDataMapper::HaveWideLines
virtual bool HaveWideLines(vtkRenderer *, vtkActor *)
vtkOpenGLPolyDataMapper::HaveCellScalars
bool HaveCellScalars
Definition: vtkOpenGLPolyDataMapper.h:314
vtkOpenGLVertexBufferObject
Definition: vtkOpenGLVertexBufferObject.h:38
vtkOpenGLPolyDataMapper::LastDepthPeeling
int LastDepthPeeling
Definition: vtkOpenGLPolyDataMapper.h:264
vtkOpenGLPolyDataMapper::PopulateSelectionSettings
int PopulateSelectionSettings
Definition: vtkOpenGLPolyDataMapper.h:271
vtkGetMacro
#define vtkGetMacro(name, type)
Definition: vtkSetGet.h:93
vtkOpenGLPolyDataMapper::BuildCellTextures
void BuildCellTextures(vtkRenderer *ren, vtkActor *, vtkCellArray *prims[4], int representation)
vtkOpenGLPolyDataMapper::Tris
vtkOpenGLHelper Tris
Definition: vtkOpenGLPolyDataMapper.h:247
vtkGetStringMacro
vtkGetStringMacro(ExtensionsString)
vtkOpenGLPolyDataMapper::ReplaceShaderTCoord
virtual void ReplaceShaderTCoord(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::HandleAppleBug
static vtkPolyData * HandleAppleBug(vtkPolyData *poly, std::vector< float > &buffData)
vtkOpenGLPolyDataMapper::ReplaceShaderNormal
virtual void ReplaceShaderNormal(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::vtkOpenGLPolyDataMapper
vtkOpenGLPolyDataMapper()
vtkOpenGLPolyDataMapper::TriStrips
vtkOpenGLHelper TriStrips
Definition: vtkOpenGLPolyDataMapper.h:248
vtkOpenGLPolyDataMapper::TextureComponents
int TextureComponents
Definition: vtkOpenGLPolyDataMapper.h:325
vtkOpenGLPolyDataMapper::TempMatrix4
vtkMatrix4x4 * TempMatrix4
Definition: vtkOpenGLPolyDataMapper.h:274
vtkOpenGLPolyDataMapper::LastLightComplexity
int LastLightComplexity
Definition: vtkOpenGLPolyDataMapper.h:258
vtkRenderer
abstract specification for renderers
Definition: vtkRenderer.h:64
vtkOpenGLPolyDataMapper::SetMapperShaderParameters
virtual void SetMapperShaderParameters(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
vtkPolyData
concrete dataset represents vertices, lines, polygons, and triangle strips
Definition: vtkPolyData.h:84
vtkPolyDataMapper.h
vtkOpenGLPolyDataMapper::AppleBugPrimIDBuffer
vtkOpenGLBufferObject * AppleBugPrimIDBuffer
Definition: vtkOpenGLPolyDataMapper.h:138
vtkOpenGLPolyDataMapper::PointIdArrayName
char * PointIdArrayName
Definition: vtkOpenGLPolyDataMapper.h:320
vtkOpenGLPolyDataMapper::GetNeedToRebuildShaders
virtual bool GetNeedToRebuildShaders(vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act)
vtkgl::void
typedef void(APIENTRYP PFNGLBLENDCOLORPROC)(GLclampf red
vtkOpenGLPolyDataMapper::Points
vtkOpenGLHelper Points
Definition: vtkOpenGLPolyDataMapper.h:245
vtkOpenGLPolyDataMapper::ReplaceShaderPrimID
virtual void ReplaceShaderPrimID(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLPolyDataMapper::ReplaceShaderColor
virtual void ReplaceShaderColor(std::map< vtkShader::Type, vtkShader * > shaders, vtkRenderer *ren, vtkActor *act)
vtkOpenGLTexture
OpenGL texture map.
Definition: vtkOpenGLTexture.h:37
vtkOpenGLPolyDataMapper::CellIdArrayName
char * CellIdArrayName
Definition: vtkOpenGLPolyDataMapper.h:321
vtkOpenGLPolyDataMapper::TempMatrix3
vtkMatrix3x3 * TempMatrix3
Definition: vtkOpenGLPolyDataMapper.h:275
vtkOpenGLPolyDataMapper::GetSupportsSelection
virtual bool GetSupportsSelection()
Definition: vtkOpenGLPolyDataMapper.h:71
vtkOpenGLPolyDataMapper
a PolyDataMapper for the OpenGL library
Definition: vtkOpenGLPolyDataMapper.h:43
vtkOpenGLPolyDataMapper::ProcessIdArrayName
char * ProcessIdArrayName
Definition: vtkOpenGLPolyDataMapper.h:322
vtkOpenGLPolyDataMapper::CellScalarBuffer
vtkOpenGLBufferObject * CellScalarBuffer
Definition: vtkOpenGLPolyDataMapper.h:313
vtkOpenGLPolyDataMapper::AppendCellTextures
void AppendCellTextures(vtkRenderer *ren, vtkActor *, vtkCellArray *prims[4], int representation, std::vector< unsigned char > &colors, std::vector< float > &normals, vtkPolyData *pd)
vtkOpenGLPolyDataMapper::SelectionStateChanged
vtkTimeStamp SelectionStateChanged
Definition: vtkOpenGLPolyDataMapper.h:262
vtkOpenGLPolyDataMapper::CellScalarTexture
vtkTextureObject * CellScalarTexture
Definition: vtkOpenGLPolyDataMapper.h:312
vtkOpenGLPolyDataMapper::HaveAppleBug
bool HaveAppleBug
Definition: vtkOpenGLPolyDataMapper.h:136