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

Other monitors go black when switch one monitor to fullscreen with DXGI

本文关键字:显示器 其他 DXGI 使用 一台      更新时间:2023-10-16

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

我创建了一个窗口

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

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


我发现 MulitMon10 样本也有同样的问题,而有些游戏没有。还是《天际》和《猴岛传说》使用D3D或OpenGL?

这个问题

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

让主显示器变为空白是一个阻碍。所有需要的对话框都是控制台窗口的子级(因此,在主监视器上打开)。辅助监视器是电影数字投影仪....够了'呸'了。

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

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

首先,我的显示窗口设置为填充整个显示器表面(没有边框,没有所有内容)。

其次,我用"windowed = true"为这个窗口创建交换链。

事实上,即使它看起来全屏,它也是窗口的。没有边框,就显示/渲染 2D 图像而言,它的工作方式相同。直接喂入后台缓冲器也可以。

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

在创建后台缓冲区后进入真正的全屏时,我从未经历过被卡在桌面重置中间的解脱(回到最初的问题)。

为了完整起见,"窗口全屏"和"真实全屏"之间存在差异。你可以使用的东西。

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

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

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

相关文章: