基本的に使用する関数は次の3つ
- glGenVertexArrays
- glBindVertexArray
- glDeleteVertexArrays
▲使い方はテクスチャオブジェクトやバッファオブジェクトと同じ。
※いくつ作るかを指定し、バインドする
【例】
//VAO用ID
GLuint VaoId[2];
… …
//vboを作成+VAOでカプセル化する
void BuildVBO()
{
//Vao2つ作成
glGenVertexArrays(2,&VaoId[0]);
glBindVertexArray(VaoId[0]);//vao切り替え
glGenBuffers(2, &VboId[0]);//VBO2つ作成
//-------------- VBO1つ目 ----------------------//
glBindBuffer(GL_ARRAY_BUFFER, VboId[0]); //バインド
//--- データをVBOにコピーする …等 ---//
glEnableClientState(GL_VERTEX_ARRAY);
… …
glVertexPointer(3, GL_FLOAT, 0, 0);
//VAO切り替え
glBindVertexArray(VaoId[1]);
//---------------- VBO 2つ目 ----------------------//
glBindBuffer(GL_ARRAY_BUFFER, VboId[1]); //バインド
//-- データをVBOにコピーする …等 --//
glEnableClientState(GL_VERTEX_ARRAY);
… …
glVertexPointer(3, GL_FLOAT, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0); //アンバインド
glBindVertexArray(0);
}
void DRAW()
{
glBindVertexArray(VaoId[0]);//vao切り替え
glDrawArrays(GL_QUADS,0,4*6);
glBindVertexArray(VaoId[1]);//vao切り替え
glDrawArrays(GL_TRIANGLES,0,3*4);
glBindVertexArray(0);//vao切り替え
}
▲このように、カプセル化する状態の直前に記述する。