当前位置: 首页 > 面试题库 >

Linux中没有X.org的OpenGL

龙俊美
2023-03-14
问题内容

我想在Linux中打开不带X的OpenGL上下文。有什么办法吗?

我知道集成英特尔图形卡硬件是可能的,尽管大多数人的系统中都装有Nvidia卡。我想要一个适用于Nvidia卡的解决方案。

如果除了通过集成的Intel硬件没有别的方法,我想知道如何使用这些硬件是可以的。

X11协议本身太大且太复杂。它提供的鼠标/键盘/平板电脑输入多路复用对于现代程序来说太过淡了。我认为这是阻止Linux桌面改进的最严重障碍,这就是我寻找替代方案的原因。


问题答案:

更新(2017年9月17日):

NVIDIA最近发表了一篇文章,详细介绍了如何在无头系统上使用OpenGL,该问题与问题描述非常相似。

综上所述:

  • 链接到libOpenGL.solibEGL.so不是libGL.so。(因此,您的链接器选项应为-lOpenGL -lEGL
  • 呼叫eglGetDisplay,然后eglInitialize初始化EGL。
  • 调用eglChooseConfigconfig属性,EGL_SURFACE_TYPE后跟EGL_PBUFFER_BIT
  • 呼叫eglCreatePbufferSurface,然后eglBindApi(EGL_OPENGL_API);,再eglCreateContexteglMakeCurrent

从那时起,像往常一样执行OpenGL渲染,然后可以随心所欲地涂抹像素缓冲区表面。NVIDIA的这篇补充文章包括一个基本示例和多个GPU的示例。根据应用需要,也可以将PBuffer表面替换为窗口表面或像素图表面。

我很遗憾没有在以前的编辑中对此做更多的研究,但是很好。更好的答案就是更好的答案。

自从2010年我的回答以来,Linux图形领域发生了许多重大变化。因此,一个更新的答案:

如今,nouveau和其他DRI驱动程序已经成熟到OpenGL软件稳定并且总体上表现良好的地步。随着Mesa中EGL
API的引入,现在甚至可以在Linux桌面上编写OpenGL和OpenGL ES应用程序。

您可以将应用程序编写为目标EGL,并且可以在没有窗口管理器甚至合成器的情况下运行它。为此,您可以调用eglGetDisplayeglInitialize并最终调用eglCreateContexteglMakeCurrent,而不是通常的glx调用来执行相同的操作。

我不知道在没有显示服务器的情况下工作的具体代码路径,但是EGL接受X11显示器和Wayland显示器,而且我知道EGL可以不使用它而运行。您可以创建GL
ES 1.1,ES 2.0,ES 3.0(如果您具有Mesa 9.1或更高版本)和OpenGL 3.1(Mesa
9.0或更高版本)上下文。Mesa尚未(截至2013年9月)尚未实现OpenGL 3.2 Core。

值得注意的是,在Raspberry Pi和Android上,默认情况下支持EGL和GL ES 2.0(Android
<3.0上为1.1)。在Raspberry
Pi上,我认为Wayland仍无法正常工作(截至2013年9月),但是在不使用包含的二进制驱动程序的显示服务器的情况下,您确实可以获得EGL。如果您感兴趣的话,您的EGL代码也应该可以移植到iOS(经过最小的修改)。

以下是过时的,以前接受的帖子:

我想在Linux中打开不带X的OpenGL上下文。有什么办法吗?

我相信Mesa提供了一个帧缓冲目标。如果它完全提供了任何硬件加速,那么它将仅与那些具有适用于这种用途的开源驱动程序的硬件一起使用。

Gallium3D也不成熟,据我所知,甚至对此路线的支持都还没有。

我想获得一种适用于nvidia卡的解决方案。

没有一个。期。

NVIDIA仅提供X驱动程序,而Nouveau项目仍不成熟,并且不支持您正在寻找的使用类型,因为它们目前仅专注于X11驱动程序。



 类似资料:
  • X.Org 是 X Window System 的开源实现版本,它支持Linux、Solaris、以及BSD 平台。

  • XOrg基金会的X11开源实现 (XOrg Foundation Open Source Public Implementation of X11) (the XOrg Server) 是X Window System的官方参考实现。当前的发布版本是X11R7.2,发布于2007年2月15日。它是开放源代码的自由软件。 这个项目由X.Org基金会运作,存放于freedesktop.org的主机上。

  • X.Org 是 X Window 的开源实现。如果我们要在 Archlinux 中运行图形化的程序,那么 X.Org 是必不可少的。执行命令: pacman -S xorg 该指令将为你安装 X.Org 所必需的包,包括 X.Org 服务器、工具、字体、键盘驱动、鼠标驱动、显卡驱动等等 需要注意的是,默认的 X.Org 安装可能并没有包含你的显卡驱动程序。因此,你需要单独为你的显卡安装驱动。你

  • 问题内容: 我目前工作的一个项目,我需要跟踪的几个系统调用和类似的低层次功能的使用,,。到目前为止,我一直在使用函数插入进行此操作:我编写了一个与要替换的函数同名的包装函数(例如,),并通过设置环境变量将其加载到程序中。我通过加载的指针调用实函数。 不幸的是,我要包装的函数之一由内部使用,因此当我尝试加载符号时程序崩溃。在Linux中不是系统调用,因此我不能简单地使用它来间接调用它。 所以我的问题

  • 1. 2.ffmpeg是从http://johnvansickle.com/ffmpeg/ 3.我下载了,解压缩此文件,然后运行:然后安装了。我使用: 检查它没有问题。 我在我的系统中运行这些命令没有问题: 但是当我在java中调用这个命令时,会发生错误,为什么 错误: 结果1: 结果2:ffmpeg 3.1版。1-静态http://johnvansickle.com/ffmpeg/版权所有(c)

  • 在尝试打开EclipseOxygen时,在Red Hat Linux env 64位中出现以下错误。在linux环境中也安装了jdk 8。 JVM终止。退出代码=1 /usr/java/jdk1.7.0_67-cloudera/bin/java -Dosgi.requiredJavaVersion=1.8 -多斯基。例子地区默认值=@user。主/eclipse工作区 -XX:UseG1GC -X