VTK
|
00001 /*========================================================================= 00002 00003 Program: Visualization Toolkit 00004 00005 Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen 00006 All rights reserved. 00007 See Copyright.txt or http://www.kitware.com/Copyright.htm for details. 00008 00009 This software is distributed WITHOUT ANY WARRANTY; without even 00010 the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 00011 PURPOSE. See the above copyright notice for more information. 00012 00013 =========================================================================*/ 00020 #ifndef vtkOpenGLGlyph3DHelper_h 00021 #define vtkOpenGLGlyph3DHelper_h 00022 00023 #include "vtkRenderingOpenGL2Module.h" // For export macro 00024 #include "vtkOpenGLPolyDataMapper.h" 00025 00026 class vtkBitArray; 00027 00028 class VTKRENDERINGOPENGL2_EXPORT vtkOpenGLGlyph3DHelper : public vtkOpenGLPolyDataMapper 00029 { 00030 public: 00031 static vtkOpenGLGlyph3DHelper* New(); 00032 vtkTypeMacro(vtkOpenGLGlyph3DHelper, vtkOpenGLPolyDataMapper) 00033 void PrintSelf(ostream& os, vtkIndent indent); 00034 00035 void SetModelTransform(float *matrix) 00036 { 00037 this->ModelTransformMatrix = matrix; 00038 } 00039 00040 void SetModelNormalTransform(float *matrix) 00041 { 00042 this->ModelNormalMatrix = matrix; 00043 } 00044 00045 void SetModelColor(unsigned char *color) 00046 { 00047 this->ModelColor = color; 00048 } 00049 00050 void SetUseFastPath(bool fastpath) 00051 { 00052 this->UseFastPath = fastpath; 00053 this->UsingInstancing = false; 00054 } 00055 00057 00059 void GlyphRender(vtkRenderer* ren, vtkActor* actor, vtkIdType numPts, 00060 std::vector<unsigned char> &colors, std::vector<float> &matrices, 00061 std::vector<float> &normalMatrices, std::vector<vtkIdType> &pickIds, 00062 unsigned long pointMTime); 00064 00065 protected: 00066 vtkOpenGLGlyph3DHelper(); 00067 ~vtkOpenGLGlyph3DHelper(); 00068 00069 // special opengl 32 version that uses instances 00070 #if GL_ES_VERSION_2_0 != 1 || GL_ES_VERSION_3_0 == 1 00071 void GlyphRenderInstances(vtkRenderer* ren, vtkActor* actor, vtkIdType numPts, 00072 std::vector<unsigned char> &colors, std::vector<float> &matrices, 00073 std::vector<float> &normalMatrices, 00074 unsigned long pointMTime); 00075 #endif 00076 00078 00079 virtual void GetShaderTemplate(std::string &VertexCode, 00080 std::string &fragmentCode, 00081 std::string &geometryCode, 00082 int lightComplexity, 00083 vtkRenderer *ren, vtkActor *act); 00085 00087 00088 virtual void ReplaceShaderValues(std::string &VertexCode, 00089 std::string &fragmentCode, 00090 std::string &geometryCode, 00091 int lightComplexity, 00092 vtkRenderer *ren, vtkActor *act); 00094 00096 virtual void SetCameraShaderParameters(vtkgl::CellBO &cellBO, vtkRenderer *ren, vtkActor *act); 00097 00099 virtual void SetPropertyShaderParameters(vtkgl::CellBO &cellBO, vtkRenderer *ren, vtkActor *act); 00100 00102 virtual void SetMapperShaderParameters(vtkgl::CellBO &cellBO, vtkRenderer *ren, vtkActor *act); 00103 00104 bool UseFastPath; 00105 bool UsingInstancing; 00106 00107 float* ModelTransformMatrix; 00108 float* ModelNormalMatrix; 00109 unsigned char* ModelColor; 00110 00111 vtkgl::BufferObject NormalMatrixBuffer; 00112 vtkgl::BufferObject MatrixBuffer; 00113 vtkgl::BufferObject ColorBuffer; 00114 vtkTimeStamp InstanceBuffersLoadTime; 00115 00116 00117 private: 00118 vtkOpenGLGlyph3DHelper(const vtkOpenGLGlyph3DHelper&); // Not implemented. 00119 void operator=(const vtkOpenGLGlyph3DHelper&); // Not implemented. 00120 }; 00121 00122 #endif