【问题标题】:OpenglES 2.0 issue on iphone 5s with IOS 7带有 IOS 7 的 iphone 5s 上的 OpenglES 2.0 问题
【发布时间】:2013-10-15 09:22:20
【问题描述】:

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

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

iPhone 5S 上的另一个异常现象是每次第一次调用glDrawElements(如果重要的话我使用VBO)在使用的opengl 程序编译之后(每次用户切换特效时都会编译一个新的opengl shader程序),会阻塞当前线程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(用于执行多通道着色器)的使用在 iPhone 5s 上有任何区别

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

【问题讨论】:

  • 我唯一能想到的是 5S 具有极其惰性的状态设置和/或 5 所没有的严格验证规则。通常当您第一次绑定资源并使用它时,它会花费很长时间,这部分是由于延迟设置/分配和验证。不要急于责备glDrawElements (...),当你进行draw call时最终提交的看似无关的操作数量会让你感到惊讶。它可能与您的顶点数据无关,而与资源分配/验证有关。
  • 谢谢你的小费。顺便说一句,我没有找到任何文件谈论 5s 和它的先验之间的 opengl 的区别。如果你能给我一些,我会很高兴的。 @AndonM.Coleman
  • 我也有用户报告 IOS 应用存在类似问题。 OpenGLES 2.0 GLKView 在 iPhone 5s 上显示为灰色/清晰,但在任何其他 Apple 设备上均不显示。我仍在尝试确定原因。第一步是将开发环境升级到 Xcode 5 & IOS 7 SDK。
  • 我以某种方式解决了我的问题。首先,升级 XCode 和 SDK 是相当可观的,但并没有帮助。我发现新 iPhone 5s GPU 上的 OpenGLES 实现比以前严格得多。当我用 VAO 包装我的 VBO 并将我的着色器中的所有整数更改为浮点数时,我的应用程序再次开始工作。我仍然不确定为什么这样做会起作用,但现在病已经痊愈了。

标签: iphone ios7 opengl-es-2.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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-02
    • 2012-01-18
    • 1970-01-01
    相关资源
    最近更新 更多