Quelle est la principale utilisation des objets tampons Vertex?

8

D'après ce que j'ai lu, il semble que les VBO soient uniquement destinés à la performance.

Je travaille sur un projet d'apprentissage très rudimentaire dans lwjgl et j'essaie juste de comprendre quelles fonctionnalités plus avancées de la bibliothèque je devrais explorer et quelle est leur utilisation.

Ma compréhension est que les VBO permettent à une personne de conserver des sommets dans VRAM alors qu'ils ne sont pas actuellement dessinés dans une scène. Dans mon cas, je ne fais que dessiner des quads et les performances ne sont probablement pas un problème du tout, mais j'essaie de reconstituer ce qui se passe sous le capot. Si je dessine directement des quads, je dessine à partir de la mémoire du processeur, n'est-ce pas? De plus, si je ne vérifie pas la visibilité, cela signifie-t-il que je rend absolument tout dans la "scène", que ce soit en vue? Les VBO sont-ils un moyen de stocker des objets et de rendre uniquement ce qui est nécessaire?

sensae
la source

Réponses:

10

Note pédante: Il n'y a rien de tel dans OpenGL qu'un "objet tampon de sommet". Il existe simplement des objets tampons . Un objet tampon est simplement un tableau linéaire de mémoire GPU que vous pouvez allouer, remplir de données, lire et utiliser de différentes manières. L'une des choses que vous pouvez faire avec les objets tampons est de stocker des données de sommets et de les utiliser comme tableaux source pour le rendu. Mais ils ont également plusieurs autres utilisations .

Les objets tampons ne sont pas un moyen d'éviter l'abattage tronconique ou d'autres constructions de style graphique de scène. Lorsqu'ils sont utilisés pour des données de sommet, les objets tampons stockent simplement les données de sommet. Sans eux, vos glDrawElements/Arrays/etcappels extrairont les données des tableaux stockés dans les tampons des membres du processeur. Lorsque vous utilisez des objets tampon pour le rendu, les tableaux sont extraits à la place du contenu de l'objet tampon.

La provenance de vos données de sommet est la seule différence entre le rendu avec des objets tampons et le rendu sans eux. Donc pas d'abattage de tronc. Pas de gestion des graphes de scène. Rien. C'est à peu près où vos données de sommet sont stockées.

Nicol Bolas
la source
1
Je pourrais clarifier un peu et mentionner que la véritable optimisation que vous faites en utilisant les VBO concerne le bus entre le CPU et le GPU, qui est relativement lent (et controversé). Si cette vitesse de bus était négligeable, il n'y aurait pratiquement aucune différence entre l'utilisation d'un VBO et l'utilisation d'un tableau de flotteurs côté CPU.
2011
1
Il convient également de noter que votre pilote est libre de stocker des objets tampons où il le souhaite, y compris dans la mémoire du processeur.
Maximus Minimus
En plus de cela, construire un VBO / VAO et simplement appeler des tableaux sur cela est (imho) plus facile que d'avoir à boucler des fonctions de pipeline fixes pour tous les sommets / faces. C'est comme dire à la carte graphique "allez faire passer cette boîte de triangles à travers ce shader" au lieu de "allez prendre ce sommet, ce sommet et cela, et faites un joli petit triangle heureux là-bas. Maintenant, prenez le suivant ...". Oh, attendez, maintenant je suis plus dans les shaders que dans les VBO.
Exilyth
2

Les tampons de tableau OpenGL (= ce que nous appelons VBO) ont un seul objectif: conserver vos données de géométrie dans la mémoire GPU et non dans la mémoire client, de sorte que vous n'aurez pas besoin de les renvoyer à chaque image.

Aussi simple que cela :-)

Kos
la source