2012-05-05 45 views
23

我已經在谷歌Play商店的OpenGL應用程序,我面臨着每日例外:了java.lang.RuntimeException:eglSwapBuffers失敗: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) 

的問題是,在我所有的智能手機我不能重現此錯誤。我已經與Google聯繫了任何設備信息,但他們沒有(所以他們說)。異常中的平臺信息設置爲「其他」。

我發現在網絡上,這種錯誤可能是從三星Galaxy Y軟元件一些提示,我發現了一些建議,包括:

android:configChanges="orientation|screenSize" 
在Android清單文件

,但這不起作用!

當然,我的onPause和onResume處理是爲我的GL表面實現的,如果不是這樣,會產生其他eglSwapBuffer問題。

有沒有人解決這個問題?

謝謝!

+1

您是否找到了解決此問題的解決方案? – 2012-07-18 12:08:13

+1

不,我沒有找到解決方案,我從支持的設備列表中刪除了三星Galaxy Y設備。 –

+0

我確認在Samsung Galaxy SIII上遇到同樣的錯誤 –

回答

4

沒有解決方案,只是觀察。

致電eglSwapBuffers returns false。以下錯誤處理不適用於沒有錯誤的情況 - 可能尚未由EGL設置; 返回值是錯誤的。

我沒有找到相關的源文件。這些設備或者運行修補程序GLSurfaceView(堆棧跟蹤搜索沒有找到任何東西...)或者它們使用中間版本(嗯,我不知道4.0.2是否是官方的,grepcode只包含4.0.1和4.0.3); 我錯過了一些東西。

你必須找出哪些確切的設備/ Android版本遇到這個問題。然後,您可以嘗試通過提供已修補的GLSurfaceView或使用不同的EGL配置來解決此問題,前提是可以根本解決問題。 There are bugs未處理數週;想知道負責的團隊面臨什麼樣的更大問題...

+1

感謝您的回答。我也研究過Android的來源,並得出了相同的結論。與此同時,一位用戶提到他正在使用這款三星Galaxy Y設備。我已經爲我訂購了一個能夠測試這個。但無論如何,如果這個問題的解決方案是寫我自己的GLSurfaceView我不滿意它。不過謝謝你的建議。 –

+1

@AndiDroid有什麼進展? –

+0

恐怕不是。 Manh提到他有同樣的問題,但在他的情況下,記憶力不夠。我已經在這款Samsung Galaxy Y上訂購併測試了我的應用程序,這可能會導致問題。但在我的版本上一切正常。唯一的進步可能是認識,你不應該嘗試使應用程序與所有設備兼容,即使那些顯然沒有意義的應用程序(低分辨率屏幕等)。因爲我認爲這些低端設備中的一個導致了這個問題。 –

6

你的內存可能不足以加載所有數據。在AndEngine製作遊戲時,我也遇到過這個問題,太多的尺寸大於1024x1024的Atlas,數據可能被破壞。

+1

感謝您的提示。 –

+2

我有紋理高達2048x1024像素,我在應用程序啓動加載。到目前爲止,我不知道哪個設備會導致這些異常,因爲三星Galaxy Y不是問題,我成功地在該設備上測試了我的應用。也許擺脫這種異常的唯一方法是過濾出低端設備。 –

11

沒有解決,只是發表評論

對於一些原因,我無法評論以前的職位,但我有一些意見這或許能有所幫助。

我們遇到了同樣的問題,並在努力尋找解決方案......我們大幅縮小了紋理的大小,現在沒有一個大於1024x900(不要忘記字體大小)。但我們仍然需要幾個,問題仍然存在。 我們已經查明問題的設備爲以下物質:

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) 

而且錯誤是兩種風格不同的行號報道:

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) 

我不知道我是否有用在這裏,但萬一它有幫助...

+1

我用每種型號的所有MODEL口味更新了設備列表。 – Florian

+0

銀河SIII得到了同樣的錯誤,只是在不同的線路: 了java.lang.RuntimeException:eglSwapBuffers失敗:EGL_BAD_ALLOC 在android.opengl.GLSurfaceView $ EglHelper.throwEglException(GLSurfaceView.java:1178) 在android.opengl.GLSurfaceView $在Android.opengl.GLSurfaceView $ GLThread.guardedRun(GLSurfaceView.java:1463) 在android.opengl.GLSurfaceView $ GLThread.run(GLSurfaceView.java:1216) –

+0

我得到了這個來自16臺設備,其中12臺是GT-S5830i(三星Galaxy Ace)。 –

1

我最終實現的解決方案是添加一個全局異常處理程序來捕獲此錯誤(因爲它被拋出任何線程我有控制權)。

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

所以至少應用程序不會崩潰,我可以把一個消息,說明情況。