2012-05-05 1 views
23

Ho un'applicazione OpenGL nel Google Play Store e sto affrontando un'eccezione quotidiano:java.lang.RuntimeException: eglSwapBuffers fallito: EGL_SUCCESS

java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS 
at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1085) 
at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1043) 
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1369) 
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1123) 

Il problema è, su tutti i miei smartphone che non posso riprodurre questo errore. Ho già contattato Google per qualsiasi informazione sul dispositivo, ma non ne hanno (quindi dicono). Le informazioni sulla piattaforma nell'eccezione sono impostate su "ALTRO".

ho trovato alcuni suggerimenti sulla rete che questo errore potrebbe essere da un dispositivo Samsung Galaxy Y, e ho trovato alcuni suggerimenti per includere:

android:configChanges="orientation|screenSize" 

nel file manifest di Android, ma questo non funziona!

E ovviamente ho implementato la gestione onPause e onResume per la mia superficie GL che, in caso contrario, produce altri problemi eglSwapBuffer.

Qualcuno ha una soluzione per questo problema?

Grazie!

+1

Hai trovato una soluzione a questo problema? –

+1

No, non ho trovato alcuna soluzione, ho rimosso quel dispositivo Samsung Galaxy Y dall'elenco dei dispositivi supportati. –

+0

Confermo di aver riscontrato lo stesso errore su un Samsung Galaxy SIII –

risposta

4

Nessuna soluzione, solo osservazioni.

La chiamata a eglSwapBuffers returns false. La seguente gestione degli errori non risolve il caso in cui non vi siano errori - potenzialmente non è stato impostato da EGL; O il valore restituito è errato.

non ho trovato fonti di corrispondenza. Questi dispositivi eseguono patching GLSurfaceView s (la ricerca di traccia stack non ha trovato nulla ...) o usano una versione intermedia (beh, non so se 4.0.2 fosse ufficiale, grepcode contiene solo 4.0.1 e 4.0.3); O Mi sono perso qualcosa.

si deve rintracciare quali dispositivi esatte/versioni di Android incorrere in questo problema. Quindi è possibile provare a risolvere questo problema fornendo un patch GLSurfaceView o utilizzando una configurazione EGL diversa, a condizione che il problema possa essere risolto. There are bugs che non vengono gestiti per settimane; chiedendo cosa più problemi il team responsabile di fronte ...

+1

Grazie per la risposta. Ho studiato anche le origini Android e sono giunto alle stesse conclusioni. Nel frattempo un utente ha detto che sta usando questo dispositivo Samsung Galaxy Y. Ne ho già ordinato uno per essere in grado di testarlo. Ma comunque, se la soluzione per questo problema è scrivere il mio GLSurfaceView, non ne sono felice. Ma grazie comunque per i tuoi suggerimenti. –

+1

@AndiDroid qualche progresso? –

+0

Ho paura di no. Manh menzionò che aveva lo stesso problema ma nel suo caso il ricordo non era abbastanza. Ho ordinato e testato la mia app su questo Samsung Galaxy Y che potrebbe causare il problema. Ma sulla mia edizione tutto funziona. L'unico progresso potrebbe essere il riconoscimento, che non si dovrebbe provare a rendere un'app compatibile con tutti i dispositivi anche con quelli che ovviamente non hanno senso (schermi a bassa risoluzione, ecc.). Perché penso che uno di questi dispositivi di fascia bassa stia causando questi problemi. –

6

La memoria potrebbe non essere sufficiente per caricare tutti i dati in un primo momento. Ho incontrato questo problema anche quando realizzo il mio gioco con AndEngine, troppo Atlas con dimensioni superiori a 1024x1024, i dati potrebbero essere infranti.

+1

Grazie per il suggerimento. –

+2

Ho trame fino a 2048x1024 pixel che carico all'avvio dell'applicazione. Finora non so quale dispositivo causi queste eccezioni perché il Samsung Galaxy Y non era il problema, ho testato con successo la mia app su questo dispositivo. Forse l'unico modo per sbarazzarsi di questa eccezione è filtrare i dispositivi di fascia bassa. –

11

Nessuna soluzione, basta lasciare un commento,

Per alcuni motivi non posso commentare i post precedenti, ma ho alcune osservazioni, che forse potrebbero aiutare.

Abbiamo lo stesso problema e stiamo lottando per trovare una soluzione ... Abbiamo drasticamente ridotto le dimensioni delle nostre trame e ora nessuna è più grande di 1024x900 (non dimenticate quelle dei font). Ma ne abbiamo ancora bisogno e il problema è ancora lì. Abbiamo individuare i dispositivi problematici per i seguenti:

Samsung Galaxy Y (GT-S5360 GT-S5360B GT-S5360L GT-S5363 GT-S5368 GT-S5369 SCH-I509 SCH-i509) 
Samsung Galaxy Y Duos (GT-S6102 GT-S6102B GT-S6102E ivory) 
Samsung Galaxy Ace (GT-S5830 GT-S5830B GT-S5830C GT-S5830D GT-S5830G GT-S5830L GT-S5830M GT-S5830T GT-S5830i GT-S5838 GT-S5839i GT-S6358 SCH-I619 SHW-M240S) 
Samsung Galaxy Ace Duos (GT-S6802 GT-S6352 GT-S6802B SCH-I579 SCH-I589 SCH-i579 SCH-i589) 
Samsung Galaxy Mini (GT-S5570 GT-S5570B GT-S5570I GT-S5570L GT-S5578 SGH-T499 SGH-T499V SGH-T499Y) 
Samsung Galaxy Pocket (GT-S5300 GT-S5300B GT-S5302 GT-S5302B) 

anche l'errore viene segnalato in due versioni con diversi numeri di riga:

java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS 
    at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1099) 
    at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1057) 
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1389) 
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1138) 

java.lang.RuntimeException: eglSwapBuffers failed: EGL_SUCCESS 
    at android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1085) 
    at android.opengl.GLSurfaceView$EglHelper.swap(GLSurfaceView.java:1043) 
    at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1369) 
    at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1123) 

Non so se sono utile qui, ma nel caso in cui aiuti ...

+1

Ho aggiornato l'elenco dei dispositivi con tutti gli aromi MODELLO di ciascun tipo di modello. – Florian

+0

ottenuto lo stesso errore in Galaxy SIII, proprio in diverse linee: java.lang.RuntimeException: eglSwapBuffers fallito: EGL_BAD_ALLOC a android.opengl.GLSurfaceView $ EglHelper.throwEglException (GLSurfaceView.java:1178) a android.opengl.GLSurfaceView $ EglHelper.swap (GLSurfaceView.java:1136) su android.opengl.GLSurfaceView $ GLThread.guardedRun (GLSurfaceView.java:1463) su android.opengl.GLSurfaceView $ GLThread.run (GLSurfaceView.java:1216) –

+0

Ho ottenuto questo da 16 dispositivi e 12 di questi sono GT-S5830i (Samsung Galaxy Ace). –

1

La soluzione che ho finito per implementare è stata quella di aggiungere un gestore di eccezioni globale per rilevare questo errore (dato che è stato gettato fuori da qualsiasi thread su cui ho il controllo).

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {...}) 

Quindi almeno l'applicazione non si arresta e posso visualizzare un messaggio che spiega la situazione.