2015-05-04 14 views
5

Varsayılan framebuffer ile aynı görüntü boyutlarına sahip bir offscreen arabelleğe çizilen bazı modellerle ilgili bazı yardımcı veriler çizerken, varsayılan framebuffer'a bir sahne çizmek istiyorum.OpenGL'de, bir çizim çağrısında, bir FBO'ya ve varsayılan framebuffer'a işlemek için tek bir gölgelendirici program mümkün mü?

Bu iki şeyi ayrı ayrı yapabildiğimi anlıyorum, iki glDraw * çağrısında (bir FBO'ya, bir tane değil) iki uygun gölgelendirici programı kullanacaktır.

Ve (yine bu öğrenmeye) Bir glDraw * kimin parça gölgelendirici katına uygun değerleri yazacak bir gölgelendirici programı ile çağrı yapıyor, bir FBO iki renderbuffers/dokular ekleyerek, çoğunlukla aynı anda yapabilir düşünüyorum Birden fazla FBO ekine karşılık gelen çıkışlar ve son olarak FBO'daki iki görüntüden birini varsayılan çerçeve kıskacına kopyalayarak, sahneyi doldurma dörtlemesi veya glBlitFramebuffer'ı çağırarak.

Ancak bir shader programıyla tek bir glDraw * araması yapabilir ve parça gölgelendiricimin hem görünen framebuffer hem de bazı ekran dışı FBO'lara yazmasını sağlayabilir miyim? Şüpheleniyorum, ilgili belgelerden gördüğüm kadarıyla, ama emin değilim.

cevap

5

Hayır, aynı anda farklı framebacker'lara çizim yapamazsınız. Ancak, bir çerçevebuffer'a yönlendirilmiş farklı çizim arabelleklerini çizebilirsiniz. Bu mümkün ve çoklu render hedefleri olarak adlandırılır. Hiç tamponlarını çizmek

layout (location = 0) out vec3 WorldPosOut; 
layout (location = 1) out vec3 DiffuseOut; 
layout (location = 2) out vec3 NormalOut; 
layout (location = 3) out vec3 TexCoordOut; 

uniform sampler2D gColorMap; 

void main() 
{ 
    WorldPosOut = WorldPos0; 
    DiffuseOut = texture(gColorMap, TexCoord0).xyz; 
    NormalOut = normalize(Normal0); 
    TexCoordOut = vec3(TexCoord0, 0.0); 
} 

çıktısı verir değerlerine:

GLenum DrawBuffers[] = 
{ 
    GL_COLOR_ATTACHMENT0, 
    GL_COLOR_ATTACHMENT1, 
    GL_COLOR_ATTACHMENT2, 
    GL_COLOR_ATTACHMENT3 
}; 
glDrawBuffers(ARRAY_SIZE_IN_ELEMENTS(DrawBuffers), DrawBuffers); 

Sonra bir parça gölgelendirici, gibi bir şey yazmak zorunda:

Sen beraberlik belirtmeniz gerekir

bu şekilde tamponları bir Zamanlar. Tam bir örnek için http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html'a bakın.

İlgili konular