ios - [EAGLContext presentRenderbuffer] 中的 gpus_ReturnGuiltyForHardwareRestart 崩溃

标签 ios objective-c iphone graphics opengl-es

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

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

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


长话短说:

这是我们目前所知道的:

  • 崩溃特定于 iOS11、iPhone 5S/6/6+。它不会出现在 6S 及更高版本上。
  • OpenGL 堆栈的核心返回 gpus_ReturnGuiltyForHardwareRestart
  • 当我们尝试从 CAEAGLLayer 调用 [EAGLContext presentRenderbuffer] 时发生
  • 我们没有复制品。

到目前为止我们尝试了什么:

  • 在我们的渲染堆栈中删除对 VBO/VAO 的任何引用。没有帮助。
  • 我们已尝试使用多种绘图场景(​​旋转、调整大小、背景/前景)进行重新制作。运气不好。
  • 据我们所知,我们的应用程序逻辑在 iPhone 6 系列和 iPhone 6S 系列之间没有任何特定之处。

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

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

这是堆栈跟踪:

  libGPUSupportMercury.dylib gpus_ReturnGuiltyForHardwareRestart

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

最佳答案

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

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

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

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

关于ios - [EAGLContext presentRenderbuffer] 中的 gpus_ReturnGuiltyForHardwareRestart 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46595874/

相关文章:

iphone - 自定义 UISegmentedControl,添加背景图片和选择的段色调颜色

java - 使用 C++ 中的库为 PhoneGap 创建插件

iphone - 比较 switch 语句中的 ALAssetGroupType

iphone - 更新内部应用程序——iOS 企业开发者计划

ios - 静音播放背景歌曲但不显示静音图像?

ios - 为什么NWPathMonitor状态总是满足?

ios - Swift,UILongPressGestureRecognizer 在 UIlabel 中不起作用

ios - `UnsafeMutablePointer.initialize()`到底是做什么的?

objective-c - 什么是 Objective-C 中的接收器?

iphone - Objective-C/自动调整 subview 不起作用