2012-01-11 18 views
5

glBufferData'a verdiğim arabelleği oluşturarak veya değiştirerek sahneyi yapıyorum. Vertex Array Objects hakkındaki anlayışım, kullanıyorum tüm VBO'ların manuel olarak bağlanmasını atlamama izin vermeleri. Arabamı her zaman güncellediğimde durum böyle mi oluyor?VBO'yu değiştirmem gerekiyorsa VAO'mu yeniden kurmam gerekiyor mu?

VAO'yu bağlayabilirim, glBufferData numaralı telefonu arayarak köşeleri ve endeksleri (şu anda sahip olduğum yalnızca iki VBO'yu) güncelleyebilir ve sonra görüntüleyebilir miyim?

Bellek eşleştirmelerini VBO'larla kullanabilir miyim? Sonra VAO'yu bağlayabilir, arabellek değiştirebilir, sonra render edebilirim?

VAO tam olarak ne yapar? Fonksiyonu, vertex özelliklerinin VBO'larıma bağlanmasını sağlayan ve otomatikleştiren bir kısayolun mu? Verilerin veya bağlamaların sahipliğini mi alıyor?

cevap

3

Muhtemelen bunu sınamanız gerekir, fakat benim anlayışımdan VBO'lara, oluşturulduğunda kimlikler verilir ve bir VAO, her bir verteks özniteliğini, kullandığı VBO Kimliği ile birlikte yalnızca referans alır. glBufferData veya glBufferSubData'u arayabilmeniz gerekir. Çekiş çağrısının hemen öncesinde bellek eşleştirmesi yapılacağından emin değilim, ancak kesinlikle VAO ile çizim arasında bir şeyler yapabilirsiniz. Bir VAO, VBO'ları kilitlemez veya bunlara erişimi kısıtlamaz.

Genel olarak, bir VAO, yalnızca nitelikleri ve tüm ayarlarını (bağlı VBO, adım, ofset vb.) Saklar ve bağlı olduğunda öznitelikleri otomatik olarak bağlar. glBindVertexArray(0); numaralı telefonu arayana kadar, tüm verteks nitelikleri bağlı VAO'ya bağlanır.

+0

Bu nedenle, VAO hangi VBO'yu bağlandığımı etkilemiyor mu? Onları bağlamanız ve üzerlerinde 'glBufferData 'öğesini çağırmam gerek. –

+0

@Robert Rouhani Köşe düzeninizin çoğu çizimde aynı olduğunu düşünürsek, her VBO için farklı bir köşe öznitelikleri kümesini saklamanız oldukça saçmadır. Bundan kaçınmaya çalışmak için bir süre aradım ama hiçbir yere gitmedim. – Zebrafish

+0

@TitoneMaurice Alınan alan miktarı minimum olmalı (bayt sırasına göre), fazladan GL'nin farklı niteliklere bağlanma çağrıları darboğaz olmamalıdır. İstediğin en yakın şey instancing, başka bir şey benim düşüncemde gereksiz/zamansal optimizasyon olurdu. –

İlgili konular