为什么在iOS上,glRenderbufferStorage出现失败?

dug*_*gla 2 rendering framebuffer ios opengl-es-2.0

在iOS设备(iPad)上,我决定通过glRenderbufferStorage将CABAGLLayer中的渲染缓冲区的存储更改为显式存储.遗憾的是,以下代码无法生成有效的FBO.有人可以告诉我我错过了什么吗?:

glGenFramebuffers(1, &m_framebuffer);
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);

glGenRenderbuffers(1, &m_colorbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_colorbuffer);

GLsizei width  = (GLsizei)layer.bounds.size.width;
GLsizei height = (GLsizei)layer.bounds.size.height;
glRenderbufferStorage(m_colorbuffer, GL_RGBA8_OES, width, height);

glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, m_colorbuffer);
Run Code Online (Sandbox Code Playgroud)

注意:
图层大小有效且正确.这是可靠的生产工作渲染代码.我所做的唯一改变就是这条线:

glRenderbufferStorage(...)
Run Code Online (Sandbox Code Playgroud)

以前我做过:

[m_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]
Run Code Online (Sandbox Code Playgroud)

小智 5

在iOS中,您无法使用glRenderBufferStorage绑定颜色附件,您需要从EAGLContext视图层请求存储.在视图代码的某处,您必须使用与此类似的代码:

// First Bind a Render Buffer
glBindRenderbuffer(GL_RENDERBUFFER, m_colorBuffer);
[context renderBufferStorage:GL_RENDERBUFFER forDrawable:(CAEAGLLayer*) self.layer];
Run Code Online (Sandbox Code Playgroud)

您无法避免iOS所需的第二行,这是您从renderbuffer到layer引用"链接"的行