[HMC]年間5250円で独自ドメイン付属、ウィルスチェックありのレンタルサーバ!
Last update : 1999/11/03
DirectDraw基礎 第13回
低解像度(ModeX)を使ってみる
サンプルコードのダウンロード
  では、まずサンプルコードをダウンロードし、解凍して下さい。 私はVisual C++6.0でコンパイルしているので、をお持ちの方は Visual C++でプロジェクトファイルを開いて下さい(「ddraw_13.dsw」をダブルクリックすれば開けます)。 圧縮ファイルに含まれる「ddraw_13.exe」をダブルクリックし、実行してみて下さい。どうでしょう?画面が切り替わり、フルスクリーン化し、 1ドットの荒いタイル(謎)がスクロールしていると思います。
  というわけで、今回は低解像度(MODE X)モードを使ってみたいと思います。
ModeX
  DirectDrawでは320×240、320×200と言った低解像度のディスプレイモード をサポートしています。こういった特殊(?)なディスプレイモードを使用する場合には、ModeX とよばれるものを使用しなければなりません。「ModeX」が一体何を意味するかは謎として、とにかく320×240モードを使用したい場合には ModeXの設定をすればいいのです(ォ。
  使い道として、秒間60枚くらいは画面更新をしたいゲーム(ハデなアクションや格闘)、3D等で描画時間を少しでも減らせるように 低解像度にするといった事が考えられます。ただ、私が試したところ、ModeXを使用すると、一部の環境で不都合が生じる事があります。そんな時は コントロールパネルのDirectXのアイコンをダブルクリックし、DirectDrawの項目の中の「Use ModeX for 320 for X(?)」みたいな感じのチェックを外してみて下さい。 たぶん正常に動作すると思います。

  では実際にプログラムするにはどうしたら良いでしょう。コードを見てみましょう。

  自作関数「StartDirectDraw」内の協調レベル設定部分の引数に、「DDSCL_ALLOWMODEX」を追加してやります。 これで、DirectDrawがModeXを使用するように設定出来ました。次に、解像度設定で、320×240×8(256) を指定し、この瞬間に画面が切り替わります。とりあえず、DirectDrawの設定はこれで終わりです(^^; ただ、ModeXにはいくつか制約があります。まず、プライマリサーフェイスへデータを転送出来ないという点、次にプライマリサーフェイスのロック、最後にプライマリサーフェイスに対するGetDCの使用です。 要するにプライマリサーフェイスにアクセス出来ないと言う事です。ですから、普段は複合プライマリサーフェイスを作成して バックバッファからフリップしてフロントバッファに表示させるしか方法がありません。これらを除けば バックバッファやオフスクリーンサーフェイスの扱いは今まで通り出来ます。