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

时间:2014-11-14 00:11:11

标签: opengl egl

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

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

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

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

egl在没有显示和xwindows或Wayland的情况下工作吗?

2 个答案:

答案 0 :(得分:6)

这是一个反复出现的问题。 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切换到图形模式或在显示帧缓冲区上有任何图形输出一点都不。

答案 1 :(得分:0)

正如datenwolf告诉你的那样,你可以在不使用AMD和AMD GPU的情况下创建一个帧缓冲区。因为iam使用带有EGL的AMD显卡和iam能够创建一个帧缓冲区和iam绘图。使用Mesa Library配置无x你可以实现。