如何在 iOS 中制作 OpenGL ES 帧缓冲区的副本?
Posted
技术标签:
【中文标题】如何在 iOS 中制作 OpenGL ES 帧缓冲区的副本?【英文标题】:How to make a copy of the OpenGL ES framebuffer in iOS? 【发布时间】:2011-09-12 00:23:49 【问题描述】:我想在我的 ios 游戏中将 OpenGL ES 帧缓冲区从视频 RAM 复制到视频 RAM。这是怎么做到的?
理想情况下,我每秒会执行 30 次。然后将复制缓冲区的内容分段传输到 CPU(不是一次全部传输,因为这会导致游戏卡顿)。
【问题讨论】:
您是要 VRAM 到 VRAM,还是要 VRAM 到主 RAM?这些是非常非常不同的问题,有着非常非常不同的答案。 好的,只是您提到“将复制缓冲区的内容传输到 CPU”让我认为您实际上希望 VRAM 到主 RAM。 你说得对,我最终会将帧缓冲区副本的内容传输到 RAM。然而,作为第一步,我想将帧缓冲区从 VRAM 复制到 VRAM...然后从 VRAM 分段传输到 RAM 以(希望)避免游戏中的卡顿。 好的,在这种情况下,我会说 JimN 关于 FBO 的回答是一个好方法。根据我的经验,PowerVR 处理 FBO 的方式有点奇怪,因为它的延迟渲染机制,所以如果有一点延迟是可以的,你可能希望将前一帧的数据传输到主 RAM。 【参考方案1】:编辑:我想说你应该看看帧缓冲区对象(FBO),你可以在下面的帖子中找到一个例子:
https://devforums.apple.com/message/23282#23282
这将允许您将场景渲染为附加到 FBO 的纹理,然后使用该纹理。
PS:感谢 Christian 指出我的错误(我第一次读到 MrMusic 想将 VRAM 复制到 RAM 并错误地建议使用 glReadPixels 确实不适合该目的)。
【讨论】:
他要求 VRAM 到 VRAM 的副本,这使得glReadPixels
无用。除非您考虑过公益组织,但在这种情况下,答案应该更新。以上是关于如何在 iOS 中制作 OpenGL ES 帧缓冲区的副本?的主要内容,如果未能解决你的问题,请参考以下文章
iOS OpenGL ES Analyzer 列出“不存在的帧缓冲区附件”和“缺少帧缓冲区附件”,但 FBO 工作
如何在 iPhone OpenGL ES 2.0 中在渲染和呈现帧缓冲区之间切换?