Hi!
I have a fullscreen d3d9 application, with an image displayed on the screen. if I press alt-tab to switch to another window, and then I try to get back to my application, I receive D3DERR_INVALIDCALL error atbut the problem is that I did not modify m_pres_params structure since the initialization of direct3d (when worked). And I didn't even switch to windowed mode. Can anybody tell me what the problem is and what I can do to solve it?Code:m_pDevice->Reset(&m_pres_params);
my code:
main loop:
here, the function IsLostDevice:Code:int CGameApp::Run(void) { MSG msg = {0}; while (msg.message != WM_QUIT) { while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } if (FALSE == IsLostDevice()) { UpdateScene(); DrawScene(); } } return (int)msg.wParam; }
and here is how I initialized present parameters:Code:bool CGameApp::IsLostDevice(void) { HRESULT hr = m_pDevice->TestCooperativeLevel(); if (hr == D3DERR_DEVICELOST) { Sleep(20); return true; } if (hr == D3DERR_DRIVERINTERNALERROR) D3DErrorMessage(hr); if (hr == D3DERR_DEVICENOTRESET) { OnLostDevice();//here I call OnLost on the sprite HRESULT hr = m_pDevice->Reset(&m_pres_params); if (hr != D3D_OK) D3DErrorMessage(hr); OnResetDevice();//here I call OnReset on the sprite return false; } return false; }
can anybody please help me?Code:ZeroMemory(&m_pres_params, sizeof(m_pres_params)); m_pres_params.BackBufferWidth = m_nWidth;//that is, 800 m_pres_params.BackBufferHeight = m_nHeight;//that is, 600 m_pres_params.BackBufferFormat = D3DFMT_X8R8G8B8; m_pres_params.BackBufferCount = 1; m_pres_params.MultiSampleType = D3DMULTISAMPLE_NONE; m_pres_params.MultiSampleQuality = 0; m_pres_params.SwapEffect = D3DSWAPEFFECT_DISCARD; m_pres_params.hDeviceWindow = m_hWnd; m_pres_params.Windowed = bWindowed; m_pres_params.EnableAutoDepthStencil = true; m_pres_params.AutoDepthStencilFormat = D3DFMT_D24S8; m_pres_params.Flags = 0; m_pres_params.FullScreen_RefreshRateInHz = D3DPRESENT_RATE_DEFAULT;


Reply With Quote