ホーム < ゲームつくろー! < DirectX技術編

その52 デバイスのロストに対処する!:サンプルプログラム



 DirectX技術編その52「デバイスのロストに対処する!」で説明した内容を踏まえたサンプルプログラムです。実行すると、フルスクリーン画面にテスト用テクスチャが表示されます。Alt+Tabを押すとデバイスがロストします。タスクバーにあるアプリケーションを再度クリック(フォーカスを戻す)すると、ロストから復活して再びテクスチャが表示されます。


サンプルスクリーンショット。味気ない画ですいません(^-^;

エスケープを押すと終了できます。


 サンプルを動かすために必要なファイルはこちらからダウンロードできます(DXGSmp_No52_v101.lzh)。アーカイブには次のファイルが含まれています

ファイル 説明
main.cpp メイン関数
LostResource.h ロストリソースのベースクラス
LostTexture.h ロスト対象テクスチャを扱うクラス
LostD3DXSpriteResource.h ID3DXSpriteインターフェイスのロスト処理を扱うクラス
LostResourceManager.h ロストリソースを管理するクラス
comptr.h COMポインタ(ダブルポインタサポート)
SmartPtr.h スマートポインタ

 新規プロジェクトを立ち上げて、解凍したファイルをプロジェクトファイルと同じフォルダにコピーし、プロジェクトに追加すると実行できます。

○ サンプルのポイント

 このサンプルのポイントはLostResource及びLostResourceManagerクラスを用いたロスト処理をフレームワークに埋め込めこんでいるところです。メイン関数内にその記述があります。

 ロスト対象となるD3DPOOL_DEFAULTフラグを指定して生成したテクスチャをLostTextureオブジェクトに登録し、それをLostResourceManager::Addメソッドでマネージャに登録します。後はIDirect3DDevice9::Presentメソッドでロストをキャッチした時にLostResourceManager::RecoverDeviceメソッドを呼ぶだけです。詳しくはメイン関数を眺めると見えてくると思います。

 このサンプルではテクスチャのみを扱っていますが、他のロスト対象オブジェクトもLostTextureクラスに習えば対処できます。親であるLostResourceクラスには幾つか純粋仮想メソッドが含まれています。LostResource::Backupメソッドはロストをキャッチした時の解放処理を記述します。LostResource::Recoverメソッドにはロストから復活した後の再構築の処理を記述します。LostResouce::GetRefCountメソッドは保持しているロスト対象オブジェクトの参照カウンタを返します。これについてはLostTexture::GetRefCountメソッドを参照してみて下さい。

 サンプルの内容についてのご質問がありましたら掲示板にお願い致します。


○ バージョン情報

 v1.00 -> v1.01 (2009. 10. 12)
・ クラスの仮想デストラクタが設定されていない事によるメモリリークを修正