CygwinでOpenVGする


廻る仔ライオン。
OpenVGはベクタグラフィックスAPIで、名前から想像される通りKhronosグループによるオープンスタンダードとなっている。最近では実装もかなり普及しているが、PC向けのサポートが弱いのが難しいところ。
PC向けのOpenVGで今のところもっとも有力な実装はMesaの実装で、これはCygwin/Xでもかなり動く。

Cygserverのインストール

OpenVGにはEGLが必要で、EGLにはMIT-SHMが必要なので先ずはcygserverをインストールしてshared memoryを使えるようにする必要がある。
cygserverのインストールは、管理者権限でCygwin端末を起動し、"cygserver-config"するだけ。
cygserverが無い場合は、

EGL_VERSION = 1.4 (Gallium)
Bad System Call

のように文句が出て起動しない。
Cygwin1.7以降ではserverの有無は自動的に判別されるようになり、環境変数CYGWINの(no)serverパラメタは廃止された。あとはcygserverを起動し、startxwinなりなんなりの方法でXWinを起動すればMIT-SHMが使用できる。

Mesa demoのビルド

OpenVGを使ったサンプルプログラムで一番手軽なのはmesaのdemoなので、これをビルドする。demoはCMakeやautoconfでビルドできる。
必要な-develをインストールした後、例えば:

git clone git://anongit.freedesktop.org/git/mesa/demos
cd demos
cmake -DCMAKE_INSTALL_PREFIX=/opt/mesa-demos -DCMAKE_BUILD_TYPE=RelWithDebInfo .
make
make install

egl/openvgにサンプルが含まれる。spサンプルはモロにサウス・パークのカートマンだけど著作権的にオッケーなんだろうか。。

ネイティブWindows...

Cygwinではそれなりに良好に動くOpenVGだが、Windowsネイティブでは大分選択肢が無い。IMGによるエミュレータも有るが、MonkVGには一応WGL移植がある。

MonkVGはゲーム利用を想定した部分的な実装で、特にiOS向けにはそれなりに動作実績もある。nmosh向けに、GoogleのGLES2実装であるANGLEと組み合わせて使えないかと思案中。
そういえば、MesaもGLES実装を提供しているが、これはCygwinではいまのところ提供されていない(Cygwin/X上のGLXは1.4止まり)。不正なテクニックを駆使して動かすこともできるが、あまりお勧めできない。