У меня проблема, вызванная сбоем в 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 );