描画その2

はじめに


2Dもがんがれ!という事で、少し前のPCでも快適に遊べるような描画処理が書けるように実験。

スクリーンショット
32×32のブロックを横20、縦15個(640×480ドット)並べます。
これを1秒間で何回描画できるかという処理です。

ダウンロード:
DrawTest002.zip

解説 


DirectDrawで描画してみました。
同じ条件という事でウィンドウモードで実施。ウィンドウモードで最も軽い方法かどうかはわかりませんが、システムメモリで確保し、エミュレーションモードで動作させるという方法をとりました。
また、1ドット単位で直接メモリ操作し、DIBの時と同じ条件にしています。この場合違いはバックサーフェスからプライマリサーフェスへの転送だけになるはず…

結果は以下の通り。
デスクトップPC:自作PC (Pentium4 3.2GHz)、メモリ:PC3200、ビデオカード:GeForce6600GT、画面:32Bitモード
 約230回

遅い!?
DirectDrawの使い方が悪いのでしょうか…
32Bitモード以外では正しく表示されないと思うのですが、それにしても…
DIBの方が速いですね。どうもBltが遅いようです。DirectDrawはLockが遅いと言われていますが、今回はシステムメモリに確保したので、毎回Lockする必要が無いので影響はありませんし。
ウィンドウモードだとBltFastも失敗するようで。

もっと違った方法があるのかもしれませんが、このままだとDirectDrawを使うメリットが無いなぁ…
という結果になりました。検証方法が問題なんでしょうかね。