Подтвердить что ты не робот

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

Кто-нибудь знает об этом?

4b9b3361

Ответ 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, но не содержит фактические данные в буфере вершин.