【问题标题】:OpenGL errors on A7-devices in iOS 10iOS 10 中 A7 设备上的 OpenGL 错误
【发布时间】:2016-09-19 22:50:36
【问题描述】:

在更新到 iOS 10 后,我的图像处理应用在配备 A7 芯片的设备(iPhone 5s 和 iPad Mini 2 测试)上的行为非常奇怪:

渲染需要很长时间并且会产生损坏的结果。 Instruments 显示,一些glDrawElements 调用返回GL_INVALID_OPERATION。不过,我无法找出原因。

相同的代码在较新的设备(A8 和更好的设备)和 iOS 9 的所有设备上运行良好。Apple 是否改变了我不知道的事情?

更多背景信息:

  • 我部分使用了GL_HALF_FLOAT_OES 类型的纹理
  • 我使用 EXT_color_buffer_half_float 扩展来渲染这些纹理
  • 我使用 EXT_shader_framebuffer_fetch 扩展来就地处理我的一些过滤器中的像素

【问题讨论】:

  • 您是否尝试过跟踪Xcode GPU Frame Capture tool 中的错误?这可能有助于缩小错误原因的范围。
  • @rickster 我使用了“OpenGL ES 分析”工具,它的作用基本相同,但在整个运行时。它帮助我将原因缩小到glDrawElements 电话。帧捕获工具似乎对接下来的几帧进行采样,如果您有一个连续的渲染循环,它会非常有用,但如果您是按需渲染,则不会。
  • 帧捕获对进入 single 帧的所有调用进行采样,显示您在每次绑定/绘制/等调用时设置的所有 GL 状态的详细信息,以及当出现问题时,显示比“无效操作”更详细的警告。您可以在渲染过程结束时以编程方式触发捕获,因此您不必担心按需渲染会导致难以为捕获计时。

标签: ios opengl-es opengl-es-2.0 ios10


【解决方案1】:

事实证明,我只是在我的一些着色器(例如,gl_FragColor.rg = vec2(1.0, 0.0);)中分配了部分 gl_FragColor,这导致了 iOS 10 中的错误行为。可能仅与 GL_HALF_FLOAT_OES 类型的渲染目标结合使用,不过。

当我总是分配完整的向量时(即使其他部分未使用......),它就像一个魅力。

【讨论】:

  • 网站注释:WTF Apple?!
  • OpenGL ES 似乎是在 iOS 10 中的 Metal 之上实现的,因此一些初期问题并非完全出乎意料(例如 WTF 注释)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多