Mi chiedevo quale stato è archiviato in un VAO OpenGL. Ho capito che un VAO contiene uno stato correlato alle specifiche dei vertici dei vertici con buffer (quali attributi sono nei buffer e quali buffer sono associati, ...). Per comprendere meglio l'uso corretto dei VAO, mi piacerebbe sapere esattamente quale stato detengono.
Come presumo che VAO dovrebbe essere usato
Da semplici esempi, ho capito che l'uso corretto dei VAO è il seguente:
Impostare
Generate VAO
BindVAO
---- Specify vertex attributes
---- Generate VBO's
---- BindVBO's
-------- Buffer vertex data in VBO's
---- Unbind VBO's
Unbind VAO
interpretazione
Bind VAO
---- Draw
Unbind VAO
Da ciò, presumo che almeno le associazioni del buffer dei vertici e le specifiche degli attributi dei vertici siano archiviate nel VAO. Non sono sicuro, tuttavia, come questo modello di utilizzo si estenda a situazioni in cui (più) trame e (più) programmi shader entrano in gioco. Il programma shader attivo è memorizzato nel VAO? E anche i vincoli di trama (con le loro impostazioni di campionamento / avvolgimento ) sono memorizzati nel VAO? Idem per le uniformi ?
Pertanto, le mie domande sono:
- Quale stato esatto è memorizzato in un VAO OpenGL ? (Collegamenti VBO, specifiche degli attributi, programma shader attivo, collegamenti trama, impostazioni campionamento / avvolgimento trama, uniformi ...?)
- Come posso utilizzare correttamente i VAO in una configurazione di rendering più complessa in cui sono coinvolte (più) trame con impostazioni di campionamento / avvolgimento associate, (più) programmi shader e uniformi?