当使用BehaviorFlags D3DCREATE_ADAPTERGROUP_DEVICE调用IDirect3D9::CreateDevice以创建全屏multihead device(附加了2个或更多监视器)时,该函数返回D3DERR_INVALIDCALL,在Windows 10上运行应用程序(build 1511,或者建立10240)。
相同的代码在Windows 7(在众多不同的计算机上)以及Windows 8.1(具有最新更新)上运行良好。另外,为每个连接的显示器创建单独的D3D9设备(全屏)到图形适配器在Windows 10上正常工作。
顺便提一下D3D9Ex显示完全相同的行为。任何人都可以指向一个适用于Windows 10的工作D3D9多头示例吗?谢谢!答案 0 :(得分:1)
我观察到" CreateDevice"完全相同的行为。 但是当你使用" CreateDeviceEx"它很有效......好吧......差不多: - (。
您现在可以创建设备并使用它,但在某些情况下(特别是如果您使用与桌面已有的相同的分辨率),您将看不到任何内容和"呈现"将不断返回" S_PRESENT_MODE_CHANGED"。但是,如果您现在通过ResetEx端将第二台显示器切换到其他分辨率,然后切换回桌面分辨率 - 瞧它有效。我把它放在我可以在初始化后按下的键上:
const int idx = 1;
int OldWidth = D3DPresPar[idx].BackBufferWidth;
int OldHeight = D3DPresPar[idx].BackBufferHeight;
D3DPresPar[idx].BackBufferWidth = 1280;
D3DPresPar[idx].BackBufferHeight = 720;
D3DDispMode[idx].Width = 1280;
D3DDispMode[idx].Height = 720;
FailCheck(pD3DDevice->ResetEx(D3DPresPar, D3DDispMode), "ResetEX");
D3DPresPar[idx].BackBufferWidth = OldWidth;
D3DPresPar[idx].BackBufferHeight = OldHeight;
D3DDispMode[idx].Width = OldWidth;
D3DDispMode[idx].Height = OldHeight;
FailCheck(pD3DDevice->ResetEx(D3DPresPar, D3DDispMode), "ResetEX");
按下按键后,它突然起作用。很奇怪,是吗? 我在使用nvidia,amd和intel grafics适配器的多台计算机上确认了这种行为。所以这个bug似乎是在微软方面。
结论:理论上它应该可以工作但是在Windows 10多头初始化中存在一些不安的错误。 通过一些奇怪的技巧,你可以达到你想要的效果,但这些技巧在生产中使用起来太奇怪了。