+ enum Attribute {
+ ATTRIB_VERTEX,
+ ATTRIB_COLOR,
+ ATTRIB_NORMAL,
+ ATTRIB_INDEX,
+ ATTRIB_COUNT,
+ };
+
+ GLuint va;
+ GLuint handle[ATTRIB_COUNT];
+ size_t count;
+
+};
+
+
+class OutlineModel {
+
+public:
+ using Position = glm::vec3;
+ using Color = glm::vec3;
+ using Index = unsigned short;
+
+ using Positions = std::vector<Position>;
+ using Colors = std::vector<Color>;
+ using Indices = std::vector<Index>;
+
+public:
+ Positions vertices;
+ Colors colors;
+ Indices indices;
+
+public:
+ OutlineModel();
+ ~OutlineModel();
+
+ OutlineModel(const OutlineModel &) = delete;
+ OutlineModel &operator =(const OutlineModel &) = delete;
+
+ void Invalidate() { dirty = true; }
+
+ void Clear();
+ void Reserve(int vtx_count, int idx_count);
+
+ void Draw();
+
+private:
+ void Update();
+
+private:
+ enum Attribute {
+ ATTRIB_VERTEX,
+ ATTRIB_COLOR,
+ ATTRIB_INDEX,
+ ATTRIB_COUNT,
+ };
+
+ GLuint va;
+ GLuint handle[ATTRIB_COUNT];
+ bool dirty;