【发布时间】:2010-06-18 23:10:59
【问题描述】:
我正在尝试在 iPhone 上的 OpenGL ES 中创建一个屏幕外渲染缓冲区。我创建了这样的缓冲区:
glGenFramebuffersOES(1, &offscreenFramebuffer);
glBindFramebufferOES(GL_FRAMEBUFFER_OES, offscreenFramebuffer);
glGenRenderbuffersOES(1, &offscreenRenderbuffer);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenRenderbuffer);
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, offscreenRenderbuffer);
但我对如何渲染存储感到困惑。 Apple 的文档说要使用 EAGLContext renderBufferStorage:fromDrawable: 方法,但这似乎只适用于一个渲染缓冲区(正在显示的主要缓冲区)。如果我使用普通的 OpenGL 函数 glRenderBufferStorageOES,那么我似乎无法让它显示。代码如下:
// this is in the initialization section:
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, backingWidth, backingHeight);
// and this is when I'm trying to draw to it and display it:
glBindFramebufferOES(GL_FRAMEBUFFER_OES, offscreenFramebuffer);
GLfloat vc[] = {
0.0f, 0.0f, 0.0f,
10.0f, 10.0f, 10.0f,
0.0f, 0.0f, 0.0f,
-10.0f, -10.0f, -10.0f,
};
glLoadIdentity();
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, 0, vc);
glDrawArrays(GL_LINES, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
这样做,屏幕上不会显示任何内容。但是,如果我将对“屏幕外...缓冲区”的引用切换到使用 renderBufferStorage 方法创建的缓冲区,它就可以正常工作。
有什么建议吗?
【问题讨论】: