2012-05-05 15 views
23

Mam aplikacji OpenGL Google Play Store i jestem stoi codziennie wyjątek:java.lang.RuntimeException: eglSwapBuffers failed: 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) 

Problem polega na tym, na wszystkich moich smartfonów nie mogę odtworzyć ten błąd. Kontaktowałem się już z Google w sprawie jakichkolwiek informacji o urządzeniu, ale nie ma ich (tak mówią). Informacje o platformie w wyjątku są ustawione na "INNE".

znalazłem kilka wskazówek na internecie, że ten błąd może być z urządzenia Samsung Galaxy Y, i znalazłem kilka propozycji obejmuje:

android:configChanges="orientation|screenSize" 

w pliku manifestu Androida, ale to nie działa!

I oczywiście mam zaimplementowaną funkcję onPause i onResume dla mojej powierzchni GL, która, jeśli nie, powoduje inne problemy z eglSwapBuffer.

Czy ktoś jest rozwiązaniem tego problemu?

Dzięki!

+1

Czy znalazłeś rozwiązanie tego problemu? –

+1

Nie, nie znalazłem rozwiązania, usunąłem urządzenie Samsung Galaxy Y z listy obsługiwanych urządzeń. –

+0

Potwierdzam występowanie tego samego błędu na telefonie Samsung Galaxy SIII –

Odpowiedz

4

Brak rozwiązania, tylko obserwacje.

Połączenie z numerem eglSwapBuffers returns false. Poniższa obsługa błędów nie poradzi sobie z tym, że nie ma błędu - potencjalnie nie został ustawiony przez EGL; OR Wartość zwracana jest nieprawidłowa.

Nie znalazłem pasujących źródeł. Te urządzenia są albo załatane GLSurfaceView s (szukanie stosu nic nie znalazło ...) albo używają wersji pośredniej (no cóż, nie wiem, czy 4.0.2 było oficjalne, grepcode zawiera tylko 4.0.1 i 4.0.3); LUB Tęskniłem za czymś.

Musisz sprawdzić, które dokładnie urządzenia/wersje Androida napotykają ten problem. Następnie możesz spróbować rozwiązać ten problem, dostarczając łatkę GLSurfaceView samemu lub używając innej konfiguracji EGL - pod warunkiem, że problem może zostać naprawiony. There are bugs, które pozostają nieobsługiwane przez kilka tygodni; Zastanawiasz się, jakie większe problemy napotyka odpowiedzialny zespół ...

+1

Dzięki za odpowiedź. Przestudiowałem też źródła Androida i doszedłem do tych samych wniosków. W międzyczasie użytkownik wspomniał, że używa tego urządzenia Samsung Galaxy Y. Już zamówiłem dla mnie jeden test, żeby to przetestować. Ale w każdym razie, jeśli rozwiązaniem tego problemu jest napisanie własnego GLSurfaceView, nie jestem z niego zadowolony. Ale dzięki za twoje sugestie. –

+1

@AndiDroid jakikolwiek postęp? –

+0

Obawiam się, że nie. Manh wspomniał, że miał ten sam problem, ale w jego przypadku pamięć nie była wystarczająca. Zamówiłem i przetestowałem moją aplikację na tym Samsung Galaxy Y, która może spowodować problem. Ale w moim wydaniu wszystko działa. Jedynym postępem może być uznanie, że nie powinieneś próbować tworzyć aplikacji kompatybilnej ze wszystkimi urządzeniami nawet z tymi, które nie mają sensu (ekrany o niskiej rozdzielczości itp.). Ponieważ myślę, że jeden z tych urządzeń o niskim końcu powoduje te problemy. –

6

Twoja pamięć może nie wystarczyć, aby załadować wszystkie dane na początku. Ten problem też się pojawił podczas tworzenia gry z AndEngine, zbyt dużym Atlasem o rozmiarze większym niż 1024x1024, dane mogły zostać zerwane.

+1

Dzięki za podpowiedź. –

+2

Mam tekstury do 2048x1024 pikseli, które ładuję podczas uruchamiania aplikacji. Do tej pory nie wiem, które urządzenie powoduje te wyjątki, ponieważ Samsung Galaxy Y nie był problemem, pomyślnie przetestowałem swoją aplikację na tym urządzeniu. Być może jedynym sposobem na pozbycie się tego wyjątku jest odfiltrowanie urządzeń niższego rzędu. –

11

Brak rozwiązania, tylko komentarz

Z jakichś powodów nie mogę się wypowiedzieć dotychczasowe posty, ale mam kilka uwag, które być może pomogą.

Mamy ten sam problem i staramy się znaleźć rozwiązanie ... Drastycznie zmniejszyliśmy rozmiar naszych tekstur, a teraz żaden nie jest większy niż 1024x900 (nie zapomnij o fontach). Ale wciąż potrzebujemy kilku, a problem nadal istnieje. Musimy zidentyfikować problematyczne urządzeń do następujących: język

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) 

Również zgłaszany jest błąd w dwóch smakach z różnymi numerami linii:

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) 

Nie wiem, czy jestem przydatny tutaj, ale na wypadek, gdyby to pomogło ...

+1

Zaktualizowałem listę urządzeń ze wszystkimi smakami MODEL każdego typu modelu. – Florian

+0

dostał ten sam błąd w Galaxy SIII, tylko na różnych liniach: java.lang.RuntimeException: eglSwapBuffers failed: EGL_BAD_ALLOC na android.opengl.GLSurfaceView $ EglHelper.throwEglException (GLSurfaceView.java:1178) na android.opengl.GLSurfaceView $ EglHelper.swap (GLSurfaceView.java:1136) at android.opengl.GLSurfaceView $ GLThread.guardedRun (GLSurfaceView.java:1463) at android.opengl.GLSurfaceView $ GLThread.run (GLSurfaceView.java:1216) –

+0

Mam to z 16 urządzeń i 12 z nich to GT-S5830i (Samsung Galaxy Ace). –

1

Rozwiązaniem, które znalazłem, było dodanie globalnego programu obsługi wyjątków w celu wychwycenia tego błędu (ponieważ jest on wysyłany poza jakimkolwiek wątkiem, nad którym mam kontrolę).

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

Przynajmniej aplikacja nie ulega awarii i mogę wysłać wiadomość wyjaśniającą sytuację.

Powiązane problemy