You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派3(Raspbian Jessie)无法启用OpenGL ES 2.0的技术求助

解决树莓派3 Raspbian Jessie上OpenGL ES 2.0上下文切换问题

你已经做好了基础配置——启用Full KMS驱动、分配足够GPU内存、安装了必要依赖,但核心问题出在EGL上下文的创建逻辑上,导致程序默认使用了OpenGL ES 1.1的上下文。下面是具体的修复方案:

1. 修复EGL上下文创建参数(最关键)

你已经定义了context_attribs数组来指定要创建OpenGL ES 2.0的上下文,但调用eglCreateContext时并没有传入这个参数!默认情况下EGL会创建最低兼容的上下文(也就是1.1版本)。

修改这一行代码:

// 原代码:未传入版本属性数组,默认创建ES 1.1上下文
eglContext = eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT, NULL);

// 修改为:传入context_attribs明确指定ES 2.0版本
eglContext = eglCreateContext(eglDisplay, eglConfig, EGL_NO_CONTEXT, context_attribs);

同时,添加上下文创建的错误检查,避免静默失败:

if (eglContext == EGL_NO_CONTEXT) {
    fprintf(stderr, "Failed to create EGL ES 2.0 context: 0x%x\n", eglGetError());
    exit(1);
}

2. 验证EGL配置的有效性

你的config_attribs已经包含了EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,这是正确的,但可以额外验证选中的配置是否真的支持ES 2.0:

// 在eglChooseConfig执行后添加
EGLint renderableType;
eglGetConfigAttrib(eglDisplay, eglConfig, EGL_RENDERABLE_TYPE, &renderableType);
if (!(renderableType & EGL_OPENGL_ES2_BIT)) {
    fprintf(stderr, "Selected EGL config does not support OpenGL ES 2.0\n");
    exit(1);
}

3. 系统配置二次确认

虽然你提到已经启用Full KMS和分配256MB GPU内存,但可以再检查/boot/config.txt的设置是否生效:

  • 确保存在dtoverlay=vc4-kms-v3d(Full KMS驱动,替代旧的enable_kms配置)
  • 确保gpu_mem=256设置正确
    修改后需要重启树莓派使配置生效。

4. 编译链接验证

你的编译命令gcc texture.c -o texture -lEGL -lX11 -lGLESv2是正确的,已经链接了对应ES 2.0的libGLESv2.so库,只要避免误链接libGLESv1_CM.so即可。

测试修改后的程序

重新编译运行后,你应该会看到OpenGL version输出变为OpenGL ES 2.0 Mesa 13.0.0,同时glReadPixels的结果也会和写入的数据一致。

内容的提问来源于stack exchange,提问作者konze

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:42:33