EGL应用程序可以在控制台模式下运行吗

Bil*_*Yan 4 opengl egl

我想实现一个生成图像的opengl应用程序,我通过网页查看图像.

该应用程序旨在运行在没有显示器,没有x窗口但使用gpu的linux服务器上.

我知道egl可以使用pixmap或pbuffer作为渲染目标.

但是函数eglGetDisplay让我担心,听起来我还需要附加显示才能使它工作?

egl工作没有显示和xwindows或wayland?

dat*_*olf 7

这是一个反复出现的问题.TL; DR:使用当前的Linux图形驱动程序模型,如果不运行X服务器,就不可能将GPU与传统驱动程序一起使用.如果KMS + DRM + DRI支持GPU,则可以执行此操作.(编辑:)同样在2016年,Nvidia终于通过EGL在他们的驱动程序中引入了真正无头的OpenGL支持.


从长远来看,技术上GPU非常能够在没有连接显示器或运行图形服务器的情况下渲染到屏幕外缓冲区.然而,由于图形驱动程序和环境开发的历史,这是不可能的,但 长期以来是不可能的.当时的假设(当图形首次引入Linux时)是:"图形设备可以将图像传送到屏幕上." 显卡可以用作加速协处理器甚至不是一个想法.

除此之外,直到几年前,Linux内核本身还不知道如何与图形设备通信(除了系统地址空间某处的哑帧缓冲).X服务器是与GPU通信的,所以你需要运行它.并且第一批X服务器开发人员假设键盘和椅子之间有人.


那你有什么选择:

短期来说,如果您使用的是NVidia GPU:只需启动X服务器即可.您不需要完整的桌面环境.您甚至可以省去启动窗口管理器的麻烦.让X服务器声明VT并处于活动状态. 现在通过Nvidia驱动程序中的EGL支持无头OpenGL上下文.

如果您使用的是AMD或Intel GPU,则可以直接与它通话.无论是通过EGL还是使用KMS(Google都会调用kmscube它,在尝试时,请确保先从X服务器切换到文本VT,否则会导致X服务器崩溃).我还没有尝试过,但应该可以调整kmscube它使用GPU渲染到屏幕外缓冲区的示例,而无需将VT切换到图形模式或在显示帧缓冲区上有任何图形输出.