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が私のために働いた。あなたが完全な答えにあなたのコメントを昇進させるならば、私はあなたをアップアップします:) –