运行 AWS EC2 上的 OpenGL + SDL2
Running OpenGL + SDL2 on AWS EC2
我正在使用 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 "" 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)
[=11=] stop
[=11=] 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)
我实际上这样做是因为我遵循 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:
所以,我想基本上我的问题是:如何在 headless Ubuntu 14.04 中设置 OpenGL(最好是版本 3)+ SDL2?
提前致谢
你有两个选择。
使用真正的 X11 服务器。大多数 OpenGL 实现不支持 Headless OpenGL。这将允许您使用硬件加速。您需要选择具有正确硬件支持的 EC2 实例。
使用 OSMesa。这将为您提供一个完全不需要 X11 或任何其他 window 服务器的纯软件实现。
在硬件加速不可用的情况下,Gallium + llvmpipe 作为实现是正常的/期望的。这可以。如果您需要更新版本的 OpenGL,则需要安装更新版本的 Mesa。 Mesa 10.1.3 此时已有两年多的历史(从 2014 年 5 月开始)。获取更新版本的 Mesa 意味着使用备用存储库、安装不同版本的 Ubuntu,或者自己编译 Mesa。
如果您自己编译 Mesa,您可以为 OSMesa ("off-screen Mesa") 配置它,这意味着它将不依赖于 X11。有关详细信息,请参阅 Off-screen Rendering。
所以,我需要把它放到 ~/.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 不再工作(每个 google 搜索似乎都建议使用它)因为它不再支持 ubuntu 14.04。我尝试自己编译 mesa,但编译依赖项非常耗时且麻烦。最后,经过数小时的搜索,我找到了 https://wiki.ubuntu.com/Kernel/LTSEnablementStack 并从 link 复制粘贴以下命令:
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
我更新了我的台面,现在可以 运行 AWS EC2 上的 OpenGL + SDL2 无头
感谢大家的帮助
我正在使用 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 "" 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)
[=11=] stop
[=11=] 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)
我实际上这样做是因为我遵循 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:
所以,我想基本上我的问题是:如何在 headless Ubuntu 14.04 中设置 OpenGL(最好是版本 3)+ SDL2?
提前致谢
你有两个选择。
使用真正的 X11 服务器。大多数 OpenGL 实现不支持 Headless OpenGL。这将允许您使用硬件加速。您需要选择具有正确硬件支持的 EC2 实例。
使用 OSMesa。这将为您提供一个完全不需要 X11 或任何其他 window 服务器的纯软件实现。
在硬件加速不可用的情况下,Gallium + llvmpipe 作为实现是正常的/期望的。这可以。如果您需要更新版本的 OpenGL,则需要安装更新版本的 Mesa。 Mesa 10.1.3 此时已有两年多的历史(从 2014 年 5 月开始)。获取更新版本的 Mesa 意味着使用备用存储库、安装不同版本的 Ubuntu,或者自己编译 Mesa。
如果您自己编译 Mesa,您可以为 OSMesa ("off-screen Mesa") 配置它,这意味着它将不依赖于 X11。有关详细信息,请参阅 Off-screen Rendering。
所以,我需要把它放到 ~/.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 不再工作(每个 google 搜索似乎都建议使用它)因为它不再支持 ubuntu 14.04。我尝试自己编译 mesa,但编译依赖项非常耗时且麻烦。最后,经过数小时的搜索,我找到了 https://wiki.ubuntu.com/Kernel/LTSEnablementStack 并从 link 复制粘贴以下命令:
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
我更新了我的台面,现在可以 运行 AWS EC2 上的 OpenGL + SDL2 无头
感谢大家的帮助