我正在编写一个涉及 OpenGL ES 2.0 的软件。这只是关于使用 GLSL 呈现带有一些插件特殊效果的照片。
一切正常,着色器在 iPhone 4、iPhone 4s 和 IOS7 的 iPhone 5 上表现良好。但是当我使用安装了 IOS7 的 iPhone 5S 测试该软件时,OpenGL 只为我编写的所有 GLSL 着色器提供了清晰的颜色(能够使用 glClearColor 更改)。不能在最新的设备上工作肯定是不可接受的。
iPhone 5S 上的另一个异常现象是,在编译使用的 opengl 程序(每次用户切换特效时都会编译一个新的 opengl shader 程序)后,每次第一次调用glDrawElements(如果有问题我使用 VBO ),都会阻塞当前线程大约 10 秒。
我尝试使用 XCode 5 和 4.6 进行编译,两者都给出了相同的结果(在 iPhone 5s 以外的所有设备上都可以)。
该项目在 iPhone 5 上安装的 IOS7 上工作,所以问题不应该是 os 版本或 SDK 版本。我怀疑新的 GPU 可能是原因,但我不知道如何修复它,甚至不知道代码在哪里失败。我花了一整天的时间才发现glDrawElements问题。
该软件的代码很大,我不可能在我的问题中发布所有代码。如果有人可以为我提供一些帮助或只是一些想法,我将不胜感激。
为了使问题更加简洁,我的 OpenGL 着色器似乎在最新的 iPhone GPU 上失败了。所以我想知道是否:
- 最新的 Apple A7 GPU 中断对某些 OpenGL ES 2.0 功能的支持
- 使用 iPhone 5s 创建顶点缓冲区对象 (vbo) 有一些限制
- RenderBuffer、FrameBuffer和TextureBuffer(用于执行multipass shader)的使用在iPhone 5s上有什么区别
这些都是我现在能想到的可疑部分,但我不知道如何测试它们,因为我现在连一个渲染帧都没有。