Microsoft DirectX 8.0 (C++) |
リソースはビデオ メモリを消費する。消失したデバイスは、アダプタが所有するビデオ メモリから接続解除されるため、デバイスが消失したときのビデオ メモリの割り当てを保証することはできない。そのため、すべてのリソース作成メソッドは、D3D_OK が返ると成功するが実際にはダミーのシステム メモリのみを割り当てるように実装されている。すべてのビデオ メモリ リソースは、デバイスをサイズ変更する前に破棄する必要があるため、ビデオ メモリの過剰割り当ては発生しない。このようなダミー サーフェスにより、アプリケーションが IDirect3DDevice8::Present を呼び出してデバイスの消失を検出するまで、ロック処理やコピー処理が正常に機能しているように見える。
ドライバが消失状態から処理可能状態に復元される前に、すべてのビデオ メモリが解放されなければならない。つまり、アプリケーションは IDirect3DDevice8::CreateAdditionalSwapChain によって作成されたすべてのスワップ チェーンや D3DPOOL_DEFAULT メモリ クラスに配置されているすべてのリソースを解放しなければならないということである。アプリケーションは、D3DPOOL_MANAGED メモリ クラスや D3DPOOL_SYSTEMMEM メモリ クラスに配置されているリソースは解放する必要がない。ほかの状態データは、処理可能状態へのトランジションによって自動的に破棄される。
アプリケーションの開発にあたっては、デバイスの消失に対して 1 つのコード パスで対応することを推奨する。このコード パスは、スタートアップ時にデバイスの初期化に使用したコード パスと同一ではなくても類似するものとする。