eglCreateFramebuffer()导致EGL_BAD_CONFIG(无效的EGL帧缓冲区配置)

时间:2019-01-27 01:01:40

标签: egl opengl-es-3.0

我在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返回有问题的配置?

2 个答案:

答案 0 :(得分:0)

需要更多信息。查询您选择的配置的所有属性-打印出来,看看那里是否有趣。

我与Bram在一起,您可能正在选择一个ES2配置,然后需要ES3上下文。

答案 1 :(得分:0)

很可能与您不再相关,但是我遇到了同样的问题,并在此处发布了我的修复程序,以防将来其他人也会遇到此问题:

就像stonethrow所说,您怀疑配置是ES2而不是ES3,从而导致不兼容。 将EGL_RENDERABLE_TYPEEGL_OPENGL_ES2_BIT更改为EGL_OPENGL_ES3_BIT对我有帮助。