【问题标题】:gpus_ReturnGuiltyForHardwareRestart Crash in [EAGLContext presentRenderbuffer][EAGLContext presentRenderbuffer] 中的 gpus_ReturnGuiltyForHardwareRestart 崩溃
【发布时间】:2017-10-05 22:45:16
【问题描述】:

我在 iOS 11 上的 EAGLContext presentRenderbuffer 中遇到了很多崩溃,但仅限于 iPhone 6/6+ 和 旧版

根据this post,我认为我们已经通过重写所有内容以不使用 VBO/VAO 来排除与 VBO 相关的问题,但崩溃并没有因此得到修复。

还有其他一些关于 SO 的问题,但没有解决方案 - 有没有其他人看到这次崩溃的上升趋势并能够解决它?


TL;DR:

这是我们目前所知道的:

  • 该崩溃是针对 iOS11、iPhone 5S/6/6+ 的。 6S 及以上不会出现这种情况。
  • OpenGL 堆栈的核心返回 gpus_ReturnGuiltyForHardwareRestart
  • 当我们尝试从 CAEAGLLayer 调用 [EAGLContext presentRenderbuffer] 时会发生这种情况
  • 我们没有复制品。

到目前为止我们所做的尝试:

  • 在我们的渲染堆栈中删除对 VBO/VAO 的任何引用。没有帮助。
  • 我们已尝试使用大量绘图场景(​​旋转、调整大小、背景/前景)进行复制。不走运。
  • 据我们所知,iPhone 6 家族和 iPhone 6S 家族之间的应用程序逻辑没有什么特别之处。

一些线索(可能相关但不一定):

  • 我们知道,当 presentRenderBuffer 在主线程之外被调用,并且一些 CATransaction 在主线程上同时发生时,崩溃率会上升。
  • 在主线程(连同整个绘图管道)上调用 presentRenderBuffer 时,崩溃率会略微下降,但不会急剧下降。
  • 很大一部分 (~20%) 的崩溃发生在图层离开屏幕和/或离开视图层次结构时。

这是堆栈跟踪:

  libGPUSupportMercury.dylib gpus_ReturnGuiltyForHardwareRestart

1 AGXGLDriver gldUpdateDispatch
2 libGPUSupportMercury.dylib gpusSubmitDataBuffers
3 AGXGLDriver gldUpdateDispatch
4 GLEngine gliPresentViewES_Exec
5 OpenGLES -[EAGLContext presentRenderbuffer:]

【问题讨论】:

  • 看起来类似于openradar.me/34858598
  • @techsMex 这是我的雷达 :)
  • 您是否找到了与崩溃相关的任何其他信息?我的情况与您雷达中描述的情况几乎完全相同。

标签: ios objective-c iphone graphics opengl-es


【解决方案1】:

根据我的经验,在这些情况下我会遇到这种崩溃:

  1. 当应用程序处于UIApplicationStateBackground 状态时调用 OpenGL API。
  2. 使用在具有不同 shareGroup 的 OpenGL 上下文中创建的对象(纹理、VBO 等)。如果您在渲染或使用 OpenGL 对象进行其他工作之前不调用 [EAGLContext setCurrentContext:..],就会发生这种情况。
  3. 几何无效。例如,如果您为所需的更大尺寸分配索引缓冲区,就会发生这种情况。用一些值填充它,然后尝试使用分配时使用的大小进行渲染。有时这可行(缓冲区的尾部用 0 填充,并且您看不到任何视觉故障)。有时它会崩溃(当缓冲区的尾部充满垃圾,并且对超出范围的点的引用)。

希望这在某种程度上有所帮助。

附:也许你会告诉更多关于你的应用程序的信息?我编写了在 iOS 上渲染矢量地图的应用程序,目前在 iOS 11 上没有遇到任何问题。渲染管道非常简单CADisplayLink 当我们可以渲染下一帧时,在主线程上调用我们的回调。每个带有 OpenGL 场景的视图都可以有多个背景上下文来在后台加载资源(ofc 它与主上下文具有相同的 shareGroup)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-14
    • 2022-11-02
    相关资源
    最近更新 更多