OpenGL'de Framebuffer ve Renderbuffer kavramı ve arasındaki farklar nelerdir?


137

Framebuffer ve Renderbuffer kavramı konusunda kafam karıştı. Render yapmaları gerektiğini biliyorum, ancak kullanmadan önce onları anlamak istiyorum.

Geçici çizim sonucunu saklamak için biraz bitmap tamponu gerektiğini biliyorum. Arka tampon. Ve diğer tamponun bu çizimler devam ederken ekranda görülmesi gerekiyor. Ön tampon. Ve çevirin ve tekrar çizin. Bu kavramı biliyorum ama bu nesneleri bu konsepte bağlamak zor.

Kavramları ve farklılıkları nedir?


7
Renderbuffer, Framebuffer'ın kanal benzeri bileşenleridir (renk, şablon, derinlik ve vb.). Bakınız: developer.apple.com/iphone/library/documentation/3DDrawing/…
eonil

2
Bağlantı iPhone'a özgüdür, ancak çerçeve arabellekleri iyi açıklanmıştır.
j00hi

Yanıtlar:


62

Bu sayfada , farkı oldukça güzel açıkladığını düşündüğüm bazı detaylar var. Birinci olarak:

OpenGL ardışık düzeninin son oluşturma hedefine [the] framebuffer adı verilir .

Buna karşılık:

Renderbuffer Nesnesi
Ek olarak, renderbuffer nesnesi ekran dışı işleme için yeni sunulmuştur. Bir doku nesnesine dönüştürmek yerine bir sahneyi doğrudan bir renderbuffer nesnesine dönüştürmeye izin verir. Renderbuffer, yalnızca işlenebilir bir dahili formatın tek bir görüntüsünü içeren bir veri depolama nesnesidir. Şablon veya derinlik arabelleği gibi karşılık gelen doku biçimine sahip olmayan OpenGL mantıksal arabelleklerini depolamak için kullanılır.


196

Framebuffer nesnesi gerçekten de bir tampon, ancak buna göre, gerçek tampon olan bir ya da daha fazla ek içeren bir toplayıcı nesne değildir. Framebuffer'ı , her üyenin bir arabelleğe işaretçi olduğu C yapısı olarak anlayabilirsiniz . Herhangi bir ek olmadan, bir Framebuffer nesnesi çok az yer kaplar.

Şimdi ekli her bir tampon çerçeve arabellek bir olabilir Renderbuffer veya doku .

Renderbuffer gerçek bir tampon (bayt ya da tamsayılar ya da piksel dizisi) 'dir. Renderbuffer orijinal biçimde saklar piksel değerleri, bu nedenle ekran dışında işleme için optimize edilmiştir. Diğer bir deyişle, Renderbuffer'a çizim yapmak, dokuya çizim yapmaktan çok daha hızlı olabilir. Bunun dezavantajı, piksellerin yerel, uygulamaya bağlı bir format kullanmasıdır, böylece bir Renderbuffer'dan okumak bir dokudan okumaktan çok daha zordur. Yine de, bir Renderbuffer boyandıktan sonra, içeriği piksel aktarım işlemlerini kullanarak çok hızlı bir şekilde doğrudan ekrana (veya diğer Renderbuffer'a ) kopyalayabilir . Bu, bir Renderbuffer'ın bahsettiğiniz çift tampon modelini verimli bir şekilde uygulamak için kullanılabilir.

Renderbuffers nispeten yeni bir kavramdır. Onlardan önce, bir dokuya dönüştürmek için bir Framebuffer kullanıldı , bu daha yavaş olabilir çünkü bir doku standart bir format kullanır. Bir dokuya dönüştürmek hala mümkündür ve bir sahne oluşturmak için her pikselin üzerinde birden fazla geçiş yapmak veya başka bir sahnenin yüzeyine bir sahne çizmek gerektiğinde bu oldukça kullanışlıdır!

OpenGL wiki, daha fazla ayrıntı ve bağlantı gösteren bu sayfaya sahiptir.


13
Teşekkürler! Bunu benzer yapılar ve işaretçiler olarak açıklamak bana çok daha mantıklı geliyor.
DouglasHeriot

2
Bu benim için hala biraz kafa karıştırıcı. Renderbuffer, başka bir render tamponuna yalnızca hızlı kopyalamaya izin veriyorsa, neredeyse hiç faydası yoktur! İşlem sonrası bir aşama (SSAO gibi) yapmam gerekiyorsa, onu bir RenderBuffer'a dönüştürmek ve ardından ekrana geri kopyalamaktan daha önce Dokulara oluşturulmuş olan varsayılan çerçeve tamponuna dönüştürmek daha kolay değilse?
CoffeDeveloper

4
Oluşturma arabellekleri özel son işleme için tasarlanmamıştır. Bir çizim prosedürü için derinlik ve şablon bilgilerini saklamak için kullanılabilirler. Bu mümkündür, çünkü yalnızca GPL uygulamasının renderbuffer verilerini okuması gerekir ve dokulardan daha hızlı olma eğilimindedir, çünkü yerel bir format kullanır. Sonradan işlemeye ihtiyacınız varsa dokuları kullanın.
fernacolo
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.