Aqui está um artigo decente sobre VBOs.
atuação
Aqui está uma boa visão geral da semântica de chamada.
Aqui está outra boa visão geral dos problemas de desempenho; nele vemos que os VBOs são mais eficientes que os arrays.
A razão pela qual preferimos VBOs é que os dados são carregados no cartão e, portanto, você não precisa transferi-lo para todos os quadros. Dependendo do tipo de VBO criado, você pode fornecer dicas ao driver gráfico sobre o uso (escrever muitos, ler muitos vs. escrever muitos, nunca ler, etc.).
Uso
Os VBOs são realmente bons para geometria estática, como terrenos que você não espera mudar, ou para geometria instanciada.
As matrizes de vértice são boas para dados que mudam com frequência, mas que também são lidos pela máquina host - portanto, para renderizar diretamente os dados que estão sendo manipulados (os buffers de dados do telêmetro a laser, por exemplo, são onde eu os usei) com frequência. Se você conseguir nunca ler os dados no dispositivo host (basta empurrá-los para o cartão), os VBOs no modo somente gravação são uma boa opção.
Portabilidade
Matrizes de vértices do lado do cliente
Elas estão disponíveis no OpenGL anterior à 3.0, obsoletas na 3.0 e foram substituídas na versão 3.1+. O OpenGL ES os suporta (o OpenGL ES 2 não).
VBOs
Estes estão disponíveis após o OpenGL 1.5. Essa é a única maneira de armazenar dados de geometria no OpenGL ES 2 (e, portanto, WebGL).