gpus_ReturnGuiltyForHardwareRestart 崩溃 [英] gpus_ReturnGuiltyForHardwareRestart crash

查看:13
本文介绍了gpus_ReturnGuiltyForHardwareRestart 崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

应用程序在 presentFrameBuffer 中崩溃(在前台运行时,不会发生中断).

Application crashes in presentFrameBuffer (while running in foreground, no interruption occurring).

它没有在第一帧崩溃,它画了一段时间然后突然崩溃.

It's not crashing in the first frame, it draws for a while then it suddenly crashes.

我没有重现的确切步骤,但似乎与绘制特定内容有关,但我仍然没有通过应用程序报告 openGL 错误,包括在 presentFrameBuffer 之前的一次错误检查.如果我在 presentFrameBuffer 之前添加 glFinish 会在 glFinish 中崩溃.

I don't have exact steps to reproduce, but seems related to drawing something specific, still I have no openGL error reported trough the application, including one error check right before the presentFrameBuffer. If I add glFinish before the presentFrameBuffer will crash in the glFinish.

应用程序因 EXC_BAD_ACCESS(代码=1,地址=0x1)和上述调用堆栈而崩溃,没有任何其他错误/日志/调试信息.

Application is crashing with EXC_BAD_ACCESS (code=1, address=0x1) and the above callstack without any other error/log/debug info.

这是崩溃时报告的调用堆栈:

Here is the callstack reported at the crash:

线程 1,队列:com.apple.main-thread

Thread 1, Queue : com.apple.main-thread

>     #0    0x36871e46 in gpus_ReturnGuiltyForHardwareRestart ()
>     #1    0x36872764 in gpusSubmitDataBuffers ()
>     #2    0x31eae624 in SubmitPacketsIfAny ()
>     #3    0x378a337a in gliPresentViewES ()
>     #4    0x325b6df2 in -[EAGLContext presentRenderbuffer:] ()
>     #5    0x0052986e in EAGLContext_presentRenderbuffer(EAGLContext*, objc_selector*, unsigned int) ()
>     #6    0x000e2a48 in -[EAGLView presentFramebuffer] at /svn/src_svn/GG/iphone/Classes/EAGLView.mm:228
>     #7    0x000e4066 in -[GGViewController drawFrame] at /svn/src_svn/GG/iphone/Classes/GGViewController.mm:504
>     #8    0x3809ab0a in __NSFireTimer ()
>     #9    0x39d36856 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
>     #10   0x39d36502 in __CFRunLoopDoTimer ()
>     #11   0x39d35176 in __CFRunLoopRun ()
>     #12   0x39ca823c in CFRunLoopRunSpecific ()
>     #13   0x39ca80c8 in CFRunLoopRunInMode ()
>     #14   0x39b9333a in GSEventRunModal ()
>     #15   0x3551b288 in UIApplicationMain ()
>     #16   0x000e1bae in main at /svn/src_svn/GG/iphone/main.m:14

有人知道这个吗?

推荐答案

如果您使用的是 VAO,这可能是由于索引缓冲区(元素数组缓冲区)引用的顶点超出了顶点缓冲区限制(VBO)造成的.

If you are using VAO, this can be caused by the index buffer (element array buffer) referencing vertices beyond the vertex buffer limits (VBO).

请记住,元素数组缓冲区存储在 VAO 中,因此只要绑定了 VAO,每次调用 glBindBuffer( GL_ELEMENT_ARRAY_BUFFER ) 替换索引缓冲区.如果您在移动到场景的下一个对象时忘记取消绑定 VAO,您将更改 上一个调用的 VAO.

Keep in mind that the element array buffer is stored in the VAO, so as long as the VAO is bound, each call to glBindBuffer( GL_ELEMENT_ARRAY_BUFFER ) replaces the index buffer. If you forget to unbind the VAO when you move to your scene's next object you will be altering the VAO of the previous call.

更多信息在这里:http://www.opengl.org/wiki/Vertex_Specification#Index_buffers

还有一个调试提示:过大的顶点缓冲区,它可能会将此崩溃变成一个故障,然后您可以使用 XCode 的 OpenGL ES 帧捕获工具进行检查(这需要 XCode 4.5 和 iOS 6).

And a debugging tip: oversize your vertex buffers, it might turn this crash into a glitch that you can then inspect with the OpenGL ES frame capture tool of XCode (this requires XCode 4.5 and iOS 6).

这篇关于gpus_ReturnGuiltyForHardwareRestart 崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