Direct3D9 :: CreateDevice() 오류로 인해 문제가 발생했습니다. Windows 7에서 잠긴 화면에서 다음 코드를 실행하면 오류가 발생합니다. 요구 사항 때문에 화면이 잠겨있는 동안 장치를 만들 수 있어야합니다.화면 잠금 동안 D3D 장치 오류가 발생했습니다.
다음 매개 변수를 사용하여 CreateDevice를 호출하면 D3DERR_INVALIDCALL 오류가 발생합니다. 나는 광범위하게 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);
특히 화면에 실제로 의존하지 않는 NULLREF 모드에서 실행될 때 잠긴 화면이 장치 생성에 실패해야하는 이유는 분명하지 않습니다. DirectX를 사용하면 화면에 렌더링하는 것과 아무런 관련이 없으므로 화면을 잠글 때까지 기다리는 것이 불행히도 옵션이 아닙니다. –
레거시 Direct3D 9 인터페이스는 '보안 데스크톱'이 손실 된 장치 시나리오로 간주합니다. Direct3D (Direct3D9Ex, Direct3D 10.x 또는 Direct3D 11.x)의 WDDM 인식 버전을 사용하면이 문제를 피할 수 있습니다. –
@ChuckWalbourn D3d9Ex가 나를 위해 일했습니다. 귀하의 의견을 전체 답장으로 승격 시키면 나는 당신을 업 그레 이드합니다 :) –