-
Notifications
You must be signed in to change notification settings - Fork 1
/
DataHandler.cpp
90 lines (77 loc) · 2.67 KB
/
DataHandler.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#include "DataHandler.hpp"
DataHandler::DataHandler()
{
}
DataHandler::~DataHandler()
{
while (tex_objects.size() > 0) {
delete (*tex_objects.begin()).first;
tex_objects.erase(tex_objects.begin());
}
while (col_objects.size() > 0) {
delete (*col_objects.begin()).first;
col_objects.erase(col_objects.begin());
}
}
GLint DataHandler::addObject(myGLWidget *m)
{
GLint tot(-1);
size_t tmp;
if (!m)
return tot;
if ((tot = this->findObject(m)) < 0) {
if ((tmp = m->getColors().size()) > 0) {
col_objects.push_back(std::pair<myGLWidget*, GLuint>(m, col_objects.size()));
tot = (GLint)col_objects.size() - 1;
col_pos.insert(col_pos.end(), m->getVertices().begin(), m->getVertices().end());
col_datas.insert(col_datas.end(), m->getColors().begin(), m->getColors().end());
return tot;
}
tex_objects.push_back(std::pair<myGLWidget*, GLuint>(m, tex_objects.size()));
tot = (GLint)tex_objects.size() - 1;
tex_pos.insert(tex_pos.end(), m->getVertices().begin(), m->getVertices().end());
tex_datas.insert(tex_datas.end(), m->getTextures().begin(), m->getTextures().end());
}
return tot;
}
GLint DataHandler::findObject(myGLWidget *m)
{
GLint pos(0);
if (m->getColors().size() > 0) {
for (DataHandlerContainer::iterator it = col_objects.begin(); it != col_objects.end(); ++it) {
if ((*it).first == m)
return pos;
++pos;
}
return -1;
}
for (DataHandlerContainer::iterator it = tex_objects.begin(); it != tex_objects.end(); ++it) {
if ((*it).first == m)
return pos;
++pos;
}
return -1;
}
/*void DataHandler::paintGL(const glm::mat4& view_matrix, const glm::mat4& proj_matrix)
{
// Activation du shader
glUseProgram(m_shader->getProgramID());
glBindVertexArray(m_vaoID);
// Envoi des matrices
glUniformMatrix4fv(m_uniLoc_projection, 1, GL_FALSE, glm::value_ptr(proj_matrix));
glm::mat4 tmp = glm::translate(view_matrix, glm::vec3(m_pos.x(), m_pos.y(), m_pos.z()));
if (m_rot.rotation() != 0.f && (m_rot.x() != 0.f || m_rot.y() != 0.f || m_rot.z() != 0.f))
tmp = glm::rotate(tmp, m_rot.rotation(), glm::vec3(m_rot.x(), m_rot.y(), m_rot.z()));
glUniformMatrix4fv(m_uniLoc_modelView, 1, GL_FALSE, glm::value_ptr(tmp));
// Rendu
if (m_hasTexture){
m_texture.bind();
glDrawArrays(GL_TRIANGLES, 0, m_pointsNumber);
m_texture.unbind();
}
else{
glDrawArrays(GL_TRIANGLES, 0, m_pointsNumber);
}
glBindVertexArray(0);
glUseProgram(0);
}*/