OpenGL VAOにはどの状態が保存されているのかと思っていました。VAOには、バッファリングされた頂点の頂点仕様に関連する状態(バッファ内の属性、バインドされているバッファなど)が含まれていることがわかりました。VAOの正しい使用法をよりよく理解するために、VAOがどの状態を保持しているかを正確に知りたいです。
VAOの使用をどのように想定するか
簡単な例から、VAOの正しい使用法は次のとおりであることがわかりました。
セットアップ
Generate VAO
BindVAO
---- Specify vertex attributes
---- Generate VBO's
---- BindVBO's
-------- Buffer vertex data in VBO's
---- Unbind VBO's
Unbind VAO
レンダリング
Bind VAO
---- Draw
Unbind VAO
このことから、少なくとも頂点バッファーバインディングと頂点属性の仕様がVAOに格納されていると想定しています。ただし、この使用パターンが(複数の)テクスチャと(複数の)シェーダープログラムが作用する状況にどのように拡張されるかはわかりません。あるアクティブなシェーダプログラム VAOに保存されますか?また、テクスチャバインド(サンプリング/ラッピング設定)もVAOに保存されますか?ユニフォームにも同じ?
したがって、私の質問は次のとおりです。
- OpenGL VAOにはどのような正確な状態が保存されていますか?(VBOバインディング、属性仕様、アクティブシェーダープログラム、テクスチャバインディング、テクスチャサンプリング/ラッピング設定、ユニフォーム...?)
- 関連するサンプリング/ラッピング設定を持つ(複数の)テクスチャ、(複数の)シェーダープログラム、ユニフォームが関係する、より複雑なレンダリング設定でVAOを正しく使用するにはどうすればよいですか?