[b-free 204] Re: GUI architecture

Naitoh Ryuichi (naitoh_r@soft.hitachi.co.jp)
Fri, 7 Feb 97 14:48:07 +0900

隆一です。

AKIYOSHI,Masamichi writes:
> はじめまして。
> いつも読みっぱなしの秋吉と申します。(すみません)
> こんな意見でも参考になればと思ってメールを書きました。
> どうぞよろしくお願いします。

秋吉さん、こんにちは。
これからもよろしくお願いします。

>
> プログラミングハンドブックを読む限りでの私の理解ですが,
> BTRON1 での表示まわりの構造は次のような感じではないかと思います。
> いくつかの API は BTRON1 の仕様書に規定されている通りです。
>
> +-------------------------------+
> | アプリケーション |
> +======================+ | ←ウインドウマネージャ仕様書
> | ウインドウマネージャ | |
> +======================+========+ ←ディスプレイプリミティブ仕様書
> | ディスプレイプリミティブ |
> +-------------------------------+ ←(規定がない or 公開されていない)
> | ドライバ |
> +-------------------------------+ ←(デバイスごとに異なる部分)
> | ディスプレイデバイス |
> +-------------------------------+
>
> > ということなのですが、性能は(極端でなければ)二の次として造り易さ、堅牢性
> >、保守性の有利なほうを採用したいと思います(どっちが得かよくわからない)。
> > 最初のバージョンはVGAかSVGA(800×600)をCPUで描画することになるで
> >しょうが、ディスプレイカードにやらせるとしたらディスプレイドライバとのインタ
> >ーフェースはどのようにしたらよいでしょうか。
> > みなさんのお考えを聞かせてください。よろしくおねがいします。
>
> 上の図で,ディスプレイプリミティブとドライバの間のインターフェースは,
> BTRON 仕様書にないのですが,本当に存在しなかったり,公開されることがない
> とすれば,この部分のインターフェース規定を B-Free で作成し,ドライバの交
> 換だけで多種のデバイスに対応できるようにするのが,拡張性はもちろん,保守
> 性も向上すると思います。

ディスプレイプリミティブとドライバの間のインターフェースがないのは、
BTRON1 の実装として、ディスプレイプリミティブとドライバを分けたインプ
リメントを必須としていないからかもしれませんね(この辺は想像です)。

> > BTRON1でいうところの、ウィンドウマネージャとパネルマネージャは統合し
> >たいと考えています( ディスプレイプリミティブとフォントマネージャもウィンド
> >ウ・パネルマネージャと合体統合しても良いでしょう)。
>
> ウインドウマネージャとパネルマネージャは統合というより,パネルマネージャ
> がウインドウマネージャの上に来るという形になるのではないかと思います。
> 言い方がキツいかもしれませんが,安易に統合すると保守性が下がりますから注
> 意が必要だと思いますよ。
>
> 中でも特に,フォントマネージャは結構複雑な動きをすることになると思うので,
> ディスプレイプリミティブとは分けておいた方がいいのではないかと思います。

X Window system だとぜーんぶ統合化しちゃってますね :-)

フォントマネージャを統合化するかはさておき、ディスプレイプリミティブは
ウィンドウマネージャと統合化してしまってもいいと思います。
ディスプレイプリミティブを使って図形を描画するとき、クリッピングなどの
ためにディスプレイプリミティブはウィンドウの情報を必要とすると思われる
からです。

> 参考までに,X での構造は次のような感じではないでしょうか。
> ウインドウマネージャや Xlib の機能が BTRON1 と一対一に対応しないので,
> 簡単には比較できないとは思いますが。
>
> +---------------+---------------+
> | ウインドウ | ユーザー |
> | マネージャ | プログラム |
> +===============+===============+
> | Xlib |
> +-------------------------------+
> [トランスポート]
> +-------------------------------+
> | Xサーバ |
> +-------------------------------+
> | ドライバ |
> +-------------------------------+
> | ディスプレイデバイス |
> +-------------------------------+

X window system の実装というかサンプルサーバだと、ハードウェア依存部分
も X サーバの中に組み込まれているようです。
もうちょっと詳しく書くと、X のサンプルサーバは 3 つに分かれていて、

DIX (Device Independent) layer ハードウェア、OS に依存しない部分
DDX (Device Dependent) layer ハードウェアに依存する部分
OS layer OS に依存する部分

秋吉さんが書いているドライバというのはこの DDX に対応しているわけです。
ちなみに、X6.1 に入っていた XFree86 の場合だと VGA 対応の DDX 部分は
大体 1 万行強ありました。

OS によっても DDX の実装は異なってくると思いますが、Linux や FreeBSD
の場合だと、DDX が直接グラフィックアダプタにアクセスしているようです。
# だから、XFree86 の場合グラフィックアダプタ毎に X サーバがあります。
# (一部複数のアダプタに対応している X サーバもあるけど。。。)

まぁ、この辺を汚ないと感じるか人もいるかもしれませんが、
OS に手を入れなくても X サーバを換えるだけで最新のグラフィックアダプタ
に対応できるので お手軽に使えていいかもしれません。

# Windows だとドライバとしてアダプタ固有の部分を分けている
# みたいですね。

-- 
p----------------------------------------------------------------------q
| FROM R.Night                                                         |
| E-mail: naitoh_r@soft.hitachi.co.jp                                  |
|         night@b-free.orient.co.jp                                    |
b----------------------------------------------------------------------d