SORU
26 Ocak 2010, Salı


opengl: () vs glFinish glFlush()

Sorun glFlush çağıran pratik arasındaki farkı ayırt geçiriyorum() ve glFinish().

Doktorların söylediği glFlush() ve glFinish() sürün tamponlu işlemleri için opengl böylece olabilirsin emin olacak kadar idam, aradaki fark bu glFlush() hemen döner gibi glFinish() blok kadar tüm işlemler tamamlandı.

Tanımları okuduktan sonra, eğer glFlush kullansam diye düşündüm() muhtemelen daha fazla işlemleri yürütmek daha openGL gönderme sorun haline çalıştırmak istiyorum. Yani, sadece deneyin, ben takas benim glFinish() için bir glFlush() ve bak şu işe, benim programı koştu (bildiğim kadarıyla söyleyebilirim), aynı; kare hızları, kaynak kullanımı, her şey aynıydı.

Eğer iki arama arasında çok fark varsa, ya da eğer benim kodu farklı çalışma yapar mı diye merak ediyorum. Ya da bir diğer vs. kullanılmalıdır. Ben de düşündüm ki openGL ki biraz ara gibi glİsDone() kontrol olsun ya da olmasın tamponlu komutları için bir glFlush() veya tam olmayan (yani yok gönderme işlemleri için openGL daha hızlı olabilir idam), ama ben bulmak gibi bir işlev.

Benim kod tipik oyun döngü

while (running) {
    process_stuff();
    render_stuff();
}

CEVAP
27 Ocak 2010, ÇARŞAMBA


Bu komutlar OpenGL ilk günlerinden bu yana var olan akıl. glFlush önceki OpenGL komutları sağlarsonlu zaman içinde tamamlamak zorundadır(OpenGL 2.1 specs Sayfa 245). Eğer doğrudan ön tampon çizerseniz, bu OpenGL sürücüleri çok gecikmeden çizim başlar sağlayacaklardır. Her nesne sonra glFlush çağırdığınızda ekranda nesne sonra nesne, görünen karmaşık bir sahne düşünün. Çift tampon kullanırken ancak, glFlush değişiklikleri arabellekleri takas kadar görünür olmaz çünkü hiç bir etkisi yoktur pratikte.

glFinishprviously verilen komutları tüm etkileri kadar döndürmez [...] tam anlamıyla. Bu programın yürütülmesi için her pikseli çizilir ve OpenGL daha fazla bir şey yapmak zorunda kadar burada bekleyeceği anlamına gelir. Eğer doğrudan ön tampon oluşturma, glFinish işletim sistemi ekran görüntüleri almak için çağrı kullanmadan önce yapmak için çağrı. Tamamlamak için zorunlu bir değişiklik görmüyorum çünkü çift arabelleği için çok daha yararlıdır.

Eğer çift tamponlama kullanıyorsanız, muhtemelen ne glFlush ne glFinish gerek kalmaz. SwapBuffers örtülü olarak OpenGL, there's no need to call glFlush first doğru tampon çağrıları yönlendirir. Ve aldırma OpenGL sürücüsü kaydetti: glFlush çok fazla komut boyun eğecek değil. Bu döner arayın garanti edilmezhemenne demekse (), bu yüzden herhangi bir zaman alabilir komutları işlemek gerekli.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ChrisCrossMedia

    ChrisCrossMe

    17 EYLÜL 2009
  • TokShogun

    TokShogun

    6 HAZİRAN 2009
  • Tracy Hairston

    Tracy Hairst

    22 Mayıs 2009