4

我想为视频游戏的自动渲染测试创建一个框架。

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

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

为了清楚起见,一些注释:

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

理想情况下,您的答案将解释如何在无头 Linux 服务器上设置环境,该服务器允许我启动任意 OpenGL 二进制文件并将其输出呈现为图像。如果那不可能,我愿意接受任何建议。

4

2 回答 2

2

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

于 2015-11-18T19:20:33.893 回答
1

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 找到它。

于 2015-11-18T18:43:32.950 回答