/*========================================================================= Program: Visualization Toolkit Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen All rights reserved. See Copyright.txt or http://www.kitware.com/Copyright.htm for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ /** * @class vtkOpenGLGlyph3DHelper * @brief PolyDataMapper using OpenGL to render. * * PolyDataMapper that uses a OpenGL to do the actual rendering. */ #ifndef vtkOpenGLGlyph3DHelper_h #define vtkOpenGLGlyph3DHelper_h #include "vtkRenderingOpenGL2Module.h" // For export macro #include "vtkOpenGLPolyDataMapper.h" class vtkBitArray; class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLGlyph3DHelper : public vtkOpenGLPolyDataMapper { public: static vtkOpenGLGlyph3DHelper* New(); vtkTypeMacro(vtkOpenGLGlyph3DHelper, vtkOpenGLPolyDataMapper) void PrintSelf(ostream& os, vtkIndent indent) override; /** * Fast path for rendering glyphs comprised of only one type of primitive * Must set this->CurrentInput explicitly before calling. */ void GlyphRender(vtkRenderer* ren, vtkActor* actor, vtkIdType numPts, std::vector &colors, std::vector &matrices, std::vector &normalMatrices, std::vector &pickIds, vtkMTimeType pointMTime); /** * Release any graphics resources that are being consumed by this mapper. * The parameter window could be used to determine which graphic * resources to release. */ void ReleaseGraphicsResources(vtkWindow *window) override; protected: vtkOpenGLGlyph3DHelper(); ~vtkOpenGLGlyph3DHelper() override; // special opengl 32 version that uses instances void GlyphRenderInstances(vtkRenderer* ren, vtkActor* actor, vtkIdType numPts, std::vector &colors, std::vector &matrices, std::vector &normalMatrices, vtkMTimeType pointMTime); /** * Create the basic shaders before replacement */ void GetShaderTemplate( std::map shaders, vtkRenderer *ren, vtkActor *act) override; //@{ /** * Perform string replacments on the shader templates */ void ReplaceShaderPicking( std::map shaders, vtkRenderer *ren, vtkActor *act) override; void ReplaceShaderColor( std::map shaders, vtkRenderer *ren, vtkActor *act) override; void ReplaceShaderNormal( std::map shaders, vtkRenderer *ren, vtkActor *act) override; void ReplaceShaderClip( std::map shaders, vtkRenderer *ren, vtkActor *act) override; void ReplaceShaderPositionVC( std::map shaders, vtkRenderer *ren, vtkActor *act) override; //@} /** * Set the shader parameteres related to the actor/mapper */ void SetMapperShaderParameters( vtkOpenGLHelper &cellBO, vtkRenderer *ren, vtkActor *act) override; bool UsingInstancing; vtkOpenGLBufferObject *NormalMatrixBuffer; vtkOpenGLBufferObject *MatrixBuffer; vtkOpenGLBufferObject *ColorBuffer; vtkTimeStamp InstanceBuffersBuildTime; vtkTimeStamp InstanceBuffersLoadTime; private: vtkOpenGLGlyph3DHelper(const vtkOpenGLGlyph3DHelper&) = delete; void operator=(const vtkOpenGLGlyph3DHelper&) = delete; }; #endif