我正在使用AWS EC2 Ubuntu 14.04来测试我的OpenGL + SDL2应用程序。我使用的是SDL 2.0.2版。由于AWS EC2无头,我使用xvfb并在/etc/init.d/xvfb中使用此脚本:
XVFB=/usr/bin/Xvfb
XVFBARGS=":99 -ac -screen 0 1024x768x24"
PIDFILE=/tmp/cucumber_xvfb_99.pid
case "$1" in
start)
echo -n "Starting virtual X frame buffer: Xvfb"
/sbin/start-stop-daemon --start --quiet --pidfile $PIDFILE --make-pidfile --background --exec $XVFB -- $XVFBARGS
echo "."
;;
stop)
echo -n "Stopping virtual X frame buffer: Xvfb"
/sbin/start-stop-daemon --stop --quiet --pidfile $PIDFILE
rm -f $PIDFILE
echo "."
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/xvfb {start|stop|restart}"
exit 1
esac
exit 0
这是运行应用程序之前的linux命令:
export DISPLAY=:99.0
sh -e /etc/init.d/xvfb start
sleep 3
但是我通过调用SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER)得到“无法连接到Mir Server ”错误
我实际上是这样做的,因为我遵循https://docs.travis-ci.com/user/gui-and-headless-browsers/的指示,并希望在我的AWS机器上执行相同的操作。我也尝试使用travis,xvfb脚本也取自travis ci setup。
不确定这是否会有所帮助,但这些是glxinfo的输出grep OpenGL:
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.4, 256 bits)
OpenGL version string: 2.1 Mesa 10.1.3
OpenGL shading language version string: 1.30
OpenGL extensions:
所以,我猜我的问题基本上是:如何在无头Ubuntu 14.04中设置OpenGL(最好是版本3)+ SDL2?
提前致谢
答案 0 :(得分:1)
您有两种选择。
使用真正的X11服务器。大多数OpenGL实现都不支持Headless OpenGL。这将允许您使用硬件加速。您需要选择具有正确硬件支持的EC2实例。
使用OSMesa。这将为您提供一个纯软件实现,根本不需要X11或任何其他窗口服务器。
当硬件加速不可用时,将Gallium + llvmpipe作为实现是正常/预期的。这可以。如果您需要更新版本的OpenGL,则需要安装较新版本的Mesa。 Mesa 10.1.3此时已超过两年(从2014年5月开始)。获取更新版本的Mesa要么意味着使用备用仓库,安装不同版本的Ubuntu,要么自己编译Mesa。
如果您自己编译Mesa,可以为OSMesa配置它("屏幕外Mesa"),这意味着它不依赖于X11。有关详细信息,请参阅Off-screen Rendering。
答案 1 :(得分:0)
所以,事实证明我需要把它放到〜/ .bashrc:
中export DISPLAY=:99.0
sh -e /etc/init.d/xvfb stop
sh -e /etc/init.d/xvfb start
sleep 3
这样每次连接到机器时都会运行上面的脚本。
但是,我得到了一个不同的错误,说SDL_GL_CreateContext失败了。就像@dietrich-app所说,我需要更新我的台面。 oibaf的图形驱动程序ppa不再有效(每次谷歌搜索似乎建议使用它),因为它不再支持ubuntu 14.04。我试图自己编译mesa但是编译依赖项非常耗时且繁琐。最后,经过几个小时的搜索,我找到了这个https://wiki.ubuntu.com/Kernel/LTSEnablementStack并从该链接复制粘贴以下命令:
sudo apt-get install --install-recommends linux-generic-lts-wily xserver-xorg-core-lts-wily xserver-xorg-lts-wily xserver-xorg-video-all-lts-wily xserver-xorg-input-all-lts-wily libwayland-egl1-mesa-lts-wily
我更新了mesa,现在可以在AWS EC2无头上运行OpenGL + SDL2
感谢所有的帮助