Bonjour, je suis passé des VertexArrays aux VBOs et j'ai eu quelques pertes en performances. Je souhaiterais savoir si c'est normal.
Voici mon code avec les VBOs
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, indices[8]*3*sizeof(GLfloat), NULL, GL_STATIC_DRAW); 
// j'ai mis static parce que je ne renvois jamais le modèle, c'est toujours le même
// J'ai un modèle constitué de 8 parties, je met tous les points dans le même buffer, et j'utilise les indices des sommets pour savoir où est chaque partie
// indices a la forme suivante : indices[0] = 0 c'est là ou commence le premier objet, indices[1] numéro du dernier sommet (sachant qu'un sommet = 3 coordonnées)
 
for(int i=0; i<8; i++){
   glBufferSubData(GL_ARRAY_BUFFER, 3 * indices[i] * sizeof(GLfloat), 3 * (indices[i+1] - indices[i]) * sizeof(GLfloat), vertexArray + 3 * indices[i]);
   // De même VertexArray contient toutes les coordonnées concaténées les unes après les autres
}
 
glVertexPointer(3, GL_FLOAT, 0, 0);
Et lorsque je veux afficher l'objet i je fais juste mes Translation Rotations puis
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
glDrawArrays(GL_TRIANGLES, indices[i], indices[i+1] - indices[i]);
Avant je faisais ca avec des vertex array. J'avais des tableaux dans lesquels je stockais les données de mes objets et à chaque fois je faisais un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
glVertexPointer(3, GL_FLOAT, 0, adresse_du_tableau_des_sommets_de_mon_objet);
glDrawElements(GL_TRIANGLES, vertexCount, GL_UNSIGNED_INT, indices);
// Indice est le talbeau qui va de 0 à vertexCount - 1
Et c'était plus rapide.
Est-ce normal ?