こんにちは、I.Tak.です。 From: Hidemi KAWAI <kawai !Atmark! imasy.org> Subject: [OSASK 6622] Re: VGA fast 32bpp putbox Date: Thu, 30 Oct 2003 14:47:04 +0900 > 一つは、ウィンドウ移動モードでも描画を停止させないことです。こ > れをやるには描画ルーチンの衝突判定ルーチンを改造しなければいけま > せんが、それができると、ウィンドウ移動中も表示が止まらないので非 > 常にかっこいいです。 ウィンドウ移動モードの枠もマウスカーソルと同じように扱うという ことは, 描画したあとで, 上書きされた部分に枠を描き直すわけですね。 そんな特別処理をグラフィックドライバ (6つもあります!) にほいほい 入れてしまうのはちょっと…… > もう一つは、とりあえず停止はさせるが、差分再描画シグナルを送っ > てやることです。これだと、描画禁止期間中に更新のなかったテキスト > ボックスやグラフィックボックスについては、再描画を抑制できます。 > ただしpioneerを差分再描画に対応させないと、効果はありません。結 > 構しんどそうです。 出た! 差分描画シグナル。これが良さげです。コンポーネントにフラグ をつけるだけですね。 From: Hidemi KAWAI <kawai !Atmark! imasy.org> Subject: [OSASK 6623] Re: VGA fast 32bpp putbox Date: Thu, 30 Oct 2003 14:59:32 +0900 > 「putboxと同じアルゴリズム」というのは、putboxの4bitカラー版と > 同じアルゴリズム、という意味です。つまり、スタック上に最大800バ > イトのワークエリアをとって、ここに1ライン分のタイリング後のデー > タをまず生成し、それを4bitカラー転送ルーチンと同じ方法で描画する > わけです。これがアルゴリズム的にはベストであろうと思っています。 > たぶんI.Tak.さんも同じ方法だろうと想像しています。 簡単に書くと maskbuf[color] |= bit; bit >>= 1; みたいな処理の8回繰り返しでビットパターンを作って描画しています。 実際にVRAMにアクセスするときに maskbuf[i] == 0 を飛ばす処理が面倒な 気がしますが, 他の方法で無駄を減らそうとしても結局処理時間は同じっぽい ので, 簡単で小さくなる方法に落ち着きました。4bitのputboxも同じ処理 で済ませてしまおうかと。 I.Tak. <g240845 !Atmark! mail.ecc.u-tokyo.ac.jp> http://user.ecc.u-tokyo.ac.jp/~g240845/