2013-01-07 2 views
11

L'applicazione si arresta in modo anomalo in presentFrameBuffer (mentre è in esecuzione in primo piano, non si verificano interruzioni).gpus_ReturnGuiltyForHardwareRestart arresto

Non si arresta in modo anomalo nel primo fotogramma, si disegna per un po 'e si blocca improvvisamente.

Non ho passaggi precisi da riprodurre, ma sembra correlato a disegnare qualcosa di specifico, tuttavia non ho riportato errori OpenGL attraverso l'applicazione, incluso un controllo degli errori subito prima di presentFrameBuffer. Se aggiungo glFinish prima che presentFrameBuffer si blocchi in glFinish.

L'applicazione si arresta in modo anomalo con EXC_BAD_ACCESS (codice = 1, indirizzo = 0x1) e il suddetto callstack senza altre informazioni di errore/registro/debug.

Ecco l'stack di chiamate riferito al crollo:

Thread 1, Coda: 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 

Qualcuno ha qualche idea su questo?

risposta

12

Se si utilizza VAO, ciò può essere causato dal buffer di indice (buffer di matrice di elementi) che fa riferimento ai vertici oltre i limiti del buffer di vertici (VBO).

tenere presente che il buffer elemento di matrice viene memorizzato nella VAO, così finché il VAO è vincolata, a ogni chiamata glBindBuffer (GL_ELEMENT_ARRAY_BUFFER) sostituisce l'index buffer. Se ti dimentichi di separare il VAO quando ti sposti al prossimo oggetto della scena, modificerai il VAO della precedente chiamata .

Maggiori informazioni qui: http://www.opengl.org/wiki/Vertex_Specification#Index_buffers

E una punta di debug: sovradimensionare i vostri buffer di vertici, potrebbe trasformare questo incidente in un problema tecnico che si può quindi ispezionare con lo strumento di cattura cornice OpenGL ES di XCode (questo richiede XCode 4.5 e iOS 6).

+1

Suggerimento per il debug. –

1

Sembra che il problema sia stato causato dall'avere glEnableClientState (GL_TEXTURE_COORD_ARRAY) per GL_TEXTURE1 ma non fornendo i dati effettivi nel buffer dei vertici.