2012-05-05 44 views
23

Tôi đã một ứng dụng OpenGL trong Google Play Store và tôi đang phải đối mặt với một ngoại lệ hàng ngày:java.lang.RuntimeException: eglSwapBuffers thất bại: 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) 

Vấn đề là, trên tất cả các điện thoại thông minh của tôi, tôi không thể tái tạo lỗi này. Tôi đã liên hệ với Google về bất kỳ thông tin thiết bị nào, nhưng họ không có thông tin gì (vì vậy họ nói). Thông tin nền tảng trong ngoại lệ được đặt thành "KHÁC".

tôi thấy một số gợi ý trên mạng rằng lỗi này có thể là từ một thiết bị Samsung Galaxy Y, và tôi thấy một số gợi ý để bao gồm:

android:configChanges="orientation|screenSize" 

trong file manifest Android, nhưng điều này không làm việc!

Và tất nhiên tôi đã xử lý onPause và onResume được triển khai cho bề mặt GL của mình, nếu không, sẽ tạo ra các vấn đề khác về eglSwapBuffer.

Có ai là giải pháp cho vấn đề này không?

Cảm ơn!

+1

Bạn đã tìm thấy giải pháp cho vấn đề này chưa? –

+1

Không, tôi không tìm thấy giải pháp nào, tôi đã xóa thiết bị Samsung Galaxy Y đó khỏi danh sách các thiết bị được hỗ trợ. –

+0

Tôi xác nhận gặp lỗi tương tự trên Samsung Galaxy SIII –

Trả lời

4

Không có giải pháp, chỉ quan sát.

Cuộc gọi đến eglSwapBuffers returns false. Xử lý lỗi sau không đối phó với trường hợp không có lỗi - có khả năng nó chưa được đặt bởi EGL; HOẶC giá trị trả về sai.

Tôi không tìm thấy nguồn phù hợp. Các thiết bị này hoặc chạy vá GLSurfaceView s (tìm kiếm theo dõi ngăn xếp không tìm thấy bất kỳ thứ gì ...) hoặc chúng sử dụng phiên bản ở giữa (tốt, tôi không biết nếu 4.0.2 là chính thức, grepcode chỉ chứa 4.0.1 và 4.0.3); HOẶC Tôi đã bỏ lỡ điều gì đó.

Bạn phải theo dõi các thiết bị/phiên bản android chính xác nào gặp sự cố này. Sau đó, bạn có thể cố gắng giải quyết vấn đề này bằng cách tự cung cấp bản vá GLSurfaceView hoặc sử dụng cấu hình EGL khác nhau - miễn là vấn đề có thể được khắc phục. There are bugs bị bỏ cấm trong tuần; tự hỏi những vấn đề lớn hơn mà nhóm chịu trách nhiệm phải đối mặt ...

+1

Cảm ơn bạn đã trả lời. Tôi đã nghiên cứu các nguồn Android quá và tôi đã đi đến cùng một kết luận. Trong khi đó, một người dùng đã đề cập rằng anh ấy đang sử dụng thiết bị Samsung Galaxy Y này. Tôi đã ra lệnh cho tôi để có thể kiểm tra điều này. Nhưng dù sao, nếu giải pháp cho vấn đề này là viết GLSurfaceView của riêng tôi thì tôi không hài lòng với nó. Nhưng cảm ơn anyway cho đề xuất của bạn. –

+1

@AndiDroid có tiến triển nào không? –

+0

Tôi không sợ. Mạnh đã đề cập rằng anh có cùng một vấn đề nhưng trong trường hợp của anh, trí nhớ là không đủ. Tôi đã đặt hàng và thử nghiệm Ứng dụng của mình trên Samsung Galaxy Y có thể gây ra sự cố. Nhưng trên tất cả mọi thứ của tôi phiên bản hoạt động. Sự tiến bộ duy nhất có thể là sự công nhận, rằng bạn không nên cố gắng làm cho một ứng dụng tương thích với tất cả các thiết bị ngay cả với những thiết bị rõ ràng là không có ý nghĩa (màn hình độ phân giải thấp, vv). Bởi vì tôi nghĩ một trong những thiết bị cấp thấp này đang gây ra vấn đề này. –

6

Bộ nhớ của bạn có thể không đủ để tải tất cả dữ liệu lúc đầu. Tôi cũng gặp vấn đề đó khi tạo trò chơi với AndEngine, quá nhiều Atlas với kích thước lớn hơn 1024x1024, dữ liệu có thể bị hỏng.

+1

Cảm ơn gợi ý. –

+2

Tôi đã hoạ tiết lên đến 2048x1024 pixel mà tôi tải khi khởi động Ứng dụng. Cho đến nay tôi không biết thiết bị nào gây ra những ngoại lệ này vì Samsung Galaxy Y không phải là vấn đề, tôi đã thử nghiệm ứng dụng của mình trên thiết bị này thành công. Có lẽ cách duy nhất để loại bỏ ngoại lệ này là lọc ra các thiết bị đầu cuối thấp hơn. –

11

Không có giải pháp, chỉ cần chú

Đối với một số lý do tôi không thể bình luận về bài viết trước nhưng tôi đã một số quan sát mà có lẽ có thể giúp đỡ.

Chúng tôi có cùng một vấn đề và đấu tranh để tìm giải pháp ... Chúng tôi đã giảm đáng kể kích thước họa tiết của chúng tôi và bây giờ không có gì lớn hơn 1024x900 (đừng quên các phông chữ). Nhưng chúng ta vẫn cần vài cái và vấn đề vẫn còn đó. Chúng tôi đã xác định được các thiết bị có vấn đề với những người sau đây:

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) 

Ngoài ra các lỗi được báo cáo trong hai hương vị với số dòng khác nhau:

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) 

Tôi không biết nếu tôi có ích ở đây, nhưng trong trường hợp nó giúp ...

+1

Tôi đã cập nhật danh sách các thiết bị có tất cả các hương vị MODEL của từng kiểu máy. – Florian

+0

có cùng một lỗi trong Galaxy SIII, chỉ ở dòng khác nhau: java.lang.RuntimeException: eglSwapBuffers thất bại: EGL_BAD_ALLOC tại android.opengl.GLSurfaceView $ EglHelper.throwEglException (GLSurfaceView.java:1178) tại android.opengl.GLSurfaceView $ EglHelper.swap (GLSurfaceView.java:1136) tại android.opengl.GLSurfaceView $ GLThread.guardedRun (GLSurfaceView.java:1463) tại android.opengl.GLSurfaceView $ GLThread.run (GLSurfaceView.java:1216) –

+0

Tôi hiểu từ 16 thiết bị và 12 trong số đó là GT-S5830i (Samsung Galaxy Ace). –

1

Giải pháp mà tôi đã kết thúc khi triển khai là thêm trình xử lý ngoại lệ toàn cục để phát hiện lỗi này (vì nó bị ném ra ngoài bất kỳ chuỗi nào tôi có quyền kiểm soát).

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

Vì vậy, ít nhất ứng dụng không bị lỗi và tôi có thể đưa ra thông báo giải thích tình huống.

Các vấn đề liên quan