用下面的代码:iOS5是否同时支持GL_STENCIL_INDEX和GL_STENCIL_INDEX8?
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
值时,我得到正确的值(8)与GL_STENCIL_INDEX8
,但我得到0与GL_STENCIL_INDEX
。
有了这个,我无法使用模板缓冲区获得功能完整的FBO。是否由于GL_STENCIL_INDEX
?哪一个应该用在这里?
我曾尝试早些时候,相同的示例代码,但通过我与OpenGL ES的2上班,我删除了所有的_OES后缀......但随着打包深度/模板缓冲区是一个扩展,我应该保留GL_DEP的缓冲区TH24_STENCIL8_OES。这样的工作。感谢JimN,并且不要感谢苹果公司...... –
在“平台注释”一节以及“PowerVR SGX发行说明和最佳实践”标题下的Apple文档“适用于iOS的OpenGL ES编程指南”中,我们阅读:“在iOS 4.0及更高版本中,不支持单独的模板缓冲区,请使用组合的深度/模板缓冲区。“我不知道这是否也适用于PowerVR MBX,但由于Xcode 4.5不再支持iPhone 3G,因此这是一个有争议的问题。 – bleater