O que é um OpenGL® Vertex Buffer?
Um buffer de vértice da Open Graphics Library® (OpenGL®) é uma área da memória do computador geralmente localizada diretamente em uma placa gráfica que permite acesso muito rápido a uma matriz de vértices e suas propriedades. Na maioria das vezes, um buffer de vértice OpenGL® é usado para criar um objeto de buffer de vértice (VBO), permitindo que objetos dentro de uma cena tridimensional (3D) sejam renderizados como parte de uma lista de exibição e não no modo imediato. Ocasionalmente, no entanto, um buffer de vértice pode ser usado fora de um VBO para armazenar informações sobre um objeto ou para facilitar as transformações em modelos complexos. Deve-se notar que um buffer de vértice não precisa estar localizado na memória da placa gráfica, porque pode ser alocado como qualquer estrutura de dados. Se o buffer de vértice OpenGL® for usado como parte de um VBO, a placa de vídeo que estiver sendo usada deverá suportar a extensão especial OpenGL® VBO para garantir que o buffer seja colocado na memória gráfica.
No nível mais básico, um buffer de vértice OpenGL® é apenas um buffer simples, uma área de memória alocada na qual os dados podem ser armazenados. Torna-se um buffer de vértice quando uma matriz de vértices é armazenada dentro dele. Uma matriz de vértices OpenGL® é uma matriz de estruturas de dados que define todas as propriedades de vértices individuais. Essas informações podem incluir os locais X, Y e Z do vértice na cena 3D, a cor do vértice, as propriedades normais e outras.
Na renderização no modo imediato, os comandos do OpenGL® são executados diretamente conforme são chamados de dentro de um programa. Nesses casos, é desnecessário ter uma matriz de vértices, porque os comandos para colocar e desenhar um vértice podem ser fornecidos diretamente ao hardware, embora isso possa causar sérios problemas de desempenho. Para renderização no modo não imediato, as informações sobre um objeto ou modelo 3D precisam primeiro ser colocadas em uma matriz de vértices, para que haja uma estrutura que o OpenGL® possa interpretar facilmente; esse array deve ser armazenado em uma área especial da memória conhecida como buffer de vértice OpenGL®.
Por si só, o buffer de vértice não possui necessariamente nenhum atributo especial além de ser uma coleção completa de informações usadas para desenhar um objeto. Quando o buffer de vértice OpenGL® é convertido em um objeto de buffer de vértice OpenGL® através da extensão OpenGL, no entanto, ocorre uma sequência especial de eventos para ajudar a otimizar o desenho do objeto definido no buffer de vértice. Nomeadamente, o buffer é alocado e armazenado na memória da placa gráfica, no lado do servidor da configuração cliente-servidor que o OpenGL® usa. Alguns cálculos também podem ser realizados com antecedência no VBO, para que possam ser renderizados o mais rápido possível. Fora de um VBO, um buffer de vértice comum geralmente não recebe esse tratamento e pode ser alocado e usado como qualquer outro tipo de dados.