1
我有一個簡單的directX-9測試應用程序,我想在擴展模式下從一臺顯示器移動到另一臺顯示器。
窗口和設備在主監視器上創建,場景繪製正確,但是當我將窗口移動到第二個監視器時,它會凍結。沒有錯誤,即使現在的呼叫也不會失敗,但沒有更新窗口。只要我將窗口移回主顯示器,一切都會恢復正常。
任何人都可以給我一個提示我錯過了什麼讓這個工作?在擴展模式下將DirectX窗口從一臺顯示器移動到另一臺顯示器
我有一個簡單的directX-9測試應用程序,我想在擴展模式下從一臺顯示器移動到另一臺顯示器。
窗口和設備在主監視器上創建,場景繪製正確,但是當我將窗口移動到第二個監視器時,它會凍結。沒有錯誤,即使現在的呼叫也不會失敗,但沒有更新窗口。只要我將窗口移回主顯示器,一切都會恢復正常。
任何人都可以給我一個提示我錯過了什麼讓這個工作?在擴展模式下將DirectX窗口從一臺顯示器移動到另一臺顯示器
確保枚舉您的適配器模式。您使用的模式可能在顯卡上有問題。此外,對於適配器支持的每種格式,都會根據可用模式的數量顯示一系列顯示模式。以下是通過這些模式循環的一個簡單的例子:
D3DDISPLAYMODE mode;
UINT adapter = 0;
D3DFORMAT format = D3DFMT_R5G6B5;
LPDIRECT3D9 pD3D;
pD3D = Direct3DCreate9(D3D_SDK_VERSION);
if(!pD3D) return FALSE;
UINT availableModes = pD3D->GetAdapterModeCount(Adapter, Format);
if(!availableModes) return FALSE;
for(UINT i = 0; i < availableModes; i++)
{
pD3D->EnumAdapterModes(adapter, format, i, &mode);
formatModeList->push_back(mode); // A list of modes
}
此外,還要確保你沒有使用,如果你是在窗口模式下翻轉。在窗口模式下,您可以共享正在運行的應用程序的當前視頻模式。不幸的是,你必須使用較慢的傳輸過程。希望這有助於。
問候,
請問
已經幫助了我,但我仍然不知道如何找出我的窗口中更改顯示器。如果我添加一個按鈕到我的應用程序,我可以強制第二個適配器的設備重新創建,一切都按預期工作。但要檢測顯示器的變化? – mkaes 2011-06-17 08:07:50
@mkaes,只是爲了確認,你是否在檢查丟失的設備?我不確定爲什麼要去第二臺顯示器會導致丟失的設備,但在進一步調查之前我只想確定一下。 – 2011-06-17 12:14:40
是的,我做到了。但交換鏈上的當前和TestCooperativeLevel都沒有返回丟失的設備。只有S_OK。我也看到,VLC可以同時在兩臺顯示器上部分顯示帶DirectX的視頻。所以我有一個更大的問題:-( – mkaes 2011-06-17 13:29:44