强制现有的OpenGL应用程序在无头机器上渲染离屏

我想创build一个video游戏自动渲染testing框架。

我想testing通常用OpenGL渲染到窗口的应用程序。 相反,我想要它渲染成图像文件进行进一步评估。 我想在没有GPU的Linux服务器上执行此操作。

我怎样才能做到这一点,对评估的应用程序影响最小?

一些清晰的说法:

  • OpenGL版本是2.1,所以使用Mesa软件渲染应该是可能的。
  • 我最好不要更改任何应用程序代码。 如果有一个解决scheme允许我模拟一个X服务器或类似的东西,我更喜欢它。
  • 我不想改变任何渲染代码。 如果真的有必要的话,我可以改变我初始化OpenGL的方式,但之后我想执行任意的OpenGL代码。

理想情况下,您的答案将解释如何在无头Linux服务器上设置环境,使我可以启动任意OpenGL二进制文件并将其输出呈现为图像。 如果这是不可能的,我愿意提供任何build议。

为您的X服务器使用Xvfb 。 部署在任何现代Linux发行版上的Mesa的安装,如果没有找到支持的GPU,应该自动回到软件光栅化。 您可以使用任何X11屏幕抓取程序截图; 甚至ffmpeg -i x11grab将工作。

fbdev / miniglx可能是你正在寻找的东西。 http://www.mesa3d.org/fbdev-dri.html我没有使用它,所以我不知道它是否适用于您的目的。

另一种方法是在没有任何桌面环境的xinit下启动xserver。 该设置使用经过良好测试的代码路径,使其更适合运行测试。 miniglx可能有没有人注意到,因为它不是每天都使用的错误。

要捕捉渲染输出到图像可以完成与LD_PRELOAD技巧来包装glXSwapBuffers。 基本的想法是在应用程序和gl库之间添加自己的swapbuffers函数,您可以使用glReadPixels下载渲染帧,然后使用自己喜欢的图像库将该数据写入图像/视频文件。 在glReadPixels完成之后,您可以调用库glXSwapBuffers,使交换发生,就像在真实桌面中发生的一样。

prog子目录已经从主git仓库中删除,你可以从git://anongit.freedesktop.org/git/mesa/demos找到它。