MGL2(MGL Version 2)とは何か (2000/03/06 版)

MGL Version 2 は、Handheld PC などリソースの少ないマシンで グラフィック対応のアプリケーション動かすためのグラフィックライブラリ および、ウインドウマネージャです。

BSD 系ライクな ライセンスで、ソースを公開しています。

mgl2-alpha-020.tar.gz
fontkit-1.1-nobdf.tar.gz ( MGL 形式のフォントが含まれています)
fontkit-1.1-src.tar.gz ( MGL形式のフォントの オリジナル (BDF))

最新版のスナップショットは ダウンロード のページ を参照してください。

まだ、αバージョンです。API / ABI についての配慮が十分ではないので、 このソースコードを元にしたバイナリを配布する際は注意してください。
なお、X を借りて生成した FONT ファイルは、そのままでは配布できません。 この点もご注意を。

初代モバイルギアで動く UNIX( PocketBSD , PocketLinux ) と Window CE マシンのアーキティクチャ上で動く UNIX ( NetBSD/hpcmips ) さらに NetBSD/mac68k をターゲットにして開発中です。

メインターゲットは上記のものですが、同一アプリケーションを X11 で動かしたり、PC UNIX のコンソール上でも動かすことができます。

AnonCVS

次の方法で、CVS リポジトリにアクセスできます。


cvs -d :pserver:anoncvs@jp.netbsd.org:/cvs/jproot login

CVS passwrod: anoncvs

cvs -d :pserver:anoncvs@jp.netbsd.org:/cvs/jproot co othersrc/mgl/mgl2

CVS Web

MGL2 の最新ソース (と 変更履歴)を Web で見ることができます。

http://cvsweb.netbsd.org

News

