ChillingVan / android-openGL-canvas

An Android library that provides views using openGL canvas to draw things on SurfaceView or TextureView.
Apache License 2.0
1.12k stars 214 forks source link

EGL_BAD_CONFIG 问题以及 ANR 问题 #51

Open jinfatimay opened 6 years ago

jinfatimay commented 6 years ago

原本是部分的 Android 4.4(api 19)手机(三星手机较常见),在使用 GLContinuousTextureView 的时候会发生 createContext failed: EGL_BAD_CONFIG 闪退情况。 看了看程序之后发现,在 EglHelperFactory 中一个看类别名称是 api 17 以上就要使用的类别 EglHelperAPI17 却只有在 KITKAT_WATCH(api 20)以上时才会使用。 我猜测可能是这里有问题,将 KITKAT_WATCH 改成 KITKAT 后,果然没有直接 createContext failed: EGL_BAD_CONFIG 闪退了。 但...很快就出现新问题,部分 4.4 手机(三星手机较常见)在 GLTextureView.onSurfaceTextureDestroyed 的时候,当呼叫到 GLThread 类别中的 sGLThreadManager.wait(); 时,就会发生 ANR 的问题。 可以麻烦帮忙看看什么问题吗?感谢!

ChillingVan commented 6 years ago

我之前在API20以上才用EglHelperAPI17 就是因为在4.4上有其它问题..我再试试在4.4上用EglHelperAPI17 看看这个ANR吧

ChillingVan commented 6 years ago

开始的时候并没有加EglHelperAPI17 的。当时用4.4手机开发了很久也没有什么问题。EglHelperAPI17 是后来试用觉得没问题采用的。 从描述上来看也是部分机型有问题,这个我也很无奈啊,手里并没有那么多机器

jinfatimay commented 6 years ago

我暂时先改回原来那样 api 20 以上才用 EglHelperAPI17,再观察看看。 偷偷问一下 EglHelperAPI17 跟 else 里的那个差别再哪儿阿?如果能修好部分 4.4 手机 EGL_BAD_CONFIG 的情况,那就不用理会 ANR 问题了。

ChillingVan commented 6 years ago

EglHelperAPI17换了Android的新的EGL相关API,那套API跟之前的差不多,具体差别忘了,我当时也只是抱着官方提供了新的API去用吧这样加进去的。 一般来说 EGL_BAD_CONFIG 是通常是config的问题,可以参考这个issue: https://github.com/ChillingVan/android-openGL-canvas/issues/44 可能不同版本需要用不同config.