コメントありがとうございます。
ソースコードがなくてすみませんm(_ _)m
ただ、そうでもなさそうです。
クラスのコンストラクタの中ですべて行っております。
(これ自体には問題があるとは思えないのですが……)
何故か、症状が変わり、一部のテクスチャだけ復帰できているようなのですが
今度は途中でフリーズしたようになっており
未だに、解決には及んでおりません。
(このあたり、自分でもう一度見直したほうが良いところもあると思っております)
過去に確かにウィンドウプロシージャの問題で、似たような症状に陥ったこともあったので
配慮したつもりではありました。
ウィンドウプロシージャは作っているだけで一切使っておりません。
●WinMainがこのような感じです。(動的に確保して、開放するだけ)
コード:
int WINAPI _tWinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,
LPTSTR CmdLine ,int nCmdShow){
class CApplication * pApp = new CApplication(APPLICATION_TITLE,hInstance,nCmdShow,0,0,WINDOW__WIDTH,WINDOW__HEIGHT);
delete pApp;
return 0;
}
●クラスCApplication内に以下のようなforメッセージループがあります
コード:
for(;;)
{
m_fps.FPSRegular();
if(m_fps.GetDrawFlag())
{
(this->*Render_Routine)();
}
if(this->ProcessMessage()==-1)
{
break;
}
}
●レンダリング処理
コード:
VOID CApplication::Render()
{
if(IsKeyDown(VK_ESCAPE)){exit(0);}
if(IsKeyDown_Ctrl_C())
{
m_dxg.GetBackBuffer(0);
if(!m_dxg.SaveSurfaceW(0 , L"img\\キャプチャ.png"))
{m_process.InfoMsgW(L"文字付きで保存");}
DX_RELEASE(m_dxg.m_pSurface[0]);
}
if (SUCCEEDED(m_dxg.m_pd3dDevice->BeginScene())) // シーンの描画開始
{
m_pSceneManager->Control();
m_dxg.m_pd3dDevice->EndScene(); // シーンの描画終了
}
// シーンの表示=フリップ
m_hr = m_dxg.m_pd3dDevice->Present(NULL, NULL, NULL, NULL);
if(m_hr == D3DERR_DEVICELOST)
{
Render_Routine = DeviceLost;
}
return;
}
●そして、デバイスの消失処理です
コード:
VOID CApplication::DeviceLost()
{
m_dxg.m_pSprite->OnLostDevice();
for(int i=0;i<MAX_FONT_NUM;i++)m_dxg.m_pFont[i]->OnLostDevice();
for(int i=0;i<MAX_SURFACE_NUM;i++)DX_RELEASE(m_dxg.m_pSurface[i]);
for(int i=0;i<MAX_TEXTURE_NUM;i++)DX_RELEASE(m_dxg.m_pTexture[i]);
if(m_dxg.m_pd3dDevice->TestCooperativeLevel()==D3DERR_DEVICENOTRESET)
{
switch(m_dxg.m_pd3dDevice->Reset(&m_dxg.m_d3dpp))
{
case D3D_OK:
m_dxg.m_pSprite->OnResetDevice();
for(int i=0;i<MAX_FONT_NUM;i++)m_dxg.m_pFont[i]->OnResetDevice();
/////////////////////////////////////////////////////////////////////////////////////////
//このLoadSettingsで設定用テキストファイルを読み込みに行き、テクスチャとサーフェイスを構築
LoadSettings();
////////////////////////////////////////////////////////////////////////////////////////
Render_Routine = Render;
break;
case D3DERR_DEVICELOST:
m_process.InfoMsgW(L"デバイス消失状態(復帰できない)");
break;
case D3DERR_DRIVERINTERNALERROR:// 内部ドライバーエラー(アプリケーションはシャットダウンしなければならない)
MessageBoxW(NULL,L"内部ドライバエラー",L"DEBUG",MB_OK);
break;
case D3DERR_OUTOFVIDEOMEMORY:
m_process.InfoMsgW(L"DirectXメモリ不足");
break;
case E_OUTOFMEMORY:
m_process.InfoMsgW(L"DirectXメモリ不足");
break;
case D3DERR_INVALIDCALL:
break;
case D3DERR_DEVICEREMOVED:
MessageBoxW(NULL,L"ハードウェアアダプターが無効",L"DEBUG",MB_OK);
break;
default:
MessageBoxW(NULL,L"その他のエラー",L"DEBUG",MB_OK);
break;
}
}
return;
}