2011-04-19 13 views
5
for (int i = 0; i < Number_Of_queries; i++) 
{ 
    glBeginQueryARB(GL_SAMPLES_PASSED_ARB, queries[i]); 

    Box[i] 

    glEndQueryARB(GL_SAMPLES_PASSED_ARB); 
} 

GPU GEMS 1'de önerilen yöntemin, belirli sayıda sorgulamanın gerçekleştirildiği tıkanma itkisi için önerildiğini merak ediyorum. Tanımlanan yöntemi kullanarak birbirinden bağımsız kutuları ayrı ayrı test edemezsiniz, bu yüzden aşağıdakileri yapmalısınız?OPENGL ARB_occlusion_query Oklüzyon

Testi Kutusu A -> Kutu A

Testi Kutusu B Render -> Kutu B

Testi Kutusu C Render -> Render Kutu C

vb ...

+0

Burada yeni olduğunuz için, kabul etme ve oylama özellikleriyle ilgili kendinizi bilgilendirdiğinizden emin olun. –

cevap

1

Doğru bir şekilde anladığımdan emin değilim, fakat bu, tüm kutuları (derinlemesine arabelleğe yazmamak) ilk olarak görüntülemenin ve ardından her nesneyi kontrol etmek için sorgu sonuçlarını kullanmanın saf uygulamasının dezavantajlarından biri değil midir? Ancak, tek bir kutunun sorgu sonucunu kullanma önerisi, boru hattını durduğu için daha da saf bir yaklaşımdır. Eğer bu bölümü okuyorsanız (bölüm 29'a atıfta bulunduğunuzu varsayarsak), her iki naif yaklaşımın dezavantajlarını gidermek için basit bir teknik sunarlar (yani, her şeyi normal bir hale getirir ve önceki karenin sorgu sonuçlarını kullanırlar).

0

Ben (... GPU taşlar makale bağlamak için iyi olurdu) böyle uzantıları açıklandığı gibi biraz asenkron sorgular hakkında karıştı düşünüyorum:

http://developer.download.nvidia.com/opengl/specs/GL_NV_conditional_render.txt

Ben doğru orada hatırlamıyorsam bir sonucun erişilebilirliğini engellemeden kontrol etmek için başka uzantılar da vardı.

Christian Rau'nun yalnızca "sorgulama, sonuç için bekle, sonuca dayalı şeyler yapma" konusuna işaret ettiği gibi, "işler" bölümünde ne kadar çalışmanın olduğuna bağlı olarak bunun sonucunda herhangi bir kazanç olmayabilir. Aslında, sorguyu yapmak, sadece tek bir çekiliş çağrısını kaydetmek için gidiş gelişini beklemek büyük olasılıkla hiç yardımcı olmayacaktır.