Gpus_ReturnGuiltyForHardwareRestart crash
Сбой приложений в presentFrameBuffer (во время работы на переднем плане, без прерывания).
Он не разбивается в первом кадре, он натягивает какое-то время, после чего он неожиданно падает.
У меня нет точных шагов для воспроизведения, но, похоже, связано с рисованием чего-то определенного, но у меня нет ошибки openGL, сообщаемой через приложение, включая одну проверку ошибок прямо перед presentFrameBuffer. Если я добавлю glFinish до того, как текущийFrameBuffer выйдет из строя в 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
Кто-нибудь знает об этом?
Ответы
Ответ 1
Если вы используете VAO, это может быть вызвано буфером индекса (буфером массива элементов), ссылающимся на вершины за пределами границ буфера вершин (VBO).
Имейте в виду, что буфер массива элементов хранится в VAO, поэтому, пока VAO привязан, каждый вызов glBindBuffer (GL_ELEMENT_ARRAY_BUFFER) заменяет индексный буфер. Если вы забудете развязать VAO при переходе к следующему объекту сцены, вы будете изменять VAO вызова Предыдущий.
Дополнительная информация здесь: http://www.opengl.org/wiki/Vertex_Specification#Index_buffers
И подсказка для отладки: увеличьте количество буферов вершин, это может привести к сбою этого сбоя, что вы можете проверить с помощью инструмента захвата кадров OpenGL ES XCode (для этого требуются XCode 4.5 и iOS 6).
Ответ 2
Похоже, проблема вызвана тем, что glEnableClientState (GL_TEXTURE_COORD_ARRAY) для GL_TEXTURE1, но не содержит фактические данные в буфере вершин.