У меня проблема, вызванная ошибкой в Direct3D9 :: CreateDevice (). Это не удается, когда следующий код выполняется с заблокированным экраном под Windows 7. Из-за требований мне нужно иметь возможность создавать устройство, когда экран заблокирован.
Я получаю сообщение об ошибке D3DERR_INVALIDCALL, когда CreateDevice вызывается со следующими параметрами. Я много экспериментировал с используемым HWND и дважды проверил, что он действителен. Я также пробовал различные настройки параметров презентации, но безрезультатно. Кто-нибудь сталкивался с этим раньше или имеет лучшее представление о том, что могло вызвать неправильный возврат вызова?
Опять же, этот сбой происходит только с заблокированным экраном, при запуске в любом другом протестированном состоянии он завершается успешно.
D3DPRESENT_PARAMETERS pp;
ZeroMemory( &pp, sizeof(D3DPRESENT_PARAMETERS) );
pp.BackBufferFormat = D3DFMT_UNKNOWN;
pp.SwapEffect = D3DSWAPEFFECT_DISCARD;
pp.Windowed = TRUE;
HWND focusWndHnd = GetConsoleWindow();
if ( focusWndHnd == NULL && pp.hDeviceWindow == NULL )
{
focusWndHnd = ::GetDesktopWindow();
}
IDirect3DDevice9* pd3dDevice;
IDirect3D9* pD3D = Direct3DCreate9( D3D_SDK_VERSION );
hr = pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_NULLREF, focusWndHnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING|D3DCREATE_FPU_PRESERVE, &pp, &pd3dDevice );