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. ASP.NET MVC: ¿Cuántos repositorios?
- 4. Cadena tiene cuántos parámetros
- 5. ¿Cuántos bytes por inodos?
- 6. ¿Cuántos EJB son demasiados?
- 7. MVP: cuántos presentadores
- 8. ¿Cuántos niveles de herencia
- 9. ¿Cuántos núcleos para SSIS?
- 10. ¿Cuántos niveles de optimización de GCC hay?
- 11. ¿Cuántos bytes toma una cadena? ¿Un char?
- 12. ¿Cuántos bytes ocupará una cadena?
- 13. ¿Cuántos espacios eliminará Java String.trim()?
- 14. Powershell, ¿cuántos reemplazos hizo usted?
- 15. Node.js: ¿Cuántos clientes de Redis?
- 16. NetLogo: 1 tick = ¿cuántos segundos?
- 17. jquery $ ('. Clase'). Each() ¿cuántos elementos?
- 18. Android ¿Cuántos hilos puedo llevar?
- 19. MSDTC: cuántos puertos se necesitan
- 20. ¿Cuántos bytes tiene una cadena
- 21. multithreading (openMP): cuántos subprocesos paralelos
- 22. ¿Cuántos segundos entre dos fechas?
- 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. ¿Cuántos objetos de cadena se creará
- 29. Cuenta cuántos elementos en un div
- 30. ¿Cuántos UID son posibles en Android?