]> git.localhorst.tv Git - blank.git/blob - src/model.hpp
separate file for world generation
[blank.git] / src / model.hpp
1 #ifndef BLANK_MODEL_HPP_
2 #define BLANK_MODEL_HPP_
3
4 #include <vector>
5 #include <GL/glew.h>
6 #include <glm/glm.hpp>
7
8
9 namespace blank {
10
11 class Model {
12
13 public:
14         using Index = unsigned int;
15
16 public:
17         std::vector<glm::vec3> vertices;
18         std::vector<glm::vec3> colors;
19         std::vector<glm::vec3> normals;
20         std::vector<Index> indices;
21
22 public:
23         Model();
24         ~Model();
25
26         Model(const Model &) = delete;
27         Model &operator =(const Model &) = delete;
28
29         Model(Model &&);
30         Model &operator =(Model &&);
31
32         void Invalidate() { dirty = true; }
33
34         void Clear();
35         void Reserve(int vtx_count, int idx_count);
36
37         void Draw();
38
39 private:
40         void Update();
41
42 private:
43         enum Attribute {
44                 ATTRIB_VERTEX,
45                 ATTRIB_COLOR,
46                 ATTRIB_NORMAL,
47                 ATTRIB_INDEX,
48                 ATTRIB_COUNT,
49         };
50
51         GLuint handle[ATTRIB_COUNT];
52         bool dirty;
53
54 };
55
56
57 class OutlineModel {
58
59 public:
60         using Index = unsigned short;
61
62 public:
63         std::vector<glm::vec3> vertices;
64         std::vector<glm::vec3> colors;
65         std::vector<Index> indices;
66
67 public:
68         OutlineModel();
69         ~OutlineModel();
70
71         OutlineModel(const OutlineModel &) = delete;
72         OutlineModel &operator =(const OutlineModel &) = delete;
73
74         void Invalidate() { dirty = true; }
75
76         void Clear();
77         void Reserve(int vtx_count, int idx_count);
78
79         void Draw();
80
81 private:
82         void Update();
83
84 private:
85         enum Attribute {
86                 ATTRIB_VERTEX,
87                 ATTRIB_COLOR,
88                 ATTRIB_INDEX,
89                 ATTRIB_COUNT,
90         };
91
92         GLuint handle[ATTRIB_COUNT];
93         bool dirty;
94
95 };
96
97 }
98
99 #endif