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
|
for (int i = 0; i < NB_RACES; ++i)
{
glBindVertexArray(VAO[i]);
glBindBuffer(GL_ARRAY_BUFFER, VBO[i]);
glBufferData(GL_ARRAY_BUFFER, simulation.vertices.size() * sizeof(GLfloat), &simulation.vertices[0], GL_DYNAMIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 5 * sizeof(GLfloat), (GLvoid*)(2 * sizeof(GLfloat)));
glBindBuffer(GL_ARRAY_BUFFER, VBO[i + 1]);
glBufferData(GL_ARRAY_BUFFER, simulation.getNbOccurencesRace()[i] * sizeof(glm::mat4), &simulation.getModelMatrices().at(i)[0], GL_DYNAMIC_DRAW);
// Set attribute pointers for matrix (4 times vec4)
glEnableVertexAttribArray(3);
glVertexAttribPointer(3, 4, GL_FLOAT, GL_FALSE, sizeof(glm::mat4), (GLvoid*)0);
glEnableVertexAttribArray(4);
glVertexAttribPointer(4, 4, GL_FLOAT, GL_FALSE, sizeof(glm::mat4), (GLvoid*)(sizeof(glm::vec4)));
glEnableVertexAttribArray(5);
glVertexAttribPointer(5, 4, GL_FLOAT, GL_FALSE, sizeof(glm::mat4), (GLvoid*)(2 * sizeof(glm::vec4)));
glEnableVertexAttribArray(6);
glVertexAttribPointer(6, 4, GL_FLOAT, GL_FALSE, sizeof(glm::mat4), (GLvoid*)(3 * sizeof(glm::vec4)));
glVertexAttribDivisorARB(3, 1);
glVertexAttribDivisorARB(4, 1);
glVertexAttribDivisorARB(5, 1);
glVertexAttribDivisorARB(6, 1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO[i]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, simulation.indices.size() * sizeof(GLuint), &simulation.indices[i], GL_STATIC_DRAW);
glBindVertexArray(0);
} |
Partager