强制现有OpenGL应用程序在无头机器上进行屏幕外渲染



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

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

如何在对评估的应用程序影响最小的情况下做到这一点?

澄清起见:

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

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

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

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

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

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

prog子目录已从git主存储库中删除,您可以在git://anongit.freedesktop.org/git/mesa/demos相反

相关内容

  • 没有找到相关文章