Gölgelendirici programlarını değiştirirken üniforma veya nitelikleri yeniden hatırlatmam gerekir mi?


11

Sahneyi oluşturmak genellikle benim durumumda hepsi aynı nitelikleri kullanan ve en azından bazı üniformaları paylaşan birden fazla gölgelendirici programı içerir. Düzgün çalışmalarını sağlamak için şu anda güvenli oynuyorum, yani gölgelendirici programları arasında her geçiş yaptığımda öznitelikleri yeniden hatırlıyorum ve uygun düzgün konumları elde ediyorum. Temelde her karede birden çok kez, ki bu muhtemelen en iyi yaklaşım değildir.

Peki, (genel olarak) gölgelendirici programlarını değiştirdikten sonra nitelikleri ve üniformaları yeniden bağlamak gerekli mi? Ve neden?

Eğer öyleyse, bunu programın başında bir kez yapmanın ve onlara tekrar dokunmak zorunda kalmanın bir yolu var mı (tekdüzen değerleri ayarlamak hariç)?

Yanıtlar:


12

Konumlarının her iki gölgelendiricide de aynı kalmasını sağladığınız sürece özellikleri yeniden hatırlamanız gerekmez. (Genellikle layout(location = X)GLSL'de sözdizimini kullanarak , ancak glBindAttribLocationeski varsa da yapılabilir .)

Ancak üniformalar, Gölgelendirici Nesnesi durumunun bir parçasıdır ve bu nedenle her gölgelendirici için en az bir kez ayarlanması gerekir. Bunun maliyetini en aza indirmenin bir yolu , tüm tekdüzen değerlerinizi içerecek ve daha sonra tek bir çağrı ile bir gölgelendiriciye bağlanabilecek Düzgün Bir Tampon Nesnesi kullanmaktır .


UBO bağlantınızda: "Son olarak, farklı programlar arasında bilgi paylaşmak için kullanılabilirler. Bu nedenle, tek bir arabellek üzerinde değişiklik yapmak, birden fazla programdaki üniformaların etkin bir şekilde güncellenmesine izin verebilir."
Zouch
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.