]> git.localhorst.tv Git - blank.git/blob - src/model.hpp
add null shape for void blocks
[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         std::vector<glm::vec3> vertices;
15         std::vector<glm::vec3> colors;
16         std::vector<glm::vec3> normals;
17
18 public:
19         Model();
20         ~Model();
21
22         Model(const Model &) = delete;
23         Model &operator =(const Model &) = delete;
24
25         Model(Model &&);
26         Model &operator =(Model &&);
27
28         void Invalidate() { dirty = true; }
29
30         void Clear();
31         void Reserve(int);
32
33         void Draw();
34
35 private:
36         void Update();
37
38 private:
39         enum Attribute {
40                 ATTRIB_VERTEX,
41                 ATTRIB_COLOR,
42                 ATTRIB_NORMAL,
43                 ATTRIB_COUNT,
44         };
45
46         GLuint handle[ATTRIB_COUNT];
47         bool dirty;
48
49 };
50
51
52 class OutlineModel {
53
54 public:
55         std::vector<glm::vec3> vertices;
56         std::vector<glm::vec3> colors;
57
58 public:
59         OutlineModel();
60         ~OutlineModel();
61
62         OutlineModel(const OutlineModel &) = delete;
63         OutlineModel &operator =(const OutlineModel &) = delete;
64
65         void Invalidate() { dirty = true; }
66
67         void Clear();
68         void Reserve(int);
69
70         void Draw();
71
72 private:
73         void Update();
74
75 private:
76         enum Attribute {
77                 ATTRIB_VERTEX,
78                 ATTRIB_COLOR,
79                 ATTRIB_COUNT,
80         };
81
82         GLuint handle[ATTRIB_COUNT];
83         bool dirty;
84
85 };
86
87 }
88
89 #endif