DirectX9のデバイス消失で、Reset関数が失敗する
Posted: 2015年7月01日(水) 22:21
デバイスロストの対応をしているのですが、pDevice->Resetで何故かD3D_OK以外が帰ってきてしまいます。
DeviceLost関数内の「2.デバイスリセット」の部分です。
d3dppはグローバル変数として既に設定されています。というか、怪しかったので新しく作ってそれをReset()に渡すということもしてみましたが、それでもダメでした。
リソースの解放に漏れはありませんでした。まだ作り始めたばかりでリソースはスプライトとテクスチャしかなく、何度確認してもその二つとも解放しています。
どなたかわかる方よろしくお願いします。
//メインループ
void Roop(void (*GameFunc)() )
{
//初期化
ZeroMemory(&msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
//画面クリーン
pDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER,D3DCOLOR_XRGB(55,255,255), 1.0f, 0 );
//メイン処理
GameFunc();
//デバイスロストしてたら対応
if( pDevice->Present( NULL, NULL, NULL, NULL ) == D3DERR_DEVICELOST)
{
DeviceLost();
}
}
}
}
//デバイスロスト対応
void DeviceLost()
{
//ダメならまたループ
if(pDevice->TestCooperativeLevel() == D3DERR_DEVICELOST)
{
return;
}
//復帰できる場合
//1.リソースの解放
ResourceAllRelease();
//2.デバイスリセット(戻り値が D3D_OK 以外の場合、復元出来ないので終了)
if(pDevice->Reset(&d3dpp) != D3D_OK)
{
DebugBox("デバイスのリセットに失敗しました");
PostQuitMessage(0);
return;
}
//3.リソースの再生成
ResourceAllReload();
}
d3dppはグローバル変数として既に設定されています。というか、怪しかったので新しく作ってそれをReset()に渡すということもしてみましたが、それでもダメでした。
リソースの解放に漏れはありませんでした。まだ作り始めたばかりでリソースはスプライトとテクスチャしかなく、何度確認してもその二つとも解放しています。
どなたかわかる方よろしくお願いします。