Android GLSurfaceView EGL_BAD_CONFIG 源码分析定位

分析了Android系统中由于创建EGLContext失败导致的EGL_BAD_CONFIG异常,从源码层面追踪到问题可能在于获取无效的display。排查了可能是设备不支持OpenGLES2的情况,发现大部分新机型都支持。最后指出,可能是由于onPause()没有正确调用导致的状态错误。建议确保Activity的onResume()和onPause()与GLSurfaceView的相应方法同步调用。

最近查看bugly ,发现存在一个多版本遗留 棘手的量级几十w的bug:

java.lang.RuntimeException
createContext failed: EGL_BAD_CONFIG
android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1245)
android.opengl.GLSurfaceView$EglHelper.throwEglException(GLSurfaceView.java:1236)
android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1086)
android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1462)
android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1299)

报错信息发生在Android framework api 中,因此考虑从源码入手,本案例是基于 android 7.0 。

1.查看源码走向

先来看下GLSurfaceView$EglHelper#start():

frameworks/base/opengl/java/android/opengl/GLSurfaceView.java

       /**
         * Initialize EGL for a given configuration spec.
         * @param configSpec
         */
        public void start() {
   
   
    
            mEgl = (EGL10) EGLContext.getEGL();
            mEglDisplay = mEgl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
			//.......
            GLSurfaceView view = mGLSurfaceViewWeakRef.get();
            if (view == null) {
   
   
                mEglConfig = null;
                mEglContext = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值