iOS 10中A7设备上的OpenGL错误

iOS 10中A7设备上的OpenGL错误,ios,opengl-es,opengl-es-2.0,ios10,Ios,Opengl Es,Opengl Es 2.0,Ios10,在iOS 10升级后,我的图像处理应用程序在带有A7芯片的设备上表现得非常奇怪(iPhone 5s和iPad Mini 2经过测试): 渲染需要非常长的时间,并且会产生不完整的结果。Instruments显示一些glpaurements调用返回GL\u INVALID\u操作。不过,我无法找出原因 同样的代码在较新的设备(A8及更高版本)和iOS 9中的所有设备上运行得非常好。苹果改变了我不知道的事情吗 更多背景信息: 我部分使用了GL\u HALF\u FLOAT\u OES类型的纹理 我使

在iOS 10升级后,我的图像处理应用程序在带有A7芯片的设备上表现得非常奇怪(iPhone 5s和iPad Mini 2经过测试):

渲染需要非常长的时间,并且会产生不完整的结果。Instruments显示一些
glpaurements
调用返回
GL\u INVALID\u操作
。不过,我无法找出原因

同样的代码在较新的设备(A8及更高版本)和iOS 9中的所有设备上运行得非常好。苹果改变了我不知道的事情吗

更多背景信息:

  • 我部分使用了
    GL\u HALF\u FLOAT\u OES
    类型的纹理
  • 我使用
    EXT\u color\u buffer\u half\u float
    扩展来渲染这些纹理
  • 我使用
    EXT\u shader\u framebuffer\u fetch
    扩展来处理某些过滤器中的像素

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


当我总是指定完整向量(即使其他部分未使用…)时,它就像一个符咒一样工作。

您是否尝试过在中跟踪错误?这可能有助于缩小错误的原因。@rickster我使用了“OpenGL ES分析”工具,它的功能基本相同,但在整个运行时都是如此。它帮助我将原因缩小到
glpaurements
调用。“帧捕获工具”似乎会对接下来的几帧进行采样,如果您有连续的渲染循环,则效果会很好,但如果您按需渲染,则效果不会很好。帧捕获会对进入单个帧的所有调用进行采样,显示您在每次绑定/绘制/etc调用时设置的所有GL状态的详细信息,并显示比“无效操作”更详细的警告当有什么不对劲的时候。您可以在渲染过程结束时以编程方式触发捕获,这样您就不必担心按需渲染会导致捕获计时困难。在网站上注意:WTF Apple?!OpenGL ES似乎是在iOS 10中的Metal之上实现的,因此一些初期问题并非完全出乎意料(r.e.WTF评论)。