はじめに
さぁ、始まりました第1回DirectDraw講座!DirectXで描画を担当するのがDirectDrawです。最近オンラインゲームで起動時に画面がフルクリーンに切り替わるものが増えてきましたが、これらは全部DirectDrawを使用していると考えて結構です。とりあえず私が今まで制作してきたゲーム並の事は出来ると言うことで、それ以上の事は出来ません(謎。今までGDIやらWinGやらで地味なゲームを作っていたあなた!たまにはDirectX使ってド派手なゲーム作りましょう!みたいな。
DirectDrawの長所
DirectDrawが今までのGDIやWinGと異なる点は、ハードウェアを使用するという点です。フルスクリーン化して色数を256色なんかにすれば、画面に表示するために必要なビデオメモリは640×480で300K程度です。現在世界で普及しているビデオメモリは最低でも2Mはあるので、残りの1.7Mに必要な画像を読み込んでおき、後はビデオメモリ間のハードウェア転送機能を使用して高速に描画すれば、派手なゲームもたぶん、作れます。まぁ、描画がいくら速くても、その他の部分でプログラム出来なければ、お話になりませんが・・・。とりあえず、DirectDrawでは、透過色付きの転送も出来ます。GDIのようにマスクイメージを用意してBitBltでAND、XORする必要もありません(WinGの場合は関係ないですけど)。DirectDrawでやる事といえば、長方形領域の転送くらいなものです。
DirectDrawの短所
DirectDrawではハードウェアが対応していない場合、ソフトウェアでエミュレートします。DirectDrawで、拡大、縮小付きの長方形領域転送があるのですが、現在対応しているビデオカードが少なく、めっちゃ描画遅いです。GDIのStretchBltとやらよりも遅いです(爆。また、ビデオメモリに直接アクセスする事も出来るのですが、そのデータ転送速度が遅すぎます。使わない方が良いです。それから、DirectDrawには円や線、文字と言った描画関数は用意されていません。その代わり、デバイスコンテキストとやらを取得出来るので、これを使用してGDIで描画します。