我正在尝试在没有X服务器的环境中使用EGL。出于测试目的,我创建了一个试图获得EGL版本的简单程序:
$ cat version.c
#include <stdio.h>
#include <EGL/egl.h>
int main() {
EGLDisplay eglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
EGLint major;
EGLint minor;
EGLBoolean eglInitialized = eglInitialize(eglDisplay, &major, &minor);
printf("%d %d %d\n", major, minor, eglInitialized);
return 0;
}
$ gcc version.c -lEGL
当我在标准的Ubuntu机器上运行它时,它运行得很好并打印1 4 1
,这意味着EGL是版本1.4并且显示已成功初始化。
要模拟我最终想要运行的服务器环境,我切换到Ctrl + Alt + F1
的虚拟控制台,但现在它失败了:
$ ./a.out
libEGL warning: DRI3: xcb_connect failed
libEGL warning: DRI2: xcb_connect failed
libEGL warning: DRI2: xcb_connect failed
0 4196000 0
远程服务器上也发生了同样的事情。
答案 0 :(得分:0)
我不是这里的专家,但我认为我足够充分地回答这个问题(虽然现在你很久以前就已经解决了)。您正在尝试使用默认显示,即系统上的X11。对于无头你可能想要使用gbm,假设你使用的是一个使用相对较新的Mesa GL库和支持它的内核(Linux或其他)的系统。
有关示例,请参阅Mesa eglinfo演示[1],有关渲染的示例,请参阅eglkms [2]。您可能希望省略设置模式的位并创建并显示帧缓冲区,您可能需要使用/ dev / dri / renderD128而不是/ dev / dri / card0。
[1] https://cgit.freedesktop.org/mesa/demos/tree/src/egl/opengl/eglinfo.c [2] https://cgit.freedesktop.org/mesa/demos/tree/src/egl/opengl/eglkms.c