Bir Vertex Arabellek Nesnesi'nin nasıl kullanıldığını ve hemen modda çizim üzerinde büyük bir performans artışı sağladığını anlıyorum. Bir sürü 2D dörtlü (sprite) çizeceğim ve her biri için bir VBO oluşturmam gerektiğini mi yoksa tüm verileri saklamak için bir VBO oluşturmam gerektiğini mi bilmek istiyorum?Kaç tane VBO kullanıyorsunuz?
cevap
Her hareketli/dörtlü için yeni bir VBO kullanmamalısınız. Yani hepsini tek bir VBO'ya koymanız, sizin durumunuzda daha iyi bir çözüm olacaktır. Ancak genelde bunun bir cümlede yanıtlanabileceğini düşünmüyorum.
Her bir Quad için yeni bir VBO oluşturmak size gerçek bir performans artışı sağlamamaktadır. Bunu yaparsanız, VBO'ları değiştirmek için glBindBuffer
çağrıları ile çok zaman harcanır. Ancak çok fazla veri barındıran VBO'lar oluşturursanız, başka sorunlara da girebilirsiniz.
Küçük VBOS:
- sık programı kodunda ele kolaydır misiniz. Oluşturduğunuz her Nesne için yeni bir VBO kullanabilirsiniz. Böylelikle, nesnelerinizi dünyasında çok kolay yönetebilirsiniz
- VBO'lar çok küçükse (sadece birkaç üçgen) çok fazla kazanç elde edemezsiniz. Çok zaman tamponları arasında
Büyük VBOS tamponlarını anahtarlama (ve belki shader/dokular anahtarlama) ile kaybedilir:
- En iyi performans için tek
drawArrays()
çağrıyla nesnelerin ton hale getirebilir. - Verilerinize bağlı olarak, tek bir VBO'da çok fazla nesneyi yönetmek için ek yük oluşturmanızı sağlayın (bu nesnelerden birini taşımak ve başka bir nesneyi döndürmek isterseniz ne olacak?).
- sizin VBOS onlar VRAM içine taşınamaz mümkündür onun çok büyükse
Aşağıdaki bağlantılar yardımcı olabilir:
Geometrinizin tümünü/birçoğunu korumak için bir (veya az sayıda) VBO (s) kullanın.
Genelde, daha az API çağrısı, daha iyi bir sahne oluşturmak için alır.
Ayrıca istediğiniz d neyi bağlıdır O spritelarla mı?
Dinamik mi? Sadece dörtlü merkezi değiştirmek mi yoksa dört noktayı değiştirmek mi istiyorsunuz?
Bu önemlidir çünkü verileriniz dinamikse, en basit şekilde, cpu'dan her bir kareye gpu aktarmanız gerekir. Belki de tüm hesaplamayı GPU'da gerçekleştirebilirsiniz - örneğin geometri gölgelendiricileri kullanarak?
Ayrıca çok basit dörtlü/sprite için GL_POINT_SPRITE kullanabilirsiniz. Bununla birlikte, tüm dörtlü için sadece bir tepe noktası göndermemiz gerekiyor. Ama dezavantajı, onu döndürmek zor olmasıdır ...
- 1. MVP - Kaç tane sunum yapıyor
- 2. Powershell, kaç tane değişiklik yaptınız?
- 3. Kaç tane aktiviteye ihtiyacım var?
- 4. JavaScript'te kaç tane parametre var?
- 5. Bir etkinliğe kaç tane dinleyicinin bağlandığı sayılır?
- 6. Kaç tane S3 kovaya sahip olmalıyım?
- 7. Android kaç tane iş parçacığı gidebilirim?
- 8. Mathematica'da kaç tane çekirdek paralel çalışıyor?
- 9. Nöral ağım kaç tane çıkış nöronuna sahiptir?
- 10. Google App Engine’de kaç tane parça kırdı?
- 11. Bugün x86'da kaç tane talimat var?
- 12. XNA, kaç tane (düşük poli) model kullanabilir?
- 13. node.js içinde kaç tane child_processes fork() yapmalıyım?
- 14. TCP Yeniden İletim: Kaç tane paket gönderilecek?
- 15. Çizim VBO
- 16. Android ve ios'un kaç tane port numarası var?
- 17. Projemin Visual Studio'da kaç tane kod içerdiğini nasıl gösteririm?
- 18. AFNetworking'e tek bir seferde kaç tane resim yüklenebilir
- 19. WatchOS2 WCSession WCSession'ın WatchKitExtension'ta kaç tane temsilcisi var?
- 20. Github'da bireysel hesap için kaç tane kamu deposu yapılabilir
- 21. Kaç tane UIApplicationShortcutItems'iniz için bir sınır var mı?
- 22. Bir dönüşüm olmadan ggplot2'de ölçeklerin kaç tane olduğunu belirterek?
- 23. Kaç tane System.Timers.Timer örneği oluşturabilirim? Ne kadar ölçeklendirebilirim?
- 24. gmail-api kaç tane okunmamış olduğunu kontrol etmek ve kullanıcı
- 25. Bir yöntemde bildirilen statik değişkenlerden kaç tane örnek var?
- 26. AppDomain başına kaç tane app.config dosyasına sahip olursunuz?
- 27. iPhone Mobile Safari, Kaç tane paralel paralel bağlantı var?
- 28. Ratchet/Websockets: Bir nesneye kaç tane müşteri abone oluyor?
- 29. Docker | Tüm kapları nasıl kaldırabilirim ama bir kaç tane
- 30. Frama-C WP eklentisi kaç tane geçici değişken kullanabilir?