应用程序在 presentFrameBuffer 中崩溃(在前台运行时,没有发生中断)。
不是第一帧就闪退,画了一会儿突然闪退
我没有确切的重现步骤,但似乎与绘制某些特定内容有关,但我仍然没有通过应用程序报告 openGL 错误,包括在 presentFrameBuffer 之前进行的一次错误检查。如果我在 presentFrameBuffer 之前添加 glFinish 将在 glFinish 中崩溃。
应用程序因 EXC_BAD_ACCESS(代码=1,地址=0x1)和上述调用堆栈而崩溃,没有任何其他错误/日志/调试信息。
这是崩溃时报告的调用堆栈:
线程 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 中,因此只要绑定(bind)了 VAO,每次调用 glBindBuffer( GL_ELEMENT_ARRAY_BUFFER ) 都会替换索引缓冲区。如果您在移动到场景的下一个对象时忘记取消绑定(bind) VAO,您将更改上一个调用的 VAO。
更多信息在这里:http://www.opengl.org/wiki/Vertex_Specification#Index_buffers
还有一个调试提示:过大你的顶点缓冲区,它可能会把这个崩溃变成一个小故障,然后你可以用 XCode 的 OpenGL ES 帧捕获工具检查(这需要 XCode 4.5 和 iOS 6)。
关于iphone - gpus_ReturnGuiltyForHardwareRestart 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14196977/