Eu queria saber qual estado é armazenado em um OpenGL VAO. Entendi que um VAO contém um estado relacionado às especificações de vértices em buffer (quais atributos estão nos buffers e quais buffers estão ligados ...). Para entender melhor o uso correto dos VAO, eu gostaria de saber exatamente qual estado eles mantêm.
Como presumo que os VAO devem ser usados
A partir de exemplos simples, entendi que o uso correto dos VAO é o seguinte:
Configuração
Generate VAO
BindVAO
---- Specify vertex attributes
---- Generate VBO's
---- BindVBO's
-------- Buffer vertex data in VBO's
---- Unbind VBO's
Unbind VAO
Renderização
Bind VAO
---- Draw
Unbind VAO
A partir disso, suponho que pelo menos as ligações do buffer de vértice e as especificações de atributo de vértice sejam armazenadas no VAO. No entanto, não tenho certeza de como esse padrão de uso se estende a situações em que (várias) texturas e (vários) programas de sombreador entram em cena. O programa shader ativo está armazenado no VAO? E as ligações de textura (com suas configurações de amostragem / quebra automática ) também são armazenadas no VAO? O mesmo vale para uniformes ?
Portanto, minhas perguntas são:
- Que estado exato é armazenado em um OpenGL VAO ? (Ligações VBO, especificações de atributos, programa de sombreador ativo, ligações de textura, configurações de amostragem / quebra automática de textura, uniformes ...?)
- Como uso corretamente os VAOs em uma configuração de renderização mais complexa em que (várias) texturas estão associadas a configurações de amostragem / quebra automática, (vários) programas de sombreamento e uniformes?