特徴

  1. 小さな実行環境
    ちいさなマシン(といっても 32bit の UNIX ですが)をターゲット にして開発しているので、メモリリソースをあまり使わない設計に なっています。
    例: i386 (linux) での プログラムサイズ
    
            libmgl2.so.2.0    72388 bytes (MGL2 ライブラリ)
            mgterm            22472 bytes (端末ソフト) 
            mil               14028 bytes (イメージ viewer)
            mglsvrx           18748 bytes (ウインドウサーバ)
            k12x12.fnt       196640 bytes (必須フォントファイル)
    	k16x16.fnt	 262176 bytes (推奨フォントファイル)
    	k24x24.fnt	 592928 bytes (推奨フォントファイル)
    
  2. コンパクトなAPI
    現在の Window システムは、巨大な API を持っています。 そのため、なんでもできるかわりに、リソースを大量に消費しています。 これでは、コンパクトなアプリケーションを作っても ちいさなマシンでは十分に動きません。

    MGL が目指すものは、CUI(curses等) と GUI(WindowSystem API等)の 中間に位置するものです。

    ( 詳しくは、 "MGL APIの紹介 その1" を参照してください)

  3. HSB 系色体系
    MGL アプリケーションでは、物理的なRGB値でプログラミングする必要が ありません。より抽象度が高い HSB (色彩明) を使って統一的に色を 扱います。この仕組みにより、4 グレースケールしか扱えないマシンと 8bpp(256 色) , 16bpp(32000 色)をあつかえるマシンに対して 同じプログラミングができます。

    これが、MGL で扱える全色。12 色 に対して、16レベルの彩度 x 16レベルの 明度が扱えます。 左は、フルカラードライバでの表示。
    右は、8bpp ドライバでの表示 --- ディザをかけて 76色まで減色しています。
    ちなみに、これを表示させるアプリケーションのバイナリは同一で、 8bpp をほとんど意識していません。

    これは、ディザ表示の拡大図。左は、8bpp のドライバで描画し、76色減色したもの、 右は、2bpp のドライバで描画し、4レベルグレースケールまで減色したもの。
    両者をみれば分かると思いますが、 右になるほど、明度が高くなる (= あかるい)、 下になるほど、彩度が高くなる (= あざやか) ように表示しています。

    サポートしている色空間が多くないのが難点です。 十分ではないにせよ、それなりの表示は可能なようです。

    これは、mil を使った画像表示のサンプル。左から、MGL のfull color(1456 色) 8bpp 版 (76色)、2bpp 版 (4 色)
    クロード・モネ <船遊び> 国立西洋美術館 所蔵 ( オリジナル画像はこちら )
    ※ "引用" に相当するんで OK だと思って載せています。 もし不備があったらお知らせください。
  4. 多様なスクリーンイメージフォーマット
    MGL では、標準で 3種類のイメージフォーマットをサポートしています。 これに加えて、マシンのフレームバッファに合わせたイメージフォーマット もサポートできます。アプリケーションは、これらの区別を意識しない ようにも作成できます。

    詳しくは、 "MGL APIの紹介 その2" を参照してください。

  5. さまざまな動作環境
    MGL 対応のアプリケーションは、X の上でも動作します。 また、PC のコンソール上でも動作します。

    アプリケーション単独で動作させることができますが、 独自のウインドウシステム上でも動作させることができます。 このウインドウシステムは、単なる MGL アプリケーションなので、 X の上でもPC のコンソール上でも動作します。


    これは、ウインドウシステムの画面ダンプ 左側でに端末ソフトが動作しています。 右側では別のアプリケーション(カレンダー)が動いています。 右下はタスクバー。
    単純な、タイリングタイプのウインドウシステムですが、 画面が小さいマシンに最適化しています。

    これは、240x320 の表示例: キー1つで、瞬時に画面切替えができます。
    ちなみに右端は、このファイルを編集している画面。 つぎに MGL 対応 麻雀ゲーム(netmaj)、 左端は、POBox 対応のソフトキーボードのラフデザイン --- ソフトキーボードをどのように組み込むかはこれから設計しますが、 こんな感じで使えたらいいなぁと思っています。

  6. 開発環境
    MGL のアプリケーションは、X を使った環境でデバックできます。 MGL 自体の移植についてもさまざまな配慮がなされています。

    キーボード/マウスなど、イベント処理部は標準的なものはすでに 用意されており、画面ドライバ(ドローエンジン) を用意するだけで、 最適なシステムを構築できます。

    これは、MGL の概念図、 キーボードやマウスを扱うイベントマネージャと 描画エンジンが論理的に分かれています。すでに対応済の OS のマシンに 移植するには、描画エンジンを作るだけで済みます。

    画面ドライバ(ドローエンジン) は、小さな機能セットを用意するだけで 最低限の動作が確認できます。さらにチューニングは X 使った環境で 行えます。また共通ドライバを使えば、もっと簡単に移植できます。

    これは、もう1つの仕組みの概念図。X対応もこのやりかたです。 既存の 描画エンジンを使って、疑似的に画面を作ります。 イベントマネージャが、update のタイミングで更新された領域を 実際の画面に反映させます。 描画した領域を、イベントマネージャに知らせる方法もフックによって 一般化されており、描画エンジンは描画だけに専念できます。

これらの特徴の裏には、実は 2つの目的があります。

1つは、抽象度の高い仮想ハードウェアを提供しようというもの。 これは、MGL version 2 からあらたに加わった目的です。

もう1つは、 CUI 的な発想の API を実現したい ということ。大昔の BASIC とか そういったレベルの API は、Window API に淘汰されてしまい、 このレベルの汎用インターフェイスが存在しないように思います。

MGL の API は、イベントはキーコードとして拾い、 printf するかわりに グラフィック上に描画するだけ。 素朴ですが、それで十分なものもたくさんあるはずだと考えました。

なお、MGL2 の 仮想ハードウェアとしての機能セット/API セットを設計する にあたり、設計と同時に付属アプリケーションも設計しています。 そのため、わりといいバランスになっていると信じています。

どんな人のためのものか

  1. 遅くてリソースが少ないハードウェアを使っている人 --- X は重い/遅い ので使いたくないが、代替できるものが ないという人。PDA もその範疇にいれています。
  2. 日曜プログラマ --- XXX をインストールする、サンプルプログラムを コンパイルしてみる --- そこで終っていませんか? MGL なら、やってみたいことから始められます。
  3. 特定の API に依存したものを作りたくない人 --- MGL では、ハードウェアの抽象化を目指しています。 この枠の中でアプリケーション/ライブラリを作れば、 他のアーキティクチャに移すのは簡単です。 もし、MGL という API の依存してしまったら ... オープンソースですし、MGLごと移植するという手も 残っています。

