DirectFBメモなど

SqueakのDirectFB版ディスプレイドライバのバグが取れたので、DirectFBのメモをとっておく。

DirectFB

DirectFBはframebufferを使ったグラフィックスライブラリで、X WindowのXLibに相当するようなものらしい。特徴として次のようなものがある。

  • 極力ハードウェアアクセラレータを使う
  • (X Windowのような)ネットワークを介さないので、軽い
  • グラフィックスライブラリではあるが、一般的な図形描画はあまり得意ではない。
  • サポートするグラフィックスチップはそれほど多くない(http://www.directfb.org/index.php?path=Main%2FSupport%2FGraphicsを参照)
  • ハードウェアアクセラレータが使えない場合でもMMXなどを使ったソフトウェアアクセラレータが動く
  • ハードウェアアクセラレータが使える場合framebufferは初期化や情報取得だけで、描画はハードウェアを使う
  • X Windowに比べメモリ使用量/フットプリントが小さい

backendとしてSDL,Gtk+,VNC,X11があるらしい。

上記の理由から主に組込み向けとWindowなどで透過モードが扱えるので一部マニアにも受けているかも。でどうしてこのDirectFBでSqueakと思ったのはマイPCではX Windowがすごく重かったのでDirectFBを使えばいいと思ったのだが、VIAチップは癖があってハードウェアアクセラレーションがうまく動かず、マッタリとなるんで、最近はあまりいじってないです。ただもう少し描画が速ければ、重いX WindowよりDirectFBで動かしていることでしょう。

Squeakディスプレイドライバ

XLibがわかる人はplatforms/unix/vm-display-X11/sqUnixX11.cが参考になる。テンプレートとしてvm-display-customがあるのでそれも参考になる。基本的にはイベントのSqueakイベントへの変換と描画部分(display_ioShowDisplay関数)がキモですね。DirectFBのイベントはまだよくわかっていなかったりする。ちなみにDirectFB版ディスプレイドライバはSqueak3.3時代には作られて公開されていますが、現状のSqueakやDirectFBのバージョンと大きく違うのでそのまま動かない可能性があります。わたしの場合、DirectFBの勉強を兼ねて、ほとんどScratchからソースを書きました。

現状はDirectFB-1.0.0-rc2, Squeak-3.9-8で動作確認

  • 色深度は32bitモードのみサポート
  • マウス、キーボードはちゃんと使える。ただしマウスホイールは未対応
  • マウスカーソルは何気に透過にしていますが、VIAのハードウェアアクセラレータをONにするとおかしくなってしまう
  • DirectFBのSingle Application Coreで動かし、Squeakデスクトップは全画面モードとなる
  • OpenGL未対応
  • 日本語入力不可(もともとDirectFBではIMは考慮されていない)
    • anthy-agentを使ってSqueakで日本語入力しようとしています