[Subject Prev][Subject Next][Thread Prev][Thread Next][Subject Index][Thread Index]

[OSASK 1922] from OSASK BOARD



このメールは、OSASK伝言板に書き込まれた内容です。
この書き込みに返事を書く場合は、下のURLから書き込みを行なって下さい。


http://www.imasy.or.jp/~mone/osask/index.cgi?REFER=3b84ac58_7686

From: 川合秀実
Message-ID: 3b84ac58_7686
Date: 2001/08/23 16:10
Subject: Re: GUI周り

>これは想像してました・・・(やろうかとも思いましたので)。

 やはり脳裏をよぎるのは誰でも同じ事らしいですね(笑)。

>GAPI_lineで行なっていると思うのですが、さすがに点ひとつ打つのに
>これだけのコードが走るのは・・・と、思い止まりました。

 おっしゃる通りです。たかが点一つ打つだけであれだけのコードをくぐらなけ
ればいけないかと思うと悲しすぎます。

>(てっきり斜めにも引けるラインルーチンで boxを描くと想像してました・・・
>後々のアクセラレーションを考えれば、ここでの最適化よりも多くの実装を
>先に取られるかと・・・<批判ではありません)

 いや、これはごもっともなご指摘です。

 公開前の初期のバージョンでは、最適化されていないかなり手抜きのルーチン
だったのですが、486マシンなどで実行した時にちょっともたついている感じが
したので、最適化に手を染めてしまったのです。そのときはbox-fillしかサポー
トしていなかったのですが、その最適化の「気合」だけはずっと残って、boxル
ーチンを書く時も最適化してしまいました。VGAでもここまでは速くなる、とい
うサンプルだと思ってください(自慢できるほど速いわけではありませんが)。

>この発言の前に「今は、斜めには引けないラインと文字表示しかありません」
>との書き込みがありましたけど、斜めに引けないラインを実行する事が
>できるのでしょうか?(box利用を除いて)

 えーっと、box-fill指定にして、始点と終点のx座標が等しければ縦ラインにな
ります(この場合、box-fillにふさわしく始点が終点よりも上になるようにしてく
ださい)。同様に、box-fillでy座標を等しくすることで横ラインも引けます。

 いくつかの余計な処理はあるかもしれませんが、それでもまあまあの速度でラ
インを引けるはずです。

>DIBは デバイス独立ビットマップ(DeviceIndependentBitmap)と
>呼ばれる物で、Windowsの GDIで利用されています。
>Surface(DirectDrawSurface)は Windowsの DirectXで使用される物で、
>画面そのものであったり、スプライト矩形であったり、3Dのための
>テクスチャ領域であったりします。
>どちらもビットマップとスクリーン(描画領域)として扱われます。

 なるほど。この説明を読む限りでは、僕のブロック転送コマンドのサポートで
カバー可能のようですね(2D描画に限定すれば)。ブロック転送コマンドは、実際
の画面モードとは無関係なビデオバッファをアプリケーションが設定し、その任
意の領域を実画面に反映させる機能を有しています。

 ダイレクトにVRAMをアクセスできるようにしてしまうのが、当方としてはもっ
とも楽なのです。しかしそれは機種依存への道まっしぐらで、汎用的なアプリケ
ーションを書きたいと思うプログラマが、多大な場合分けに苦しむことになりま
す。それは僕の好む状態ではありません。

 しかし間に何らかのルーチンが挟まっている以上、真の速度を引き出すことが
できないというのも真実で、いずれはVRAMのダイレクトアクセス機能も提供する
ことになるでしょう。

 実は、先ほどからブロック転送コマンドを書き始めているのですが、もうすぐ
できてしまいそうです。あとはサンプル向きのネタがあればいいんですが・・・
。なにかいいネタはないでしょうかねえ(笑)。

>SDLは BeOSや Linuxや Windowsで互換性を見出すために開発されている
>GameSDKです(画面描画以外の機能もあります)。
>SDLと DirectXの API仕様や機能は非常に似通っていて(Surface概念等)、
>SDLを参考にされれば多くのマルチメディア系プログラマーの福音と
>なるのではと思われます。

 見てみました。ファンクションはそんなに多くはなさそうなので、これを取り
入れることはそんなに困難ではないようです。

>さすがに DIBや DirectXの情報は世間に氾濫してますので
>少し検索頂ければと思います(多過ぎて、どこがとは紹介しかねます)。
>長文で構わなければ説明するのにやぶさかではありませんけど。

 いえいえ、それはお世話になりすぎてしまいます。とりあえず、ブロック転送
コマンドをサポートさせますので、その仕様を見てから、足りないところをご指
摘ください。

>* Surfaceの概念やフルスクリーン表示、フリップ等
>DirectXや SDLで一般的に使用されている機能が OSASK上で
>動く日を夢見ています(直接 OSカーネルに依存する部分ではありませんけど)

 飽くなき催促が続けられれば、そう遠い先ではないかもしれません(笑)。Soli
dさんご自身が書くという手もありますが。