多个Direct3D 9设备和Alt-tabbing

时间:2012-01-23 15:08:20

标签: fullscreen direct3d9

我有一个应用程序,它以全屏模式创建Direct3D 9设备然后开始呈现。稍后,在创建第一个设备之后,我会在窗口模式下临时创建一个新的Direct3D设备(在同一个线程上但是对于不同的窗口)。我再次立即销毁这个设备,但不知何故,我不再能够从全屏应用程序中删除Alt-tab了。该应用程序只是停留在顶部而不是落到后台,尽管看起来应用程序不再是焦点。

如果我将我的临时设备创建为D3DDEVTYPE_NULLREF,我突然可以按Alt键退出。有没有人知道为什么会这样,如果有的话,我怎么能在不弄乱现有设备的情况下创建第二个临时设备呢?

2 个答案:

答案 0 :(得分:0)

创建D3D设备时,指定将其绑定到哪个窗口(CreateDevice调用的第三个参数)。我可能会建议破坏第二个设备以第一个设备看不到的方式取得焦点。尝试将焦点显式返回主窗口:

second_device->Release();
SetActiveWindow(hWnd);

顺便说一下,如果这是你如何进行并行渲染,请考虑使用渲染目标或交换链。 DX9文档称,设备之间的切换会对性能造成重大损失。

答案 1 :(得分:0)

尝试在创建第二个设备后重置第一个设备。 MSDN提到这是初始化多个设备的正确方法。然而,我找不到关于它的文章:(

虽然我从来不需要制作全屏和窗口设备。我只试过两台全屏设备。