Xephyr 的 XVideo 與 OpenGL 支援
準備下個月的演講 [
許我們一個 Keroro 的桌面] 時,大量用到的兩個 toolkit 分別是 [
cairo] 與 [
clutter],背後都與 OpenGL 有關,為了不影響開發環境,通常我們會透過 Xnest 或 Xephyr 一類的 nested X server 來建立虛擬的 X Display/Screen。考量到新的 X extension 支援,Xephyr 無疑是最好的選擇,而且 [
Dodji Seketeli] 最近也實做了 XVideo 與 OpenGL 的支援。
這些修改已經整合到 git repository 中,以下是建構的方式,筆者的平台是 Pentium4 + Ubuntu hardy (8.04),需要先安裝好必要的套件:
$ sudo apt-get build-dep xserver-xephyr
$ sudo apt-get install libpciaccess-dev libxv-dev
接著,就取得程式碼並編譯:
$ mkdir -p /tmp/xephyr-hacks
$ cd /tmp/xephyr-hacks/
$ git clone git://anongit.freedesktop.org/git/mesa/mesa mesa.git
$ cd mesa.git
$ autoreconf -fis
$ CFLAGS="-Os -mcpu=pentium4 -mtune=pentium4" \
sh configure \
--prefix=/tmp/xephyr-hacks \
--with-driver=xlib \
--disable-shared \
--enable-static \
--with-demos=samples
$ make
$ cd ..
$ git clone git://anongit.freedesktop.org/git/xorg/xserver xserver.git
$ cd xserver.git
$ wget http://jserv.sayya.org/freedesktop/optional-xkb.patch
$ patch -p1 < optional-xkb.patch
$ autoreconf -fis
$ CFLAGS="-Os -mcpu=pentium4 -mtune=pentium4 -g" \
sh configure \
--prefix=/tmp/xephyr-hacks \
--enable-debug \
--enable-kdrive \
--enable-xephyr \
--disable-xorg \
--disable-xnest \
--disable-xvfb \
--disable-dmx \
--disable-xorgcfg \
--disable-xcalibrate \
--disable-xsdl \
--disable-xfake \
--disable-xfbdev \
--disable-kdrive-vesa \
--enable-dri \
--with-dri-driver-path=/usr/lib/dri \
--enable-glx \
--with-mesa-source=/tmp/xephyr-hacks/mesa.git \
--disable-xprint \
--enable-builtin-fonts \
--disable-tslib \
--disable-config-hal \
--disable-xinerama \
--disable-xace \
--disable-mfb \
--disable-cfb \
--disable-afb \
--disable-xf86bigfont \
--disable-dpms \
--disable-xdmcp \
--disable-xkb \
--disable-xevie \
--with-fontdir=/usr/share/fonts/X11
$ make
過程中,施加筆者的 patch 以避開沒必要的 Xkb,編譯完成後,應該會得到 hw/kdrive/ephyr/Xephyr 這個執行檔,執行方式如下:(在 X11 環境下,一般使用者權限)
$ hw/kdrive/ephyr/Xephyr -host-cursor -ac :2
這時候在另一個終端機跑以下指令: (bash 為例)
$ export DISPLAY=:2
$ metacity &
$ glxgears
當然,"metacity" 可換成任何典型的 window manager。此時,應該會見到類似以下的畫面:

我們可以看到 Xephyr 視窗 (X client),並且運作在 Xephyr 裡頭 (X server) 的 X clients,也就是 glxgears 與 metacity。實際上,在 Xephyr 裡面的 GL 程式是透過 DRI 轉交給原始的 GLX 作為輸出。
由 jserv 發表於 March 3, 2008 02:24 PM