Ho un problema causato da un errore in Direct3D9 :: CreateDevice(). Non riesce quando il codice seguente viene eseguito con una schermata bloccata in Windows 7. A causa dei requisiti, devo essere in grado di creare un dispositivo mentre lo schermo è bloccato.Errore dispositivo D3D durante blocco schermo
Viene visualizzato un errore D3DERR_INVALIDCALL quando CreateDevice viene chiamato con i seguenti parametri. Ho fatto molti esperimenti con l'HWND in uso e ho verificato che fosse valido. Ho anche provato varie modifiche ai parametri di presentazione senza alcun risultato. Qualcuno lo ha già incontrato o ha un'idea migliore di ciò che potrebbe causare il ritorno della chiamata non valida?
Anche in questo caso, questo errore si verifica solo con una schermata bloccata, quando viene eseguito in qualsiasi altro stato testato, ha esito positivo.
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);
Non mi è chiaro perché una schermata bloccata debba fallire per la creazione del dispositivo, in particolare quando viene eseguita in modalità NULLREF senza una reale dipendenza dallo schermo. Il mio utilizzo di DirectX non ha nulla a che fare con il rendering sullo schermo, quindi attendere che lo schermo si sblocchi non è purtroppo un'opzione. –
L'interfaccia legacy di Direct3D 9 considera il 'desktop sicuro' come uno scenario di dispositivo perso. L'uso di una versione WDDM di Direct3D (Direct3D9Ex, Direct3D 10.xo Direct3D 11.x) eviterà questo problema. –
@ChuckWalbourn D3d9Ex ha funzionato per me. Ti invierò di nuovo se promuovi il tuo commento alla risposta completa :) –