2013-01-07 13 views
11

Awaria aplikacji w presentFrameBuffer (podczas uruchamiania na pierwszym planie, bez przerwania).gpus_ReturnGuiltyForHardwareRestart crash

Nie ulega awarii w pierwszej klatce, trwa przez chwilę, a następnie nagle ulega awarii.

Nie mam dokładnych kroków do odtworzenia, ale wydaje się, że wiąże się to z rysowaniem czegoś konkretnego, jednak nie mam żadnego zgłoszenia błędu OpenGL przez aplikację, w tym jednego sprawdzenia błędu tuż przed presentFrameBuffer. Jeśli dodaję glFinish zanim presentFrameBuffer zawiedzie się w glFish.

Aplikacja ulega awariom z EXC_BAD_ACCESS (kod = 1, adres = 0x1) i powyższym stosem wywoływanym bez żadnych innych informacji o błędzie/logu/debugowania.

Oto callstack zgłaszane w katastrofie:

gwintu 1, kolejki: com.apple.main gwintem

>  #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 

Każdy ma żadnego pojęcia o tym?

Odpowiedz

12

Jeśli używasz VAO, może to być spowodowane przez bufor indeksu (bufor tablicy elementów) odwołujący się do wierzchołków poza granicami bufora wierzchołków (VBO).

Należy mieć na uwadze, że bufor elementu tablicy przechowywanej w VAO, tak długo, jak długo VAO jest związana, każde wywołanie glBindBuffer (GL_ELEMENT_ARRAY_BUFFER) zastępuje bufor indeksu. Jeśli zapomnisz rozwiązać VAO po przejściu do następnego obiektu sceny, zmienisz VAO połączenia poprzednie.

Więcej informacji tutaj: http://www.opengl.org/wiki/Vertex_Specification#Index_buffers

I wskazówka debugowanie: naddatek swoich buforów wierzchołków, to może włączyć tę katastrofę na usterki, które można następnie sprawdź za pomocą narzędzia do przechwytywania rama OpenGL ES z XCode (wymaga XCode 4.5 i iOS 6).

+1

Dobra wskazówka do debugowania. –

1

Wygląda na to, że problem spowodowany był przez glEnableClientState (GL_TEXTURE_COORD_ARRAY) dla GL_TEXTURE1, ale nie dostarczanie rzeczywistych danych w buforze wierzchołków.