Vejo que o OpenGL versões 3 e posteriores eliminam o uso da renderização do lado do cliente. O modo imediato foi eliminado e as matrizes de vértices parecem obsoletas. Em vez disso, se bem entendi, os VBOs são a principal maneira de renderizar vértices.
Embora eu veja a lógica por trás de ter uma maneira uniforme de renderizar tudo, será que os VBOs não têm grandes desvantagens em relação às matrizes de vértices? Eu pensei que os VBOs deveriam ser grandes buffers contendo> 1 MB de dados, geralmente. E se eu tiver uma cena com uma geometria menor? Eu tenho um gráfico de cena com um grande número de nós, cada um dos quais precisa de sua própria transformação etc. Cada nó também deve poder ser excluído separadamente, adicionado a separadamente etc. Eu estava usando matrizes de vértices antes. Portanto, minha primeira pergunta é se, se eu mudar para VBOs, haverá uma sobrecarga maior nos meus objetos de gráfico de cena agora porque um VBO precisa ser alocado para cada objeto.
Outra preocupação é que a geometria que estou renderizando pode ser altamente dinâmica. Na pior das hipóteses, pode haver momentos em que toda a geometria precise ser reenviada a cada quadro por algum período de tempo. As VBOs terão desempenho pior do que as matrizes de vértices nesse caso de uso ou as VBOs, na pior das hipóteses, funcionam tanto quanto as matrizes de vértices, mas não mais?
Então, em um formato mais conciso, minhas perguntas são:
1) Existe uma sobrecarga substancial na alocação / desalocação de VBOs (quero dizer o mero ato de configurar um buffer)?
2) Se estou atualizando os dados da CPU a cada quadro, isso pode ser substancialmente pior do que se eu tivesse usado matrizes de vértices?
E, finalmente, eu gostaria de saber:
3) Se a resposta para qualquer uma das perguntas acima for "sim", por que reprovar outros modos de renderização que podem ter vantagens sobre os VBOs? Há algo que estou faltando aqui, como técnicas que devo usar para mitigar alguns desses custos de alocação em potencial etc.?
4) As respostas para qualquer uma dessas perguntas mudam substancialmente dependendo da versão do OpenGL que estou usando? Se eu refatorar meu código para que seja compatível com o OpenGL 3 ou 4 usando VBOs de uma maneira que seja de bom desempenho, as mesmas técnicas provavelmente terão um bom desempenho com o OpenGL 2 ou será provável que certas técnicas sejam muito mais rápidas com o OpenGL 3 + e outros com OpenGL 2?
Fiz essa pergunta no estouro de pilha, mas estou postando novamente aqui porque percebi que este site pode ser mais apropriado para minha pergunta.