]> git.localhorst.tv Git - blank.git/blob - src/model.cpp
bbfc97f4fcfb121f8646feec9d59680213958189
[blank.git] / src / model.cpp
1 #include "model.hpp"
2
3
4 namespace blank {
5
6 Model::Model(
7         std::vector<glm::vec3> &&vtx,
8         std::vector<glm::vec3> &&col,
9         std::vector<glm::vec3> &&norm
10 )
11 : vertices(vtx)
12 , colors(col)
13 , normals(norm)
14 , handle{} {
15         glGenBuffers(ATTRIB_COUNT, handle);
16
17         glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_VERTEX]);
18         glBufferData(GL_ARRAY_BUFFER, vertices.size() * sizeof(glm::vec3), vertices.data(), GL_STATIC_DRAW);
19
20         glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_COLOR]);
21         glBufferData(GL_ARRAY_BUFFER, colors.size() * sizeof(glm::vec3), colors.data(), GL_STATIC_DRAW);
22
23         glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_NORMAL]);
24         glBufferData(GL_ARRAY_BUFFER, normals.size() * sizeof(glm::vec3), normals.data(), GL_STATIC_DRAW);
25 }
26
27 Model::~Model() {
28         glDeleteBuffers(ATTRIB_COUNT, handle);
29 }
30
31
32 void Model::Draw() {
33         glEnableVertexAttribArray(ATTRIB_VERTEX);
34         glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_VERTEX]);
35         glVertexAttribPointer(
36                 ATTRIB_VERTEX, // location (for shader)
37                 3,             // size
38                 GL_FLOAT,      // type
39                 GL_FALSE,      // normalized
40                 0,             // stride
41                 nullptr        // offset
42         );
43
44         glEnableVertexAttribArray(ATTRIB_COLOR);
45         glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_COLOR]);
46         glVertexAttribPointer(
47                 ATTRIB_COLOR,  // location (for shader)
48                 3,             // size
49                 GL_FLOAT,      // type
50                 GL_FALSE,      // normalized
51                 0,             // stride
52                 nullptr        // offset
53         );
54
55         glEnableVertexAttribArray(ATTRIB_NORMAL);
56         glBindBuffer(GL_ARRAY_BUFFER, handle[ATTRIB_NORMAL]);
57         glVertexAttribPointer(
58                 ATTRIB_NORMAL, // location (for shader)
59                 3,             // size
60                 GL_FLOAT,      // type
61                 GL_FALSE,      // normalized
62                 0,             // stride
63                 nullptr        // offset
64         );
65
66         glDrawArrays(
67                 GL_TRIANGLES,   // how
68                 0,              // start
69                 vertices.size() // len
70         );
71
72         glDisableVertexAttribArray(ATTRIB_NORMAL);
73         glDisableVertexAttribArray(ATTRIB_COLOR);
74         glDisableVertexAttribArray(ATTRIB_VERTEX);
75 }
76
77 }