befalimpertinent a écrit :
Ok. J'ai utiliser un index buffer et j'ai pas mal augmenté mes fps à ce niveau.
Seulement il y a un autre point ou je dois perdre en performance : j'utilise 3 buffers différents pour les coordonnées, la couleur et la normal d'un Vertex ( plus le buffer pour l'index).
Ainsi au niveau de la carte graphique, le GPU est obligé de "switcher" entre ces 3 buffers d'ou une perte de temps.
Dans ma derniere version je ne sauvegarde que les coordonnées (donc plus que deux buffers : le Vertex et l'Index) et la j'obtiens des performances corretes.
Mais je sais qu'il est possible de n'utiliser qu'un seul VB tout en sauvegardant coordonnées, couleur et normales ( une peu comme avec les interleaved array ). Seulement plusieurs problemes se pose alors : Est ce que cela fonctionne pareil que les interleaved Vertex c'est à dire en utilisant
Code :
- glInterleavedArrays(GL_C4F_N3F_V3F, sizeof(VERTEX), vertices);
- glDrawElements(GL_TRIANGLES, nb_faces*3, GL_UNSIGNED_INT, indices);
|
au moment de l'affichage
Faut t'il modifier les entiers dans le tableau indices pour prendre en compte le décalage du aux 4 float pour la couleur et aux 3 pour les normales dans le tableau vertices (ou le flag GL_C4F_N3F_V3F suffit) ?
Se sert-on dans ce cas de glColorPointer (4, GL_FLOAT, 0, 0); et glNormalPointer (3, GL_FLOAT, 0, 0);
au moment de la création du VB?
|