11
votes

Combien de vbos est-ce que j'utilise?

Je comprends donc comment utiliser un objet tampon de sommet et qu'il offre une forte augmentation de performances sur le dessin de mode immédiat. Je vais dessiner beaucoup de quads 2D (sprites), et je veux savoir si je suis censé créer un VBO pour chacun ou créer un VBO pour contenir toutes les données?


0 commentaires

3 Réponses :


1
votes

Utilisez un (ou un petit nombre de) VBO (s) pour contenir toutes / la plus de votre géométrie.

En règle générale, moins les appels d'API deviennent pour rendre votre scène, mieux c'est.


0 commentaires

19
votes

Vous ne devriez pas utiliser de nouveau VBO pour chaque Sprite / Quad. Donc, les mettre tous dans un seul VBO serait la meilleure solution dans votre cas.

Mais en général, je ne pense pas que cela puisse être répondu dans une phrase.

Créer un nouveau VBO pour chaque quad ne vous donnera pas une augmentation réelle des performances. Si vous le faites, beaucoup de temps sera gaspillé avec GLBindbuffer pour commuter les VBO. Toutefois, si vous créez des VBO qui tiennent trop de données, vous pouvez rencontrer d'autres problèmes.

Petit Vbos:

  • sont souvent plus faciles à gérer dans votre code de programme. Vous pouvez utiliser un nouveau VBO pour chaque objet que vous rendez. De cette façon, vous pouvez gérer vos objets très faciles dans votre monde
  • Si VBO est trop petit (seulement quelques triangles), vous ne gagnez pas beaucoup d'avantages. Beaucoup de temps sera perdu avec des tampons de commutation (et peut-être changer de shaders / textures) entre les tampons

    Grand Vbos:

    • Vous pouvez rendre des tonnes d'objets avec un seul dessinateurs () appelez les meilleures performances.
    • Selon vos données, il est possible de créer des frais généraux pour gérer beaucoup d'objets dans un seul VBO (que si vous souhaitez déplacer l'un de ces objets et faire pivoter un autre objet?).
    • Si vos VBO sont trop gros, il est possible qu'ils ne puissent pas être déplacés dans VRAM

      Les liens suivants peuvent vous aider:

      Spécification de Vertex Meilleures pratiques


0 commentaires

1
votes

Cela dépend aussi de ce que vous voulez faire avec ces sprites?

sont-ils dynamiques? Voulez-vous ne changer que le centre de quad ou peut-être modifier les quatre points?

Ceci est important car si vos données sont dynamiques, alors, de la manière la plus simple, vous devrez transférer de la CPU en GPU chaque image. Peut-être que vous pourriez effectuer tout calcul sur le GPU - par exemple en utilisant Geometry Shaders?

Aussi pour des quads / sprites très simples, on peut utiliser GL_Point_sprite. Avec celui-là, il faut n'envoyer qu'un seul sommet pour un quad entier. Mais l'inconvénient est qu'il est difficile de le faire pivoter ...


0 commentaires