あまり効果がない
ということで、そうしてみました。
一応合成自体は最大で 1 割ほど速くなった。。。みたいだけどぜんぜん体感できないや。
だめじゃん。
うちのマシンのように Blt 自体がそれほど速くないとなると、そもそもオフスクリーンバッファを使ってることがネックになってしまいますね。。。壁紙がなければオフスクリーンバッファなしで行くんですけども。
どうでもいいですけど、オフスクリーンバッファを使わずスクリーンだけで表示を完結させたい場合って、たいてい WM_ERASEBKGND が邪魔なので DefWindowProc を呼ばずにリターンさせるのですが、このメッセージの存在意義がよく分からないなあ。
ちなみに、背景色とのαブレンドをするように設定した場合は、合成領域の幅の最適化とかしようがないので、常にビュー全体を AlphaBlend() します。なので、遅いままです。
テーマ周りの小バグを直してて気付きましたが、壁紙を表示している状態というのはオフスクリーンは 8bpp なのです(壁紙なしなら 15bpp)。なので、設定した色をそのまま使うわけではなく、256 色の論理パレットから一番近そうな色を選んで、それに置き換えられます。
ある表示要素に対応するパレットインデックスは固定して、適宜パレットの中身を書き換えるようにすれば置き換えは発生しませんが。。。使用色が256を越えられないとかいう変な制限がつくことになってしまいます。字句解析器のスタイルをどうするのかとか、選択範囲を反転させたとき見難くなるかもとかということを考え始めると話が複雑になりすぎるので、これはまあ仕様ということで。。。
by knife37
| 2005-09-15 19:23
| ロジック修正
| Top
|