我在Google Play上的应用在客户设备上引起了此错误(但在我的测试设备上以及Google的启动前报告设备上都没有)
EGL_BAD_CONFIG (无效的EGL帧缓冲区配置)
进行此呼叫时:eglCreateContext( display, config, NULL, contextAttribs );
我传递的属性:
const EGLint contextAttribs[] =
{
EGL_CONTEXT_CLIENT_VERSION, 3,
EGL_NONE
};
像这样成功检索到显示内容:
EGLDisplay display = eglGetDisplay( EGL_DEFAULT_DISPLAY );
已使用以下属性成功eglChooseConfig()
检索了配置...
const EGLint attribs[] = {
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_DEPTH_SIZE, withDepthBuffer ? 16 : 0,
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_NONE
};
...以及这些后备属性(如果不匹配):
const EGLint attribs_fallback[] = {
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_DEPTH_SIZE, 16,
EGL_BLUE_SIZE, 5,
EGL_GREEN_SIZE, 6,
EGL_RED_SIZE, 5,
EGL_NONE
};
在首选配置或后备配置eglChooseConfig()
之后,匹配的numConfigs至少为1。
此外,对eglCreateWindowSurface()
的先前调用也成功。
此与:
EGL 供应商:Android
EGL 版本:1.4 Android META-EGL
是什么导致某些设备在eglCreateContext()调用上失败?
如果无效,为什么eglChooseConfig返回有问题的配置?
答案 0 :(得分:0)
需要更多信息。查询您选择的配置的所有属性-打印出来,看看那里是否有趣。
我与Bram在一起,您可能正在选择一个ES2配置,然后需要ES3上下文。
答案 1 :(得分:0)
很可能与您不再相关,但是我遇到了同样的问题,并在此处发布了我的修复程序,以防将来其他人也会遇到此问题:
就像stonethrow所说,您怀疑配置是ES2而不是ES3,从而导致不兼容。
将EGL_RENDERABLE_TYPE
从EGL_OPENGL_ES2_BIT
更改为EGL_OPENGL_ES3_BIT
对我有帮助。