VSYNC

画像をWindowに表示するアプリを作ってたら、なんだか描画の際に起きるちらつきが凄く気になってしまう。どうやら垂直同期のタイミングと、描画のタイミングが一致していないからっぽい。

元々の画像のサイズは8000*8000くらいまで対応したいので、それを材料にして描画する為にDIBを用意して、それをDrawDibDrawで描画するのが一番効率が良いっぽいけれど、そうしてもやっぱりちらつきが残ってしまう。

Picgl http://www6.plala.or.jp/nyk/picgl/ というソフトは描画にOpenGLを使っているんだけれど、自分が使っているグラフィックカードATIのRadeion9600)のOpenGLの設定で垂直同期を待つ、にすると、かなりtearingが消える。(画像のスクロールをさせた場合の比較で)これはドライバ自身がWindowの場合でも描画のタイミングを取ってくれるのかなぁ。。それでもWindowを横に動かしたりすると出てしまうけれど。

DrawDibDrawはGDI自体は使わないで、バッファをそのまま転送してくれるので高速なようなんだけれど、BottomUpのDIBしか使えないのがちょっと面倒くさいような気がする。

Windowsの場合は根本的に解決するならフルスクリーンにしないと駄目そうなんだけれど、MacOSXとかはOSの方で面倒見る仕掛けとか用意してたりするかもなぁ。。Longhornはどうなるやら。