【发布时间】:2011-11-16 10:15:10
【问题描述】:
使用以下代码:
GLuint viewRenderbuffer, viewFramebuffer, viewDepthbuffer, stencilBuffer;
// Create the framebuffer object
glGenFramebuffers(1, &viewFramebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, viewFramebuffer);
// Create a render buffer and bind it to the FBO.
glGenRenderbuffers(1, &viewRenderbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, viewRenderbuffer);
[context renderbufferStorage:GL_RENDERBUFFER fromDrawable:(CAEAGLLayer*)self.layer];
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, viewRenderbuffer);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_WIDTH, &imageWidth);
glGetRenderbufferParameteriv(GL_RENDERBUFFER, GL_RENDERBUFFER_HEIGHT, &imageHeight);
// Create a depth buffer and bind it to the FBO.
glGenRenderbuffers(1, &viewDepthbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, viewDepthbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT16, imageWidth, imageHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, viewDepthbuffer);
// Create a stencil buffer to crop the rendered scene and bind it to the FBO.
glGenRenderbuffers(1, &stencilBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, stencilBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_STENCIL_INDEX, imageWidth, imageHeight);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, stencilBuffer);
// Check the FBO.
if(glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
NSLog(@"Failure with framebuffer generation: %d", glCheckFramebufferStatus(GL_FRAMEBUFFER));
}
使用GL_STENCIL_INDEX,我得到GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 错误。使用GL_STENCIL_INDEX8,我得到GL_FRAMEBUFFER_UNSUPPORTED 错误。两者都是由最后一个 glFramebufferRenderbuffer() 函数引起的,该函数应该将模板缓冲区绑定到 FBO。
此外,当我检查 GL_RENDERBUFFER_STENCIL_SIZE 的值时,GL_STENCIL_INDEX8 得到了正确的值 (8),但 GL_STENCIL_INDEX 得到了 0。
有了这个,我就无法获得一个带有模板缓冲区的功能完整的 FBO。是因为GL_STENCIL_INDEX吗?这里应该使用哪一个?
【问题讨论】:
标签: ios opengl-es-2.0 fbo stencil-buffer