Je vois que les versions 3 et supérieures d'OpenGL éliminent l'utilisation du rendu côté client. Le mode immédiat a été éliminé et les tableaux de sommets semblent obsolètes. Au lieu de cela, si je comprends bien, les VBO sont le principal moyen de rendre les sommets.
Alors que je vois la logique derrière une manière uniforme de tout rendre, est-ce le cas que les VBO n'ont pas d'inconvénients majeurs sur les tableaux de vertex? Je pensais que les VBO étaient censés être de grands tampons contenant> 1 Mo de données, en général. Et si j'ai une scène qui a beaucoup de géométrie plus petite? J'ai un graphique de scène avec un grand nombre de nœuds, chacun ayant besoin de sa propre transformation, etc. Chaque nœud devrait également pouvoir être supprimé séparément, ajouté séparément, etc. J'utilisais auparavant des tableaux de vertex. Donc, ma première question est de savoir si, si je passe aux VBO, il y aura une surcharge supplémentaire pour mes objets de graphique de scène maintenant, car un VBO doit être alloué pour chaque objet.
Une autre préoccupation est que la géométrie que je rends peut être très dynamique. Dans le pire des cas, il peut arriver que toute la géométrie doive être renvoyée à chaque image pendant une certaine période de temps. Les VBO auront-ils des performances moins bonnes que les tableaux de vertex dans ce cas d'utilisation, ou les VBO au pire fonctionnent-ils tout autant que les tableaux de vertex mais pas plus?
Donc, dans un format plus concis, mes questions sont:
1) Y a-t-il des frais généraux importants pour allouer / désallouer des VBO (je veux dire le simple fait de mettre en place un tampon)?
2) Si je mets à jour les données du CPU à chaque trame, cela peut-il être bien pire que si j'avais utilisé des tableaux de vertex?
Et enfin, j'aimerais savoir:
3) Si la réponse à l'une des questions ci-dessus est "oui", pourquoi déconseiller d'autres modes de rendu qui pourraient avoir des avantages par rapport aux VBO? Y a-t-il quelque chose qui me manque ici, comme des techniques que je suis censé utiliser pour atténuer certains de ces coûts d'allocation potentiels, etc.?
4) Les réponses à l'une de ces questions changent-elles considérablement en fonction de la version d'OpenGL que j'utilise? Si je refactorise mon code pour qu'il soit compatible avec OpenGL 3 ou 4 en utilisant les VBO de manière performante, les mêmes techniques seront-elles susceptibles de bien fonctionner avec OpenGL 2, ou est-il probable que certaines techniques soient beaucoup plus rapides avec OpenGL 3 + et d'autres avec OpenGL 2?
J'ai posé cette question sur le débordement de pile, mais je republie ici parce que j'ai réalisé que ce site pourrait être plus approprié à ma question.