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 ls
basit bir struct
nitelik yerini saklar.
Rendering bölümünde glBindBuffer
ve 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 glBufferSubData
bir VAO ile birlikte güncellemek mümkün mü?