Por lo tanto, 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.¿Cuántos VBOs uso?
Respuesta
No debe utilizar 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 se pueda responder en una oración.
Creación de una nueva VBO para cada quad no le dará un aumento de rendimiento real. Si lo hace, se perderá mucho tiempo con glBindBuffer
llamadas para cambiar los VBO. Sin embargo, si crea VBO que contienen demasiados datos, puede tener otros problemas.
pequeñas OISCIV:
- suelen ser más fáciles de manejar en el código del programa. Puede usar un nuevo VBO para cada objeto que represente. De esta forma puede administrar sus objetos muy fácilmente en su mundo
- Si las VBO son demasiado pequeñas (solo unos pocos triángulos) no obtendrá mucho beneficio. Una gran cantidad de tiempo se pierde con el cambio amortiguadores (y tal vez cambiar shaders/texturas) entre tampones
OISCIV grandes:
- Puede hacer toneladas de objetos con una sola
drawArrays()
llamada para un mejor rendimiento. - En función de los datos de su posible que se crea gastos generales para la gestión de una gran cantidad de objetos en un solo VBO (si lo desea mover uno de estos objetos y rotar otro objeto?).
- Si sus OISCIV son demasiado grandes su posible que no se pueden mover en VRAM
Los siguientes enlaces pueden ayudarle a:
utilizar una (o un pequeño número de) VBO (s) para contener todo/la mayor parte de su geometría.
En general, la API llama a menos que se necesita para hacer que su escena, mejor.
También depende de lo D que usted quiere 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 a continuación, en la forma más simple, se tiene que transferir desde la CPU a la 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 quads muy simples/sprites se puede utilizar GL_POINT_SPRITE. Con eso hay que enviar solo un vértice para quad completo. Pero el inconveniente es que es difícil rotarlo ...
- 1. Aprendiendo a usar VBOs correctamente
- 2. ¿Cómo uso OpenGL 3.x VBOs para renderizar un mundo dinámico?
- 3. MVP: cuántos presentadores
- 4. ASP.NET MVC: ¿Cuántos repositorios?
- 5. ¿Cuántos EJB son demasiados?
- 6. ¿Cuántos núcleos para SSIS?
- 7. Cadena tiene cuántos parámetros
- 8. ¿Cuántos niveles de herencia
- 9. ¿Cuántos bytes por inodos?
- 10. ¿Cuántos niveles de optimización de GCC hay?
- 11. ¿Cuántos bytes toma una cadena? ¿Un char?
- 12. Powershell, ¿cuántos reemplazos hizo usted?
- 13. Node.js: ¿Cuántos clientes de Redis?
- 14. ¿Cuántos espacios eliminará Java String.trim()?
- 15. Android ¿Cuántos hilos puedo llevar?
- 16. ¿Cuántos segundos entre dos fechas?
- 17. jquery $ ('. Clase'). Each() ¿cuántos elementos?
- 18. ¿Cuántos bytes ocupará una cadena?
- 19. ¿Cuántos bytes tiene una cadena
- 20. NetLogo: 1 tick = ¿cuántos segundos?
- 21. multithreading (openMP): cuántos subprocesos paralelos
- 22. MSDTC: cuántos puertos se necesitan
- 23. ¿Cuántos datos de la sesión son demasiado?
- 24. ¿Cuántos child_processes debería fork() en node.js?
- 25. ¿Cuántos modelos de desarrollo asincrónico en .NET?
- 26. ¿Cuántos lectores simultáneos puede tener un pthread_rwlock?
- 27. Demasiados archivos abiertos: cuántos están abiertos, lo que son, y cuántos puede la JVM abierta
- 28. jQuery: ¿Vea cuántos elementos concuerda un selector?
- 29. ¿Cuántos caracteres puede tener Java String?
- 30. ¿Cuántos argumentos de constructor son demasiados?