2016-07-01 48 views
2

我正在使用AWS EC2 Ubuntu 14.04來測試我的OpenGL + SDL2應用程序。我正在使用SDL 2.0.2版。由於AWS EC2是無頭的,我使用XVFB和使用這個腳本在/etc/init.d/xvfb:我運行應用程序之前在AWS EC2上運行OpenGL + SDL2

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 

但我得到了「無法連接到MIR服務器」錯誤與調用SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER)

其實我這樣做是因爲我遵循https://docs.travis-ci.com/user/gui-and-headless-browsers/指令,並希望做同樣的在我的AWS機。我也試過它與Travis,而且xvfb腳本也是從travis ci設置中提取的。

不知道這是否會有所幫助,但這些是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: 

所以,我想我的主要問題是:如何設置OpenGL的(最好是第3版)+ SDL2在無頭的Ubuntu 14.04?

在此先感謝

回答

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 

而且我得到了我的檯面更新,現在可以在AWS EC2無頭運行的OpenGL + SDL2

謝謝你所有的幫助

1

您有兩種選擇。

  1. 使用真正的X11服務器。大多數OpenGL實現不支持無頭OpenGL。這將允許您使用硬件加速。您將需要選擇一個具有正確硬件支持的EC2實例。

  2. 使用OSMesa。這會給你一個純軟件的實現,它根本不需要X11或任何其他窗口服務器。

當硬件加速不可用時,實現Gallium + llvmpipe作爲實現是正常的/預期的。這可以。如果你需要更新版本的OpenGL,你需要安裝更新版本的Mesa。目前Mesa 10.1.3已經兩年多了(從2014年5月起)。獲得更新版本的Mesa意味着使用替代回購,安裝不同版本的Ubuntu,或自己編譯Mesa。

如果您自己編譯Mesa,則可以將其配置爲OSMesa(「屏幕外Mesa」),這意味着它不會依賴X11。有關更多詳細信息,請參閱Off-screen Rendering

+0

我讀了關於OSMesa的網址。這是否意味着我必須使用OSMesaCreateContext(),OSMesaMakeCurrent()和OSMesaDestroyContext()而不是使用SDL_GL_CreateContext? – bysreg

+0

是的,你根本不會使用SDL。 –