但适用于linux / X11。
更具体地说,我需要一种方法来捕获在X11 diplay上运行的一个窗口(窗口中alt-print屏幕的程序等效)的像素图像。
注意事项和要求:
1)即使将新窗口放置在正在捕获的窗口之上,像素图像也应始终指向原始应用程序窗口,而不会发生任何遮挡
2)不需要用户看到应用程序窗口,我只需要存储用于视频目的的像素缓冲区/图像
我探索过的其他替代方法是:
1)xvfb-它可以工作,但是可以进行CPU渲染,这很慢并且浪费了一个好的GPU
2)许多lxc内的x11-理论上可以工作,但是设置起来很复杂,我不确定在捕获许多窗口的情况下它能否很好地缩放
欢迎提出建议和想法
在具有硬件加速功能的服务器中使用VirtualGL可以做到这一点。基本上,只需适当地配置服务器,然后在同一台计算机上或在同一网络中的计算机上运行
export DISPLAY=<your xvfb display> vglrun <your_app>
这将具有以下优点:
1)您的应用将使用virtualGL进行渲染,而virtualGL将使用硬件
2)VirtualGL将在Xfvb显示屏内显示您的3D上下文,它将仅在CPU中渲染2D小部件
3)配置Xvfb渲染到帧缓冲区
4)利润!