#ifndef IMESH_H #define IMESH_H #include #include #include #include class IMesh { protected: enum {POSITION_BUFFER, NORMAL_BUFFER, TEXCOORD_BUFFER, TANGENT_BUFFER, INDICES_BUFFER, NB_BUFFERS}; typedef struct { glm::vec3 tangent; glm::vec3 bitangent; } Tangents; std::vector positions; std::vector normals; std::vector texCoords; std::vector tangents; std::vector indices; GLuint vao; GLuint vbo[NB_BUFFERS]; bool locked; public: ~IMesh(); void addTriangle(int i1, int i2, int i3); void addVertex(float x, float y, float z); void addVertex(glm::vec3 &position); void addVertex(glm::vec3 &position, glm::vec3 &normal); void addVertex(glm::vec3 &position, glm::vec2 &texCoord); void addVertex(glm::vec3 &position, glm::vec3 &normal, glm::vec2 &texCoord); void computeFaceNormals(); void computeVertexNormals(); void computeTangents(); bool hasNormals(); bool hasTexCoords(); bool hasTangents(); /* * When the mesh is locked, addFace and addVertex do nothing, but the mesh can be drawn * initGL locks the mesh * destroyGL unlocks the mesh */ void initGL(bool isDynamic = false); void destroyGL(); void draw(); bool isLocked(){return locked;} }; #endif // IMESH_H