X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fmodel.hpp;h=4fd4515563022215e0ca8e2f847813b4610b501f;hb=2d8c7c015478a4528c0909f11d43998b1393948d;hp=02ab3f274bd5b096205f9c1d4a153bff004e7c4a;hpb=3baab6cca7423d55ea08288d96570b02380b1fe9;p=blank.git diff --git a/src/model.hpp b/src/model.hpp index 02ab3f2..4fd4515 100644 --- a/src/model.hpp +++ b/src/model.hpp @@ -11,6 +11,28 @@ namespace blank { class Model { public: + std::vector vertices; + std::vector colors; + std::vector normals; + +public: + Model(); + ~Model(); + + Model(const Model &) = delete; + Model &operator =(const Model &) = delete; + + void Invalidate() { dirty = true; } + + void Clear(); + void Reserve(int); + + void Draw(); + +private: + void Update(); + +private: enum Attribute { ATTRIB_VERTEX, ATTRIB_COLOR, @@ -18,20 +40,44 @@ public: ATTRIB_COUNT, }; + GLuint handle[ATTRIB_COUNT]; + bool dirty; + +}; + + +class OutlineModel { + public: - explicit Model( - std::vector &&vertices, - std::vector &&colors, - std::vector &&normals); - ~Model(); + std::vector vertices; + std::vector colors; + +public: + OutlineModel(); + ~OutlineModel(); + + OutlineModel(const OutlineModel &) = delete; + OutlineModel &operator =(const OutlineModel &) = delete; + + void Invalidate() { dirty = true; } + + void Clear(); + void Reserve(int); void Draw(); private: - std::vector vertices; - std::vector colors; - std::vector normals; + void Update(); + +private: + enum Attribute { + ATTRIB_VERTEX, + ATTRIB_COLOR, + ATTRIB_COUNT, + }; + GLuint handle[ATTRIB_COUNT]; + bool dirty; };