Veo que OpenGL versiones 3 y posteriores eliminan el uso del renderizado del lado del cliente. El modo inmediato ha sido eliminado, y las matrices de vértices parecen estar en desuso. En cambio, si entiendo correctamente, los VBO son la principal forma de representar vértices.
Si bien veo la lógica detrás de tener una forma uniforme de representar todo, ¿es el caso de que los VBO no tienen inconvenientes importantes sobre las matrices de vértices? Pensé que se suponía que los VBO eran grandes memorias intermedias que contenían> 1 MB de datos, generalmente. ¿Qué pasa si tengo una escena que tiene mucha geometría más pequeña? Tengo un gráfico de escena con una gran cantidad de nodos, cada uno de los cuales necesita su propia transformación, etc. Cada nodo también debería poder eliminarse por separado, agregarse por separado, etc. Estaba usando matrices de vértices antes. Entonces, mi primera pregunta es si, si cambio a VBO, habrá una mayor sobrecarga en mis objetos de gráficos de escena ahora porque es necesario asignar un VBO para cada objeto.
Otra preocupación es que la geometría que estoy renderizando puede ser muy dinámica. En el peor de los casos, puede haber ocasiones en que toda la geometría deba volver a enviarse a cada cuadro durante un período de tiempo. ¿Los VBO tendrán un rendimiento peor que las matrices de vértices en este caso de uso, o las VBO en el peor de los casos funcionarán tanto como las matrices de vértices pero no más?
Entonces, en un formato más conciso, mis preguntas son:
1) ¿Existe una sobrecarga considerable para asignar / desasignar VBO (me refiero al simple acto de configurar un búfer)?
2) Si estoy actualizando los datos de la CPU en cada cuadro, ¿puede esto ser mucho peor que si hubiera usado matrices de vértices?
Y finalmente, me gustaría saber:
3) Si la respuesta a cualquiera de las preguntas anteriores es "sí", ¿por qué despreciar otros modos de representación que podrían tener ventajas sobre los VBO? ¿Hay algo que me falta aquí, como las técnicas que se supone que debo usar para mitigar algunos de estos posibles costos de asignación, etc.?
4) ¿Las respuestas a alguna de estas preguntas cambian sustancialmente dependiendo de qué versión de OpenGL estoy usando? Si refactorizo mi código para que sea compatible con OpenGL 3 o 4 utilizando VBO de una manera que sea eficiente, ¿será probable que las mismas técnicas funcionen bien con OpenGL 2, o es probable que ciertas técnicas sean mucho más rápidas con OpenGL 3? + y otros con OpenGL 2?
Hice esta pregunta sobre el desbordamiento de la pila, pero estoy volviendo a publicar aquí porque me di cuenta de que este sitio puede ser más apropiado para mi pregunta.