Nvidia 290.10 64bit sürücülerini kullanan linux tabanlı bir C++ OpenGL uygulaması üzerinde çalışıyorum. Oldukça çok sayıda canlı veriyi kullanması nedeniyle bellek ayak izini azaltmaya çalışıyorum.libGL yığın kullanımı
Yığın kullanımını analiz etmek için valgrind/massif kullanıyorum ve şu anda çeşitli şeyleri optimize etmeme yardımcı olurken, şu an kullanılan yığın belleğin en büyük yığını libGL tarafından tahsis edildi. Eşiği nasıl belirlediğim önemli değil, masif bu tahsislerin nereden geldiğini detaylı olarak görmeme izin vermiyor, sadece libGL. Yoğun zamanlarda, libGL tarafından ayrılan yaklaşık 250MB (toplam 900MB'lık toplam yığın kullanımından) görüyorum. Ekran kartında, VBO'lar ve Tekstiller (benzer şekilde büyük bir 4096 * 4096 doku) gibi benzer miktarda bellek var.
Yani, GPU belleğine yüklediklerim kadar benzer miktarda bellek libGL tarafından yığına ayrılıyormuş gibi görünür. LibGL tahsisleri de VBOs doruklarının hacmi zirveye çıktığında zirveye ulaşır. Bu normal mi? Çok fazla GPU belleğine sahip olmanın avantajlarından biri de RAM'i serbest tutmasıdır diye düşündüm.
VB'de "glBufferData" için hangi kullanımları belirttiniz? – KillianDS
VBO'ların büyük bir kısmı için, GL_STATIC_DRAW. Bir durumda GL_STREAM_DRAW, ancak uygulamanın bu kısmı devre dışı bırakılmış olsa bile davranış aynı. – pholz
@KillianDS fark etmez, çünkü kullanım sadece bir ipucu, zorunlu değil. Ayrıca OpenGL çeşitli nedenlerden dolayı bir kopyasını bulundurmalıdır. – datenwolf