带有IOS 7的iphone 5s上的OpenglES 2.0问题

时间:2013-10-15 09:22:20

标签: iphone ios7 opengl-es-2.0

我正在编写一个涉及OpenGL ES 2.0的软件。 这只是使用GLSL来展示带有一些插件特效的照片。

一切正常,着色器在iPhone 4,iPhone 4s和带有IOS7的iPhone 5上表现良好。但是当我用安装了IOS7的iPhone 5S测试软件时,OpenGL只为我写的所有GLSL着色器提供了清晰的颜色(能够用glClearColor更改)。无法使用最新的设备当然是不可接受的。

iPhone 5S上的另一个异常现象是每次第一次调用 glDrawElements (如果重要的话,我正在使用VBO)在编译使用过的opengl程序之后(每次用户切换特效时都会编译一个新的opengl着色器程序),将阻止当前线程大约10秒钟。

我尝试使用XCode 5和4.6进行编译,两者都给出了相同的结果(在iPhone 5s以外的所有设备上都很好)。

该项目在iPhone 5上安装了IOS7,因此问题不应该是操作系统版本或SDK版本。我怀疑新的GPU可能是原因,但我不知道如何修复它甚至测试代码失败的位置。我花了整整一天才发现 glDrawElements 问题。

软件的代码很大,我不可能在我的问题中发布所有内容。如果有人能给我一些帮助或者只是一些想法,我将不胜感激。

为了使问题更加简洁,我的OpenGL着色器似乎在最新的iPhone GPU上失败了。所以我想知道是否:

  • 最新的Apple A7 GPU切断了对某些OpenGL ES 2.0功能的支持
  • 使用iPhone 5s
  • 创建顶点缓冲区对象(vbo)有一些限制
  • 使用RenderBuffer,FrameBuffer和TextureBuffer(用于执行多遍着色器)在iPhone 5s上有任何区别

这些都是我现在能想到的可疑部分,但我不知道如何测试它们,因为我现在还没有得到一个渲染帧。

1 个答案:

答案 0 :(得分:1)

iPhone 5和5S之间的最大区别是64位架构。我现在在我的应用程序中看到问题,处理将浮动传递给着色器。在64位模式下,当我传入0.8时,它以-1.58819e-23进入着色器。我即将打开一个关于该问题的新问题,但您可能希望使用OpenGL ES帧捕获在运行时检查您的值。

https://developer.apple.com/library/mac/recipes/xcode_help-debugger/articles/debugging_opengl_es_frame.html