#ifndef __PLANETINDEXBUFFER_H__ #define __PLANETINDEXBUFFER_H__ #include "util/Common.h" enum Direction { TOP, RIGHT, BOTTOM, LEFT, }; typedef std::vector TriangleFan; typedef std::vector TriangleFanList; class PlanetIndexBuffer { public: PlanetIndexBuffer(unsigned int resolution, const unsigned int detailTop, const unsigned int detailRight, const unsigned int detailBottom, const unsigned int detailLeft); ~PlanetIndexBuffer(); // Instance methods GLsizei getVertexCount() const; GLuint getIbo() const; private: void rotateIndices(unsigned int &x, unsigned int &y, const unsigned int rotation); void addTriangleFan(TriangleFanList &triangleFans); void addTriangleFanVertex(TriangleFanList &triangleFans, unsigned int x, unsigned int y, const unsigned int rotation = 0); void buildEdge(TriangleFanList &triangleFans, const unsigned int side, const unsigned int detail = 0); // Instance variables GLsizei m_vertexCount; GLuint m_ibo; // TODO: move to utility unsigned int index1D(const unsigned int x, const unsigned int y); unsigned int m_resolution; }; #endif // __PLANETINDEXBUFFER_H__