gpus_ReturnGuiltyForHardwareRestart崩溃

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

它在第一帧没有崩溃,它画了一会儿,然后突然崩溃。

我没有确切的步骤来重现,但似乎与绘制特定的东西有关,仍然没有报告的OpenGL错误通过应用程序,包括之前presentFrameBuffer一个错误检查。 如果我添加glFinish之前presentFrameBuffer将在glFinish崩溃。

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

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

线程1,队列: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)之外的顶点引起的。

请记住,元素数组缓冲区存储在VAO中,所以只要VAO被绑定,每次调用glBindBuffer(GL_ELEMENT_ARRAY_BUFFER)就会replace索引缓冲区。 如果在移动到场景的下一个对象时忘记取消绑定VAO,将会改变前一个呼叫的VAO。

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

debugging技巧:超大顶点缓冲区,它可能会把这个崩溃转化为一个小问题,然后你可以使用XCode的OpenGL ES帧捕获工具(这需要XCode 4.5和iOS 6)进行检查。

看起来问题是由GL_TEXTURE1的glEnableClientState(GL_TEXTURE_COORD_ARRAY)造成的,而不是在顶点缓冲区中提供实际的数据。