2013-07-17 28 views
8

Bunu OpenGL belgelerinde hiçbir yerde bulamadım. Daha önce cevaplanmış olsaydı özür dilerim. Ama soru şu: eğer pikselleri bir FBO'dan diğerine kopyalarsam ve bunların her biri birden fazla (aynı sayıda gerekli değil) renk ekine sahipse ve eğer maskem GL_COLOR_BUFFER_BIT ise, hangi renk ekleri (GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, ....) GL_COLOR_ATTACHMENTN) kopyaladı mı? Hepsi? Eğer evet ise, bu FBO'ların kendilerine eklenmiş farklı sayıda renk tamponları varsa ne olur? fbo1 2 renk ekleri vardır ve fbo2 4 renk ekleri vardırGL_COLOR_BUFFER_BIT maskesi belirtildiyse glBlitFramebuffer tüm renk eklerini kopyalar mı?

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo1); 
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo2); 

Not:

bu yolla bağlanan 2 FBOs olduğunu varsayın.

Peki bu durumda glBlitFrameBuffer blit renk ekleri nedir?

cevap

13

GL_READ_FRAMEBUFFER için current glReadBuffer A framebuffer color blitting operation olacak sadece okuma ve GL_DRAW_FRAMEBUFFER için sadece yazma the glDrawBuffers belirtilen olacaktır. Yani bu eklerle ilgili değil; Bu, iki framebackerin okuma ve çizim arabellekleriyle ilgilidir.

+1

Teşekkürler Nicol. Bunun farkındaydım. Benim sorum hala devam ediyor. ** \t ** glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo2);; ** fbo1 \t ** glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo1): Soru daha net hale uğruna, burada bu şekilde bağlanmıştır 2 FBOs vardır 2 renk ataşmanı vardır ve fbo2 4 renk aparata sahiptir. Peki bu durumda glBlitFrameBuffer renk eklerini nasıl kopyalar? – viktorzeid

+4

@kvikram: "* Bunun farkındaydım. *" Hayır, sen değildin ve hala değilsin. Anlamakta başarısız olduğunuz şey "geçerli glReadBuffer" ve "GL_READ_FRAMEBUFFER'a bağlı * framebuffer *" arasındaki farktır. Dediğim gibi, bu eklerle ilgili değil *; framebuffers içindeki * okuma ve çizim arabellekleriyle ilgilidir. –

+3

Teşekkürler Nicol. Sanırım anlayışımı temizledin. İlk adım okumak/çizmek için FBO'ları seçmek: \t glBindFramebuffer (GL_READ_FRAMEBUFFER, fbo1); \t glBindFramebuffer (GL_DRAW_FRAMEBUFFER, fbo2); ve sonra açıkça okumak için renk tampon/ glReadBuffer (GL_COLOR_ATTACHMENT0) çizmek söz; glDrawBuffer (GL_COLOR_ATTACHMENT3); ve ardından blit işlemini yapın: \t glBlitFramebuffer ..? Bu, renk eki 0'daki tamponu fbo1'deki renk eki3'te fbo1'den arabelleğe kopyalayacaktır. – viktorzeid