我想为视频游戏创建一个自动渲染测试框架。
我想测试一个通常渲染到OpenGL窗口的应用程序。相反,我希望它渲染到图像文件中以供进一步评估。我想在没有GPU的Linux服务器上执行此操作。
如何在对评估的应用程序产生最小影响的情况下执行此操作?
为清晰起见,有些评论:
理想情况下,您的答案将解释如何在无头Linux服务器上设置环境,允许我启动任意OpenGL二进制文件并将其输出呈现为图像。如果那是不可能的,我愿意接受任何建议。
答案 0 :(得分:2)
对您的X服务器使用Xvfb
。如果没有找到支持的GPU,部署在任何现代Linux发行版上的Mesa的安装应自动回退到软件光栅化。您可以使用任何X11屏幕抓取程序截取屏幕截图;甚至ffmpeg -i x11grab
即可。
答案 1 :(得分: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中找到它。