在AWS EC2上运行OpenGL + SDL2

时间:2016-07-01 20:45:40

标签: amazon-web-services opengl amazon-ec2 ubuntu-14.04 sdl-2

我正在使用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?

提前致谢

2 个答案:

答案 0 :(得分:1)

您有两种选择。

  1. 使用真正的X11服务器。大多数OpenGL实现都不支持Headless OpenGL。这将允许您使用硬件加速。您需要选择具有正确硬件支持的EC2实例。

  2. 使用OSMesa。这将为您提供一个纯软件实现,根本不需要X11或任何其他窗口服务器。

  3. 当硬件加速不可用时,将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

感谢所有的帮助