0

我正在编写一个涉及 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上有什么区别

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

4

1 回答 1

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

于 2013-10-31T11:13:07.137 回答