Сбой устройства D3D при заблокированном экране

У меня проблема, вызванная ошибкой в ​​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 );
12
задан Kent Gell 14 January 2012 в 02:02
поделиться