使用DXGI将一台显示器切换到全屏时,其他显示器变黑

时间:2012-04-21 07:56:42

标签: c++ fullscreen direct3d dxgi

当我将我的一个显示器切换到全屏模式时,有时其他显示器会变黑并且不会显示任何内容。我做错了什么或者只是一些错误?

我创建了一个窗口,然后创建了一个绑定到该窗口的交换链。我用第一个参数true调用了swapchain的SetFullScreenState,第二个参数是我要切换全屏的监视器的IDXGIOutput对象。有时它工作正常,但有时所有其他监视器都丢失了(只有完整屏幕显示的东西)。

我的显卡是Radeon HD6750,驱动程序版本是12.3。


我发现MulitMon10样本有同样的问题,而有些游戏没有。或者“天际”和“猴岛故事”使用D3D还是OpenGL ......?

1 个答案:

答案 0 :(得分:0)

这个问题已经有两年了。我刚碰到它。 我在DX11上遇到了类似的问题,有时会发布在调试版本中,系统版本在发布版本中。 在我的范例中,主监视器主持一个控制台和一个可选的按键按钮。 GUI。辅助监视器(可用的监视器之一)是全屏应用程序窗口,其中显示2D专业图像并使用1D和3D查找表进行GPU转换。

主显示器空白是一个显示停止。所有需要的对话框都是控制台窗口的子对象(因此,在主监视器上打开)。辅助显示器是一个电影数字投影仪....足够' blabla'。

所以,我的解决方案是在窗口模式下创建交换链,而目标窗口已经处于全屏模式。

不要问我为什么。这个对我有用。这里有一点:

首先,我的显示窗口设置为填满整个显示器表面(没有边框,没有任何东西)。

其次,我使用“windowed = true”为此窗口创建交换链。

事实上,即使它看起来是全屏的,它也是开窗的。没有边框,就显示/渲染2D图像而言,它的工作原理相同。直接喂养后备也很有效。

然后,只有这样,您才能将后备缓冲区切换到真正的管理全屏。由于这种手术对于眼睛非常残酷,我倾向于只在绝对必要时才这样做。在效果方面,Win7将重置整个桌面(因此,所有显示器,所有窗口)并创建多个闪光灯。

在创建后备缓冲区后进入真正的全屏模式时,我从来没有遇到过陷入桌面重置状态的尴尬(回到原来的问题)。

要完成,“Windowed fullscreen”和“Real fullscreen”之间存在差异。你可以使用的东西。

  • 全屏窗口:其他窗口/对话框将与您的2D创建重叠。

  • 真正的全屏:其他窗口/对话框应该留在下面(不可见,但在那里)。

根据需要在两种模式之间切换会很好,除了桌面重置压力是一个沉重的惩罚。