Mevcut tüm doku birimlerini kullanmak iyi bir uygulama mudur?


9

Bir ağa birden çok doku uygularken, yumru haritalama gibi, dokuları genellikle ilk birkaç sabit doku birimine bağlarım, örneğin: diffüz = birim 0, yumru = birim 1, aynasal = birim 2, sonra her birini tekrar kullanmaya devam ediyorum farklı dokular ile farklı kafes. Ama her zaman neden glActiveTexturebu kadar çok doku birimini desteklediğini merak ettim (önceki bağlantıda en az 80 diyor).

Bu yüzden bana, dokuları yönetmenin olası bir yolunun, her bir üniteye farklı dokuları bağlamak ve etkin hale getirmek, sadece düzgün örnekleyici dizinini güncellemek olduğu ortaya çıktı. Bu, doku geçişlerinin sayısını azaltarak mükemmel hale getirmeyi geliştirmelidir. Maksimum doku birimlerinden daha az dokuya sahipseniz, asla bir dokuyu ayırmak zorunda kalmazsınız.

Gerçek zamanlı OpenGL uygulamaları için bu standart uygulama var mı (bunun D3D için de geçerli olduğuna inanıyorum)? Ve bu yaklaşımı benimsemenin belirgin olmayan performans sonuçları var mı? Bellek yükü belki?

Yanıtlar:


11

Modern donanım, OpenGL'nin maruz kaldığı doku bağlama noktaları kavramına sahip değildir. Aksine, gölgelendirici birimi, video belleğinde bulunduğu sürece potansiyel olarak herhangi bir dokuya hitap edebilen bir tanımlayıcı (sadece bir tür yağ işaretçisi) kullanır. Bağsız dokular gibi şeyleri mümkün kılan da budur . Dolayısıyla, mevcut uygulamalarda bulunan büyük miktarda "doku birimi", API'nin şu anda alakasız kısmını elden geçirmeye çalışıyor.

Bununla birlikte, yapmaya çalıştığınız şeyi uygulamanın tavsiye edilen yolu (dokuların yeniden bağlanmasından kaçınmak), hepsi olduğu sürece gölgelendiricideki bir dizi dokuya dinamik olarak endekslemenizi sağlayan doku dizileri kullanmaktır. aynı biçim ve boyutta. Bu sunu, modern OpenGL ile oluşturma sırasında sürücü ek yükünü azaltmak için bu ve diğer teknikler hakkında daha fazla ayrıntı içerir: Sıfır Sürücü Ek Yüküne Yaklaşma


Bu sunumu daha önce izledim, çok iyi. İlk paragrafta ne bahsettiğinizi bilmiyordum, bu bilgi için teşekkürler!
glampert
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.