【发布时间】: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