2012-06-18 88 views
4

有沒有人這樣做成功地?看起來,我在模板渲染緩衝區glCheckFramebufferStatus(...)中使用的任何索引格式都返回GL_FRAMEBUFFER_UNSUPPORTED。 我已經成功地結合兩者的深度\顏色渲染緩衝,但每當我試圖做同樣的事情與我的模板緩存我得到(我說)GL_FRAMEBUFFER_UNSUPPORTED綁定模板渲染緩衝區幀緩衝區在OpenGL

這裏是我的代碼片段:

// Create frame buffer 
GLuint fb; 
glGenFramebuffers(1, &fb); 

// Create stencil render buffer (note that I create depth buffer the exact same way, and It works. 
GLuint sb; 
glGenRenderbuffers(1, &sb); 
glBindRenderbuffer(GL_RENDERBUFFER, sb); 
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX8, w, h); 

// Attach color 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, cb, 0); 

// Attach stencil buffer 
glBindFramebuffer(GL_FRAMEBUFFER, fb); 
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, rb); 
// And here I get an GL_FRAMEBUFFER_UNSUPPORTED when doing glCheckFramebufferStatus() 

任何想法?

注:顏色attachement是紋理,而不是渲染

回答

6

切勿使用一個獨立的模板緩存。如果您需要模板,請始終使用depth+stencil image format。請注意,模板索引格式不是required image formats

即使您在此處未使用深度緩衝區,仍應使用GL_DEPTH24_STENCIL8,您應該將其附加到GL_DEPTH_STENCIL_ATTACHMENT​

+0

+1嗯,我想我嘗試過,但沒有工作,但是它工作在家裏我的ATI顯卡,如果我得到它在我的工作NVIDIA上班,我給你的答案綠色:) –

+0

@ViktorSehr:它可能不是模板;你使用什麼圖像格式爲你的紋理? –

+0

試過所有的常規格式(GL_RGBA8,..16,..32F) –

0

您可以使用模板,只在最近NVIDIA硬件/驅動器

glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_2D, fboStencilTexture, 0); 

還有兩個獨立的深度不支持和模板