www.pudn.com > tristripper-1.1.0-beta-5.zip > gl_mesh.h
#ifndef HEADER_GUARD_GL_MESH_H
#define HEADER_GUARD_GL_MESH_H
// 3D Mesh class
class gl_mesh
{
public:
enum array_type {
vertex = 0,
normal = 1,
texture_coord0 = 2
};
static const size_t MaxVertexArrays = 3;
static const size_t MaxTextures = 1;
gl_mesh();
~gl_mesh();
void LoadFromVxo(std::istream & File);
void Compile();
void Execute() const;
const std::string & Name() const;
static size_t s_CacheSize;
static bool s_ViewStrips;
private:
friend class varrays_normalizer;
// SubMesh class
class submesh
{
public:
typedef uint32_t index;
typedef std::vector indices;
submesh();
submesh(const indices & Indices, const GLenum glMode);
void LoadFromVXO(std::istream & File);
indices & Indices();
const indices & Indices() const;
GLenum GLMode() const;
protected:
indices m_Indices;
GLenum m_glMode;
};
// Private member functions
void InitDisplayList();
void NormalizeVArrays();
void TriangleStrip();
void RawDraw() const;
// New private types
typedef std::vector submeshes;
typedef std::vector varray; // vertex_array
typedef std::vector varrays; // vertex_arrays
// Private member variables
std::string m_Name;
varrays m_VArrays;
submeshes m_SubMeshes;
size_t m_NbVertices;
size_t m_NbTextures;
GLuint m_DisplayListID;
};
//////////////////////////////////////////////////////////////////////////
// gl_mesh Inline functions
//////////////////////////////////////////////////////////////////////////
inline gl_mesh::gl_mesh() : m_VArrays(MaxVertexArrays), m_DisplayListID(0) { }
inline const std::string & gl_mesh::Name() const {
return m_Name;
}
//////////////////////////////////////////////////////////////////////////
// gl_mesh::submesh Inline functions
//////////////////////////////////////////////////////////////////////////
inline gl_mesh::submesh::submesh() { }
inline gl_mesh::submesh::submesh(const indices & Indices, const GLenum glMode) : m_Indices(Indices), m_glMode(glMode) { }
inline GLenum gl_mesh::submesh::GLMode() const {
return m_glMode;
}
inline gl_mesh::submesh::indices & gl_mesh::submesh::Indices() {
return m_Indices;
}
inline const gl_mesh::submesh::indices & gl_mesh::submesh::Indices() const {
return m_Indices;
}
#endif // HEADER_GUARD_GL_MESH_H