ウインドウシステムの概要

ウインドウマネージャ自体は、単なる MGL 対応のアプリケーションです。 MGL では、画面を共有する仕組みを提供して、画面に対する描画はそれぞれが 独立に行えます。

サーバは、イベントの配信と、画面の割り当てが主な仕事です。 クライアント側では、キーボード/マウスからイベントを受け取るかわりに サーバからイベントをもらいます。

このような仕組みなので、サーバも非常にコンパクトになっています。

ちなみに前述の疑似画面を使ったタイプはどうなるか ---- 疑似画面をサーバ/クライアントで共有します。

サーバ/クライアントのプロトコルを決めるにあたって、 アプリケーションタイプというものを導入しました。 アプリケーションには、

           メインウインドウで動かす 通常アプリ
           サブウインドウで動かす   ミニアプリ
の区別があります。 通常アプリ と ミニアプリは、プログラムとしては本質的な違いは ありませんが、メインウインドウ(左側の大きな領域) と サブウインドウ(右側の小さな領域) の使い方を規定した方が、 使いやすいシステムになると思われたので、区別できるようにしているわけです。

ルールはそれだけですから、後はサーバが自由に配置を決めてかまいません。

MGL のサーバは、こんな画面もサポートしています。 これは 640x480 で 2 つのメイン画面をもつタイプ。 ミニアプリも2つ同時に表示できます。

対応アプリケーション

X や Windows のように数多くのアプリケーションがあるわけでは ありませんが、たくさんの対応アプリケーションが生まれています。

付属アプリケーション

           mgterm   --- 端末エミュレータ
           mil      --- 画像 viewer
           mgnetmaj --- マージャンソフト

その他 MGL (Version 1)対応アプリケーション
PocketBSD ホームホームページ のリンクからたどれるものを載せています。順不同です。 なお、リストの記載もれ/リストにいれたくないものがありましたら、 ご連絡ください。

        
        ふるかわさん:
           タスク --- 高機能スケジューラ
           MNW    --- ツールキット
           読書   --- 漢字 縦書き表示
           びっシェル ローンチャ(ラウンチャー ?)
           地図   --- 地図 viewer
           辞書   --- 辞書検索
        林さん:
           mgload (xload like ミニアプリ)
           mgosview (xosview like ミニアプリ)
           mgtaskview (タスク の予定をミニアプリとして表示)
           mgvncviewer VNC クライアント
        高橋さん:
           四川省 
           mkobo (xkobo MGL 対応版)
           mgedic  辞書検索
           scmmgl  scm で MGL を使えるようにしたもの
        有野さん:
            imskk -- MGL インプットメソッドの skk 版
            住所録 
        佐野さん:
           cls  Comic List Viewer
        A. 中村さん:
           RubyMgl ruby で mgl を使えるようにしたもの
        ぞろよしさん:
           12x10 ドットフォントを提供して頂きました。
        恵梨沙フォント:
           8x8 のフォントもコンバートの許諾頂きました。

歴史


    MGL は、モバイルギアグラフィックライブラリの略。

    もともとは、初代モバイルギアで動くUNIX --- PocketBSD ---で
    使えることだけを考えた簡単なAPIのグラフィックライブラリでした。

    初版の特徴は、
        GUI ではなく、CUI ベースのコンソールアプリを
        グラフィック対応にできようなAPIセット。

        小さなコードで、ライブラリの中身を把握できる。

        このレベルのAPIでもアプリケーションが書けることを検証するために、
        サンプルアプリとして、端末ソフト mgterm や麻雀ゲームである
        mgnetmaj が付属。

    というものでした。

    PocketBSD だけをターゲットとしたおもちゃだったわけですが、
        X で動作を検証できる X エミュレータ
    や
        Pocket Linux への移植
    をはじめとして、
        モバイルギアのDOS への移植 
    や、
        NetBSD/mac68k への移植
    までプラットフォームを広げ、
    たくさんの MGL 対応アプリケーションも 生まれました。


オリジナル コピー リンク ダウンロード