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
| Mesh::Mesh( /* Les params de ton ctor */)
: m_vbo{ GL_INVALID_INDEX }
, m_nbo{ GL_INVALID_INDEX }
, m_ebo{ GL_INVALID_INDEX }
, m_vao{ GL_INVALID_INDEX }
{
// Le contenu de ton ctor.
}
void Mesh::initialiseEbo()
{
glGenBuffers(1, &m_ebo);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ebo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_vertexIndex.size() * sizeof(GLfloat), m_vertexIndex.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
}
void Mesh::initialiseVbo()
{
glGenBuffers(1, &m_vbo);
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glBufferData(GL_ARRAY_BUFFER, m_vertex.size() * sizeof(glm::vec3), m_vertex.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
void Mesh::initialiseNbo()
{
glGenBuffers(1, &m_nbo);
glBindBuffer(GL_ARRAY_BUFFER, m_nbo);
glBufferData(GL_ARRAY_BUFFER, m_normal.size() * sizeof(glm::vec3), m_normal.data(), GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
void Mesh::initialiseVao()
{
glGenVertexArrays(1, &m_vao);
glBindVertexArray(m_vao);
if ( m_vbo != GL_INVALID_INDEX )
{
glBindBuffer(GL_ARRAY_BUFFER, m_vbo);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(0);
}
if ( m_nbo != GL_INVALID_INDEX )
{
glBindBuffer(GL_ARRAY_BUFFER, m_nbo);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(1);
}
if ( m_ebo != GL_INVALID_INDEX )
{
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_ebo);
}
glBindVertexArray(0);
return vao;
}
void Renderer::mainLoop()
{
//[...]
m_mesh.initialiseVbo();
m_mesh.initialiseNbo(); // Ou pas, s'il n'y en a pas besoin
m_mesh.initialiseEbo();
m_mesh.initialiseVao();
while(1) // main loop
{
m_shader.activate();
glBindVertexArray(m_mesh.getVao());
glDrawElements(GL_TRIANGLES, m_mesh.getElementSize(), GL_UNSIGNED_INT, 0);
glBindVertexArray(0);
};
} |
Partager