2

在 iOS 设备 (iPad) 上,我决定将渲染缓冲区的存储从支持视图的 CAEAGLLayer 更改为通过 glRenderbufferStorage 显式存储。遗憾的是,以下代码无法生成有效的 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]
4

2 回答 2

5

在 iOS 中,您不能使用glRenderBufferStorage绑定颜色附件,您需要从EAGLContext视图层请求存储。在您的视图代码的某处,您必须使用类似于以下的代码:

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

你不能避免第二行,因为它是 iOS 需要的,这是你提到的从渲染缓冲区到层的“链接”的行

于 2012-01-18T14:08:05.793 回答
2

的第一个论点glRenderbufferStorage应该是GL_RENDERBUFFER,不是m_colorbuffer

(它将存储,因为这是上一次调用m_colorbuffer中绑定到GL_RENDERBUFFER目标的内容)glBindRenderbuffer

于 2011-01-28T20:22:28.360 回答