在iPhone上创建屏幕外OpenGL ES表面:无法附加

时间:2010-01-23 23:04:11

标签: iphone opengl-es

我正在使用EAGL上下文并查看我的应用程序的正常屏幕渲染。这涉及(如预期的那样)创建渲染缓冲区和帧缓冲区并将其绑定到视图CAEAGLLayer。这可以按预期工作。

然而,在某些时候,我想使用OpenGL在屏幕外完全呈现一些几何体(为了获得生成的原始像素。)

我按照Apple docs tell me to here的方式设置了屏幕外表面。我不会发布我正在使用的代码(除非有人问我),因为它是逐字地在“Offscreen framebuffer objects”下的页面上给出的。

但是在最后一步中,glCheckFramebufferStatusOES始终返回失败GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_OES而不是预期的成功。我最初认为这种情况正在发生,因为已经有一个帧缓冲区(CAEAGLLayer)绑定了,但即使我在创建屏幕外帧之前销毁该帧缓冲区,问题仍然存在。

有人能指出我如何使这项工作朝着正确的方向发展吗?也许我误解了关于GL管道的一些基本信息(这不是第一次)。

谢谢!

1 个答案:

答案 0 :(得分:1)

(非常感谢GavinB对这个问题的有力评论。)

glRenderbufferStorageOES的调用失败了。 glGetError()已返回GL_INVALID_VALUE。常数都是合法的,所以我将宽度和高度参数调整到非常小,并在此成功。似乎我可以创建表面大小的上限 - 我不确定错误是否意味着“分配期间内存不足”或“无论环境空闲内存如何都存在硬度限制”(谁能开导我?)

是否存在OpenGL API引用(例如来自Apple)以及特定于iPhone的信息?许多行为/限制都是特定于实现的,能够提前查看这些内容,而不是在使用Google时获取通用内容真是太棒了......