Pada semua tutorial yang dapat saya temukan tentang VAO (Vertex Array Objects), mereka menunjukkan cara menggunakannya dengan mengkonfigurasi atribut vertex dan mengikat VBO (Vertex Buffer Object). Tapi saya ingin membuat VAO yang akan dikonfigurasi untuk satu set VBO dalam kombinasi dengan shader tetap, di mana setiap buffer menggunakan pola data yang sama (vertex, uv, warna, dll). Jadi, saya ingin membuat satu VAO untuk beberapa VBO yang akan ditarik menggunakan satu shader.
Saya tidak dapat menemukan demo tentang ini, jadi saya memutuskan untuk mencobanya. Tetapi itu tidak berhasil dan crash pada glDrawArraypanggilan. Sepertinya VBO tidak terikat. Ini kode yang saya gunakan:
Rendering:
/* Prepare vertex attributes */
glBindVertexArrayOES(vao);
/* Upload the buffer to the GPU */
glBindBuffer(GL_ARRAY_BUFFER, pool->next());
glBufferSubData(GL_ARRAY_BUFFER, 0, parts * buffer.stride() * 6, buffer.getBuffer());
/* Draw the triangles */
glDrawArrays(GL_TRIANGLES, 0, parts * 6);
glBindVertexArrayOES(0);
Pembuatan VAO:
glBindVertexArrayOES(vao);
glEnableVertexAttribArray(ls.position);
glVertexAttribPointer(ls.position, 2, GL_FLOAT, GL_FALSE, buffer.stride(), 0);
glEnableVertexAttribArray(ls.color);
glVertexAttribPointer(ls.color, 3, GL_FLOAT, GL_FALSE, buffer.stride(), GL_BUFFER_OFFSET(buffer.dataTypeSize * 2));
glBindVertexArrayOES(0);
Di mana lssederhana structyang menyimpan lokasi atribut.
Di bagian Rendering, menukar glBindBufferdan glBindVertexArrayOESsekitar juga tidak berhasil.
Jadi, pertanyaannya adalah: Apakah mungkin untuk melakukannya, atau apakah saya harus membuat untuk setiap buffer sebuah VAO? Dan jika saya harus membuat VAO untuk setiap VBO, apakah mungkin untuk memperbarui data VBO menggunakan glBufferSubDatadalam kombinasi dengan VAO?