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
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
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);
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 glDrawArrays(GL_TRIANGLES, indices[i], indices[i+1] - indices[i]);
Et c'était plus rapide.
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
Est-ce normal ?
Partager