在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);
注意:
图层大小有效且正确。
这是可靠的生产工作渲染代码。我所做的唯一改变就是这一行:
glRenderbufferStorage(...)
之前我做过:
[m_context renderbufferStorage:GL_RENDERBUFFER fromDrawable:layer]
答案 0 :(得分:5)
在iOS中,您无法使用glRenderBufferStorage
绑定颜色附件,您需要在视图层上从EAGLContext
请求存储。在视图代码的某处,您必须使用与此类似的代码:
// First Bind a Render Buffer
glBindRenderbuffer(GL_RENDERBUFFER, m_colorBuffer);
[context renderBufferStorage:GL_RENDERBUFFER forDrawable:(CAEAGLLayer*) self.layer];
您无法避免iOS所需的第二行,这是您从renderbuffer到layer的“链接”所引用的行
答案 1 :(得分:2)
glRenderbufferStorage
的第一个参数应该是GL_RENDERBUFFER
,而不是m_colorbuffer
。
(它会存储在m_colorbuffer
中,因为这是与之前GL_RENDERBUFFER
来电中的glBindRenderbuffer
目标绑定的内容