gre*_*ade 31
更新(2017年9月17日):
NVIDIA最近发表了一篇文章,详细介绍了如何在无头系统上使用OpenGL,这是一个与问题描述非常相似的用例.
综上所述:
libOpenGL.so
而libEGL.so
不是libGL.so
.(因此,您的链接器选项应该是-lOpenGL -lEGL
eglGetDisplay
,然后eglInitialize
初始化EGL.eglChooseConfig
使用config属性调用,EGL_SURFACE_TYPE
然后使用EGL_PBUFFER_BIT
.eglCreatePbufferSurface
,然后eglBindApi(EGL_OPENGL_API);
,再eglCreateContext
和eglMakeCurrent
.从那时起,像往常一样进行OpenGL渲染,并且可以在任何地方对像素缓冲区进行blit.NVIDIA的这篇补充文章包括一个基本示例和多个GPU的示例.根据应用需求,PBuffer表面也可以用窗口表面或像素图表面替换.
我很遗憾没有在我之前的编辑中对此进行更多的研究,但是哦.更好的答案是更好的答案.
自从我在2010年的回答以来,Linux图形领域出现了一些重大变革.所以,更新的答案:
今天,nouveau和其他DRI驱动程序已经成熟到OpenGL软件稳定并且总体上表现相当不错的程度.随着在Mesa中引入EGL API,现在甚至可以在Linux桌面上编写OpenGL和OpenGL ES应用程序.
您可以将应用程序编写为目标EGL,并且可以在没有窗口管理器甚至是合成器的情况下运行它.要做到这一点,你会打电话eglGetDisplay
,eglInitialize
并最终eglCreateContext
和eglMakeCurrent
,而不是通常的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驱动程序.
归档时间: |
|
查看次数: |
20934 次 |
最近记录: |