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
| void Geometry::createVBO()
{
// Create and bind a BO for vertex data
glGenBuffers(1, &vbuffer);
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexattributes), vertexattributes, GL_STATIC_DRAW);
// Create and bind a BO for index data
glGenBuffers(1, &ibuffer);
glBindBuffer(GL_ARRAY_BUFFER, ibuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(m_indices3), m_indices3, GL_STATIC_DRAW);
// On récupère les emplacements des deux attributs dans le shader
vertexPositionAttrib = glGetAttribLocation (m_shaderCouleur.getProgramID(), "VertexPosition");
vertexColorAttrib = glGetAttribLocation (m_shaderCouleur.getProgramID(), "VertexColor");
}
void Geometry::drawVBO(Matrix4& projection, Matrix4& modelview) const
{
// Activation du shader et des tableaux Vertex Attrib
glUseProgram(m_shaderCouleur.getProgramID());
glUniformMatrix4fv(glGetUniformLocation(m_shaderCouleur.getProgramID(), "projection"), 1, GL_TRUE, projection.getValeurs());
glUniformMatrix4fv(glGetUniformLocation(m_shaderCouleur.getProgramID(), "modelview"), 1, GL_TRUE, modelview.getValeurs());
// Activation des tableaux génériques
glEnableVertexAttribArray(vertexPositionAttrib);
glEnableVertexAttribArray(vertexColorAttrib);
// Active les données VB
glBindBuffer(GL_ARRAY_BUFFER, vbuffer);
// Envoi des vertices et des matrices
glVertexAttribPointer(vertexPositionAttrib, 3, GL_DOUBLE, GL_FALSE, sizeof(double)*6, (float *) NULL + (0));
glVertexAttribPointer(vertexColorAttrib, 3, GL_DOUBLE, GL_FALSE, sizeof(double)*6, (float *) NULL + (3));
// Active les données IB
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibuffer);
cout <<"avant drawelement"<<endl;
glDrawElements(GL_TRIANGLES, nb_tri*3, GL_UNSIGNED_INT, 0);
cout <<"apres drawelement"<<endl;
/*
if(nb_tri > 0)
glDrawElements(GL_TRIANGLES, nb_tri*3, GL_UNSIGNED_INT, m_indices3);
if(nb_qua > 0)
glDrawElements(GL_QUADS, nb_qua*4, GL_UNSIGNED_INT, m_indices4);
*/
// Désactivation des tableaux Vertex Attrib et du shader
glDisableVertexAttribArray(vertexColorAttrib);
glDisableVertexAttribArray(vertexPositionAttrib);
glUseProgram(0);
} |
Partager