我发现了很多关于此的帖子,但我无法找到解决方案,主要是因为我对 OpenGL 或 GLKit 没有非常透彻的了解。
我将此处描述的方法添加到我的项目中。
他们特别提到:
重要提示:您必须在调用 EAGLContext/-presentRenderbuffer: 之前调用 glReadPixels:以获得定义的结果,除非您使用保留的后台缓冲区。
我尝试设置保留的后台缓冲区但没有成功,鉴于这样做会产生“不利的性能影响”,我宁愿避免这样做。
问题是,根据另一篇文章中的评论:
在 GLKit 中,GLKView 将自动呈现自己并在每个渲染周期结束时丢弃不需要的渲染缓冲区。
既然如此,在使用 GLKit 的时候如何在适当的时候调用 'Snapshot' 方法呢?
迄今为止,在 iOS 5 中,我得到了一个奇怪的黄色版本的场景(好像没有其他颜色),而在 iOS 6 中,我得到了一个纯白色的图像(我想是因为我使用白色作为清晰的颜色)。
此外,我不知道他们(苹果)在此评论中在谈论什么:
// 如果您的应用程序只创建一个此时已绑定的颜色渲染缓冲区, // 此调用是多余的,但如果您正在处理多个渲染缓冲区,则需要它。// 注意,将“_colorRenderbuffer”替换为您的类中定义的渲染缓冲区对象的实际名称。glBindRenderbufferOES(GL_RENDERBUFFER_OES, _colorRenderbuffer);
所以我已经在我的应用程序中注释掉了这个电话。如果重要的话,我的对象会使用具有位置、纹理坐标和颜色的 VBO。