首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[EAGLContext presentRenderbuffer]中的gpus_ReturnGuiltyForHardwareRestart崩溃

[EAGLContext presentRenderbuffer]中的gpus_ReturnGuiltyForHardwareRestart崩溃
EN

Stack Overflow用户
提问于 2017-10-06 06:45:17
回答 1查看 1.4K关注 0票数 19

我在iOS 11上的EAGLContext presentRenderbuffer中遇到了很多崩溃,但只在iPhone 6/6+和更早的版本上。

根据this post的说法,我认为我们已经通过重写所有东西来排除与VBO相关的问题,但崩溃并没有通过这一点得到修复。

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

TL;DR:

到目前为止,我们所知道的是:

  • 崩溃特定于iOS11,iPhone 5S/6/6+。在6S和更高版本上不会发生这种情况。当我们试图从没有gpus_ReturnGuiltyForHardwareRestart
  • It的CAEAGLLayer
  • We调用EAGLContext presentRenderbuffer时,OpenGL堆栈的核心
  • 会返回重现。

我们到目前为止已经尝试过的:

  • 移除渲染堆栈中对VBO/VAO的任何引用。没有帮助。
  • 我们已经尝试了大量的绘图场景(旋转,调整大小,背景/前景)。不走运。
  • 据我们所知,在我们的应用程序逻辑中,iPhone 6系列和iPhone 6S系列之间没有任何特定的逻辑。

一些线索(这可能是相关的,但不一定):

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

下面是堆栈跟踪:

代码语言:javascript
复制
  libGPUSupportMercury.dylib gpus_ReturnGuiltyForHardwareRestart

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

回答 1

Stack Overflow用户

发布于 2017-10-18 19:09:46

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

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

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46595874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档