IDirect3DDevice9::Reset メソッド
IDirect3DDevice9::Reset メソッド
スワップ チェーンのタイプ、サイズ、フォーマットをリセットする。
構文
HRESULT Reset(
D3DPRESENT_PARAMETERS* pPresentationParameters
);
パラメータ
pPresentationParameters
[in, out] 新しいプレゼンテーション パラメータを記述する D3DPRESENT_PARAMETERS 構造体へのポインタ。NULL を指定することはできない。フルスクリーン モードに切り替える際、Microsoft® Direct3D® は、バック バッファとフロント バッファのフォーマットを同一にして色変換の必要性をなくすため、バックバッファ フォーマットに合致するデスクトップ フォーマットを探す。
戻り値
成功した場合は、D3D_OK を返す。
失敗した場合は、次のいずれかの値を返す。
D3DERR_DEVICELOST | デバイスは、消失しているが、現在リセットできない。したがって、レンダリングは不可能である。 |
D3DERR_DRIVERINTERNALERROR | 内部ドライバ エラー。通常、このエラーを受け取ったら、アプリケーションはシャットダウンしなければならない。詳細については、「ドライバの内部エラー」を参照すること。 |
D3DERR_INVALIDCALL | メソッドの呼び出しが無効である。たとえば、メソッドのパラメータに無効な値が設定されている場合などである。 |
D3DERR_OUTOFVIDEOMEMORY | Direct3D が処理を行うのに十分なディスプレイ メモリがない。 |
E_OUTOFMEMORY | Direct3D が呼び出しを完了するための十分なメモリを割り当てることができなかった。 |
注意
IDirect3DDevice9::Reset の呼び出しが失敗すると、デバイスは "消失" 状態 (IDirect3DDevice9::TestCooperativeLevel の呼び出しからの戻り値 D3DERR_DEVICELOST が示す) になる。ただし、デバイスが既に "非リセット" 状態 (IDirect3DDevice9::TestCooperativeLevel の呼び出しからの戻り値 D3DERR_DEVICENOTRESET が示す) の場合は除く。消失したデバイスのコンテキストにおける IDirect3DDevice9::Reset の使い方の詳細については、「IDirect3DDevice9::TestCooperativeLevel」および「デバイスの消失」を参照すること。
IDirect3DDevice9::Reset を呼び出すと、すべてのテクスチャ メモリ サーフェイスが失われて、管理下のテクスチャがビデオ メモリからフラッシュされ、すべてのステート情報がクリアされる。デバイスに対して IDirect3DDevice9::Reset メソッドを呼び出す前に、アプリケーションでは明示的なレンダリング ターゲット、深度ステンシル サーフェイス、追加スワップ チェーン、ステート ブロック、およびデバイスに関連付けられている D3DPOOL_DEFAULT リソースを解放する必要がある。
スワップ チェーンのタイプには、フルスクリーンとウィンドウがある。新しいスワップ チェーンがフルスクリーンの場合、アダプタは新しいサイズに合ったディスプレイ モードに設定される。
Microsoft DirectX® 9.0 アプリケーションでは、この呼び出し中 (たとえば、この呼び出しが返る前) はアプリケーションにメッセージが送信されることを期待できる。アプリケーションは、このときに Direct3D を呼び出さないための警告を受け取る。また、IDirect3DDevice9::Reset が失敗した場合、呼び出すことができる有効なメソッドは IDirect3DDevice9::Reset、IDirect3DDevice9::TestCooperativeLevel、さまざまな Release メンバ関数だけである。その他のメソッドを呼び出すと、例外になる場合がある。
リセットするデバイスを作成したスレッドとは別のスレッドで IDirect3DDevice9::Reset を呼び出すと、この呼び出しは失敗する。
DirectX 9.0 では、ピクセル シェーダと頂点シェーダは、IDirect3DDevice9::Reset 呼び出しの後も保持される。アプリケーション側で明示的に再作成する必要はない。
ウィンドウ モードのバック バッファ フォーマットに対しては、IDirect3D9::CreateDevice、IDirect3DDevice9::Reset、IDirect3DDevice9::CreateAdditionalSwapChain の呼び出しで D3DFMT_UNKNOWN を指定できる。つまり、アプリケーションでは、ウィンドウ表示モードに対する IDirect3D9::CreateDevice を呼び出す前に、現在のデスクトップ フォーマットを問い合わせる必要はない。フルスクリーン モードに対しては、バック バッファ フォーマットを指定する必要がある。Setting BackBufferCount = 0 は 1 つのバック バッファとなる。
参照
D3DSWAPEFFECT、D3DPRESENT_PARAMETERS、IDirect3DDevice9::Present、マルチヘッド