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