VAO'lar (Vertex Array Objects) hakkında bulabileceğim tüm eğitimlerde, vertex niteliklerini yapılandırarak ve bir VBO (Vertex Buffer Object) bağlayarak bunları nasıl kullanacaklarını gösterirler. Ancak, her arabellek aynı veri desenini (tepe noktası, uv, renk vb.) Kullantığı sabit bir gölgelendirici ile birlikte bir dizi VBO için yapılandırılacak bir VAO oluşturmak istiyorum. Bu nedenle, bir gölgelendirici kullanılarak çizilecek birden çok VBO için bir VAO oluşturmak istiyorum.
Bu konuda herhangi bir demo bulamadım, bu yüzden sadece denemeye karar verdim. Ama çalışmıyor ve glDrawArrayçağrıda çöküyor . Görünüşe göre VBO bağlı değil. İşte kullanıyorum kodu:
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);
VAO Oluşturma:
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);
Nerede lsbasit bir structnitelik yerini saklar.
Rendering bölümünde glBindBufferve glBindVertexArrayOESçevresini değiştirmek işe yaramadı.
Yani soru şu: Bunu yapmak mümkün mü, yoksa her tampon için bir VAO oluşturmak zorunda mıyım? Ve her bir VBO için bir VAO oluşturmam gerekirse, VBO'nun verilerini glBufferSubDatabir VAO ile birlikte güncellemek mümkün mü?