FrameBuffer用グラフィック・ライブラリ(MGRX)

インストール


FrameBuffer+Graphicで検索すると必ず「pygame」がヒットします。
pygameは非常に高機能なライブラリですが、グラフィック・ライブラリというよりも、
サウンド再生機能や動画再生機能を持つマルチメディア・ライブラリに近い と思っています。
そこで、今回はFrameBuffer用のグラフィック・ライブラリ MGRX を紹介します。

MGRXライブラリはFrameBufferコンソールで 使える、非 常に高機能なC言語のグラフィックライブラリです。
GRXライブラリをベースにしていますが、GRXが Pascal-API、BGI-API(Borland Graphics Interface)、Turbo Cをサポートしているのに対し
「no Pascal, no BGI, no Turbo C support」と(ある程度)単純化されています。

日本語/英語を問わず、RaspberryPiでの使い方に関するページが皆無なので紹介します。
オリジナルのライブラリ・ソースはこちらか らダウン ロードする事ができます。
インストール手順はこちらに詳しく書 かれていますが、RPiで動かすためには変更する必要が有りました。
結構、あちこちいじったので、こちらか らダウンロードできるようにしておきます。

最初にコンパイルに必要なパッケージをインストールします。
sudo apt-get install libjpeg-dev libpng-dev

install-binでツールがインストールされますが、使い方が分からないツールなので私は省略しました。
git clone https://github.com/nopnop2002/mgrx_rpi
cd $HOME/mgrx_rpi
make -f makefile.lnx libs
sudo make -f makefile.lnx install
sudo make -f makefile.lnx install-bin  → 無くてもいい
make -f makefile.lnx test

$HOME/mgrx_rpi/test の下にデモプログラムが作られます。
demomgrx がメニュープログラムです。
起動前に環境変数の設定が必要です。
最初にfbsetで解像度を求めます。

RPiの場合

fbset -i -fb /dev/fb1

mode "320x240"
    geometry 320 240 320 240 16
    timings 0 0 0 0 0 0 0
    nonstd 1
    rgba 5/11,6/5,5/0,0/0
endmode

OPiの場合

$ fbset -i -fb /dev/fb8

mode "320x240"
    geometry 320 240 320 240 16
    timings 0 0 0 0 0 0 0
    nonstd 1
    rgba 5/11,6/5,5/0,0/0
endmode

Frame buffer device information:
    Name        : flexfb
    Address     : 0
    Size        : 153600
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 0
    YPanStep    : 0
    YWrapStep   : 0
    LineLength  : 640
    Accelerator : No

環境変数で使用するグラフィック環境(ドライバー、解像度、色数)を指定します。
例えば、解像度=320x240 色数=16Bit(64K)のFrameBufferを使う場合は以下の様に指定します。

RPiの場合

export MGRXDRV="linuxfb gw 320 gh 240 nc 64k"
export FRAMEBUFFER=/dev/fb1
cd $HOME/mgrx_rpi/test
./demomgrx

OPiの場合

export MGRXDRV="linuxfb gw 320 gh 240 nc 64k"
export FRAMEBUFFER=/dev/fb8
cd $HOME/mgrx_rpi/test
./demomgrx

このようなメニュー画面が表示されます。
このプログラム(demomgrx)はランチャープログラムで、メニューに応じて各プロセスを起動しています。
このプログラムだけは、オリジナルからかなり変更しました。
矢印キーで項目を移動し、Enterでデモを始めます。
各デモはESCキーで終わったり、F10で終わったり、Spaceキーで終わったりします。(デモ毎に異なります)
メニューの終了はESCキーです。


各デモプログラムはオリジナルから改変していません。
解像度の関係で正しく表示されているのかどうか分からないものもありますが、あえてそのままにしています。

デモプログラムの中でいくつか面白そうなものを紹介します。
なお、画面キャプチャーは以下のツールを使っています。
Linux framebuffer 用画面保存プログラム
なお、各デモプログラムはコマンドラインで直接起動することもできます。

bb1test
u/d/l/rキーでXマークが移動して通路を作ります。



bigtest
色使いが綺麗です。



curstest
u/d/l/rキーでカーソルマークが移動し、それに併せて画像がアニメーションします。



fonttest
フォントサイズを切り替えて表示します。



imgtest
スペースキーでイメージが切り替わります。



jpgtest
jpegファイルを表示します。スペースキーで表示サイズが替わります。



pngtest
pngファイルを透かし入りで表示します。



sbctest
スペースキーでイメージの輪郭、塗りつぶしが替わります。









textpatt
背景と文字を重ねて表示します。




無茶苦茶、高機能なので、全ての機能を紹介することはできませんが、キー入力もできるので
すごい画面が作れそうです。
ドキュメントも整備されていま す。

次回はテキスト表示機能の一部を紹介します。