2010-11-18 5 views
2

En parcourant la documentation des tableaux de vertex dans OpenGL, deux des types de mémoire les plus courants utilisés pour les index que j'ai trouvés étaient GLubyte (GL_UNSIGNED_BYTE) et GLshort (GL_SHORT). Je me demandais s'il y avait une différence réelle entre l'utilisation des deux indices pourGLubyte vs GLshort pour les indices

Merci, Dragonwrenn

+1

Etes-vous sûr qu'un court-circuit prend moins de mémoire qu'un octet? Je ne connais pas OpenGL, mais c'est généralement l'inverse (un petit être peut-être deux octets). – Thilo

+0

@Thilo: En toute honnêteté, ils prendront probablement la même quantité de mémoire car le pilote doit convertir les indices 8 bits en 16 bits pour la plupart des GPU de bureau. L'API OpenGL donne l'impression que les index 8 bits sont une option viable, mais dans les coulisses, le matériel ne les aime pas. OpenGL fait beaucoup ce genre de choses, malheureusement ... Les pilotes OpenGL sont beaucoup de fumée et de miroirs. –

Répondre

8

GL_UNSIGNED_BYTE est OK pour les modèles qui ont au plus 256 sommets - ce n'est vraiment pas beaucoup.

GL_UNSIGNED_SHORT, en prenant 2 octets, vous limiterait à 65536 sommets - c'est encore un peu moins.

Je dirais que la variante la plus courante est GL_UNSIGNED_INT, car même 2 octets peuvent ne pas suffire pour les modèles mid-poly et high-poly.

+2

Souvent, 16 bits suffisent et la plupart des moteurs utilisent ce format si possible. Vous avez normalement environ deux fois plus de triangles que de sommets, donc 16 bits suffisent pour ~ 120.000 tris. Pour un seul maillage, c'est beaucoup. –

4

GL_UNSIGNED_BYTE est 1 octet, GL_SHORT est de 2 octets. Le seul avantage des octets est qu'ils sont plus petits, donc ils prennent moins de mémoire à stocker et moins de temps à transférer dans la mémoire graphique (en supposant des tableaux de vertex ou des VBO).

Attention, tous les types ne sont pas disponibles pour toutes les utilisations: Vous ne pouvez pas avoir de sommets GL_UNSIGNED_BYTE, par exemple.

3

Les GPU ne peuvent gérer que des index de 16 ou 32 bits, donc il y a un surcoût supplémentaire lors de l'utilisation de GL_UNSIGNED_BYTE et aucune économie de mémoire.

Questions connexes