【问题标题】:Creating offscreen OpenGL ES surfaces on iPhone: fails to attach在 iPhone 上创建屏幕外 OpenGL ES 表面:无法附加
【发布时间】:2010-01-23 23:04:11
【问题描述】:

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

但是,有时,我想使用 OpenGL 将某些几何图形完全渲染到屏幕外(目的是获取生成的原始像素。)

我以Apple docs tell me to here 的方式设置了屏幕外表面。我不会发布我正在使用的代码(除非有人问我),因为它是该页面上“屏幕外帧缓冲区对象”下给出的逐字记录。

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

任何人都可以为我指出如何使这项工作的正确方向吗?也许我误解了关于 GL 管道的一些基本内容(这不是第一次)。

谢谢!

【问题讨论】:

  • 您确定要在帧缓冲区中附加至少一个颜色渲染缓冲区吗?这就是错误所暗示的。尝试在每次调用后添加glGetError() 以查看可能失败的步骤。
  • 加文:感谢您提供正确方向的指针。作为一个相对的 GL 新手,我没想过要先尝试添加 glGetError 调用!

标签: iphone opengl-es


【解决方案1】:

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

glRenderbufferStorageOES 的调用失败。 glGetError() 返回GL_INVALID_VALUE。常量都是合法的,所以我将宽度和高度参数调低到非常小,并在这里成功。似乎我可以创建的表面大小有一个上限——我不确定该错误是否意味着“您在分配期间内存不足”或“无论环境可用内存如何,尺寸都有硬性限制”(谁能启发我?)。

是否有诸如 OpenGL API 参考(例如来自 Apple)之类的东西,其中包含特定于 iPhone 的信息?许多行为/限制是特定于实现的,如果能够提前查看这些东西,而不是在使用 Google 时获得通用的东西,那就太棒了......

【讨论】:

  • 有效的最大宽度和高度是多少?所有 iPhone 型号都应支持 1024x1024 的最小尺寸。您可以通过调用 glGetInteger(MAX_RENDERBUFFER_SIZE_OES) 来查询
  • 我没有逐步了解不同的尺寸——原始的 h/w 很大(每边约 2000 像素左右),而工作的都远低于 1000。
  • 我遇到了同样的问题,谢谢你的回答。我投票感谢你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-23
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多