2016-09-16 60 views
2

我的图像处理的应用程序的行为非常奇怪的设备上与A7芯片(iPhone 5S和ipad赠送2测试):OpenGL的错误10

渲染花费极长的和产生破裂的结果。仪器显示一些glDrawElements呼叫以GL_INVALID_OPERATION返回。尽管如此,我还是无法找出原因。

相同的代码运行完全正常上较新的设备(A8和更好)和iOS中9的所有设备难道苹果改变的事情,我不知道呢?

一些更多的背景信息:

  • 我使用部分类型GL_HALF_FLOAT_OES纹理
  • 我利用EXT_color_buffer_half_float扩展渲染到纹理的那些
  • 我使用EXT_shader_framebuffer_fetch的扩展来处理像素在我的一些过滤器就地
+0

您是否尝试过在[Xcode GPU帧捕获工具]中追踪错误(https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/ToolsOverview/ToolsOverview.html#//apple_ref/DOC/UID/TP40008793-A2-SW1)?这可能有助于缩小错误的原因。 – rickster

+0

@rickster我使用了“OpenGL ES分析”工具,它基本上是相同的,但是在整个运行时间内。它帮助我缩小了“glDrawElements”调用的原因。帧捕获工具似乎可以对接下来的几帧进行采样,如果你有一个连续的渲染循环,这很好用,但是如果你按需渲染则效果不好。 –

+0

帧捕获采样进入* single *帧的所有调用,显示关于每个bind/draw/etc调用设置的所有GL状态的详细信息,并显示警告时比“无效操作”更详细错误。您可以在渲染过程结束时以编程方式触发捕获,因此您不必担心按需渲染,从而难以捕获。 – rickster

回答

0

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

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

+0

在网站上注意:WTF Apple ?! –

+0

OpenGL ES似乎在iOS 10的Metal上实现,所以一些初始化问题并不完全出乎意料(r.e. WTF comment)。 – ahcox