electronica opengl vbo

opengl - electronica - ¿Cuántos VBOs uso?



vbo electronica (3)

Use uno (o un número pequeño de) VBO (s) para mantener la totalidad o la mayor parte de su geometría.

En general, cuantas menos llamadas API se necesiten para representar tu escena, mejor.

Así que entiendo cómo usar un Objeto Buffer Vertex, y que ofrece un gran aumento en el rendimiento sobre el dibujo en modo inmediato. Dibujaré muchos quads 2D (sprites), y quiero saber si se supone que debo crear un VBO para cada uno, o crear un VBO para guardar todos los datos.


¿Depende también de qué d quieras hacer con esos sprites?

¿Son dinámicos? ¿Desea cambiar solo el centro del quad o quizás modificar los cuatro puntos?

Esto es importante porque si sus datos son dinámicos, entonces, de la manera más simple, tendrá que transferir de cpu a gpu cada cuadro. ¿Tal vez podría realizar todos los cálculos en la GPU, por ejemplo, utilizando sombreadores de geometría?

También para cuadrículas / sprites muy simples se puede usar GL_POINT_SPRITE. Con eso hay que enviar solo un vértice para quad completo. Pero el inconveniente es que es difícil rotarlo ...


No debe usar un nuevo VBO para cada sprite / quad. Así que ponerlos a todos en una sola VBO sería la mejor solución en su caso.

Pero, en general, no creo que esto pueda ser respondido en una oración.

Crear un nuevo VBO para cada Quad no le dará un aumento de rendimiento real. Si lo hace, perderá mucho tiempo con glBindBuffer llamadas glBindBuffer para cambiar los VBO. Sin embargo, si crea VBO que contienen demasiados datos, puede tener otros problemas.

VBO pequeñas:

  • A menudo son más fáciles de manejar en el código de su programa. Puede usar un nuevo VBO para cada objeto que represente. De esta forma puedes administrar tus objetos muy fácilmente en tu mundo
  • Si las VBO son demasiado pequeñas (solo unos pocos triángulos) no obtendrás mucho beneficio. Se perderá mucho tiempo con la conmutación de búferes (y quizás cambiando sombreadores / texturas) entre búferes

Grandes VBOs:

  • Puede renderizar toneladas de objetos con una sola llamada drawArrays() para obtener el mejor rendimiento.
  • Dependiendo de sus datos, es posible que cree una sobrecarga para gestionar una gran cantidad de objetos en un solo VBO (¿y si quiere mover uno de estos objetos y rotar otro objeto?).
  • Si sus VBO son demasiado grandes, es posible que no se puedan mover a VRAM

Los siguientes enlaces pueden ayudarlo a:

Vertex Specification Best Practices