March 03, 2008

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
迴響
發表迴響









記住我的資訊?