Zastanawiałem się, jaki stan jest przechowywany w OpenGL VAO. Zrozumiałem, że VAO zawiera stan związany ze specyfikacją wierzchołków buforowanych wierzchołków (jakie atrybuty znajdują się w buforach i jakie bufory są powiązane, ...). Aby lepiej zrozumieć prawidłowe użycie VAO, chciałbym dokładnie wiedzieć, w jakim są stanie.
Jak zakładam, należy użyć VAO
Z prostych przykładów zrozumiałem, że prawidłowe użycie VAO jest następujące:
Ustawiać
Generate VAO
BindVAO
---- Specify vertex attributes
---- Generate VBO's
---- BindVBO's
-------- Buffer vertex data in VBO's
---- Unbind VBO's
Unbind VAO
Wykonanie
Bind VAO
---- Draw
Unbind VAO
Na podstawie tego zakładam, że co najmniej powiązania bufora wierzchołków i specyfikacje atrybutów wierzchołków są przechowywane w VAO. Nie jestem jednak pewien, w jaki sposób ten wzorzec użytkowania rozciąga się na sytuacje, w których wchodzą (wiele) tekstur i (wiele) programów do cieniowania. Czy aktywny program cieniujący jest przechowywany w VAO? I czy wiązania tekstur (wraz z ustawieniami próbkowania / zawijania ) są również przechowywane w VAO? To samo dotyczy mundurów ?
Dlatego moje pytania to:
- Jaki dokładnie stan jest przechowywany w OpenGL VAO ? (Powiązania VBO, specyfikacje atrybutów, aktywny program cieniujący, wiązania tekstur, ustawienia próbkowania / zawijania tekstur, mundury ...?)
- Jak poprawnie używać VAO w bardziej złożonej konfiguracji renderowania, w której zaangażowane są (wiele) tekstur z powiązanymi ustawieniami próbkowania / zawijania, (wiele) programów cieniujących i mundurów?