使用 DXGI 将一台显示器切换到全屏时,其他显示器将变黑
Other monitors go black when switch one monitor to fullscreen with DXGI
当我将一台显示器切换到全屏模式时,有时其他显示器会变黑,不会显示任何内容。我做错了什么还是只是一些错误?
我创建了一个窗口,然后创建了一个绑定到该窗口的交换链。我调用交换链的 SetFullScreenState,第一个参数为 true,第二个参数是我想全屏切换的监视器的 IDXGIOutput 对象。有时它工作正常,但有时所有其他显示器都会丢失(只有全屏显示器显示内容)。
我的显卡是Radeon HD6750,驱动程序版本是12.3。
我发现 MulitMon10 样本也有同样的问题,而有些游戏没有。还是《天际》和《猴岛传说》使用D3D或OpenGL?
已经两年了。我刚刚遇到它。我在DX11中遇到了类似的问题,有时发生在调试版本中,在发布版本中系统地发生。在我的范式中,主显示器托管一个控制台和一个可选的"按下按钮"GUI。辅助监视器(可用监视器之一)是全屏应用程序窗口,其中显示 2D 专业图像并使用 1D 和 3D 查找表进行 GPU 转换。
让主显示器变为空白是一个阻碍。所有需要的对话框都是控制台窗口的子级(因此,在主监视器上打开)。辅助监视器是电影数字投影仪....够了'呸'了。
因此,我的解决方案是在目标窗口已经处于全屏模式时以窗口模式创建交换链。
不要问我为什么。它对我有用。这里还有一点:
首先,我的显示窗口设置为填充整个显示器表面(没有边框,没有所有内容)。
其次,我用"windowed = true"为这个窗口创建交换链。
事实上,即使它看起来全屏,它也是窗口的。没有边框,就显示/渲染 2D 图像而言,它的工作方式相同。直接喂入后台缓冲器也可以。
然后,也只有这样,您才能将后台缓冲区切换到真正的管理全屏。由于这种手术对眼睛来说非常残酷,所以我倾向于只在绝对必要时才这样做。在效果中,Win7将重置整个桌面(因此,所有显示器,所有窗口)并创建多个闪光。
在创建后台缓冲区后进入真正的全屏时,我从未经历过被卡在桌面重置中间的解脱(回到最初的问题)。
为了完整起见,"窗口全屏"和"真实全屏"之间存在差异。你可以使用的东西。
- 窗口
全屏:其他窗口/对话框将重叠您的 2D 创作。
真正的全屏:其他窗口/对话框应该留在下面(不可见,但在那里)。
根据需要在两种模式之间切换会很好,除了桌面重置压力是一个沉重的惩罚。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- C++从其他 constexpr 创建 lambda 不能按顺序执行 Constexpr
- 断言中的Fold表达式在某些计算机上编译,但在其他计算机上不编译
- Visual Studio(或任何其他工具)能否将地址解释为调用堆栈(boost上下文)的开头
- 结构和双指针隐藏在其他结构中,多层混淆
- UE4在OnComponentBeginOverlap上铸造其他actor
- 当我在其中一个线程执行中(在activemq-cpp中)捕获到特定值时,我如何终止/停止所有其他线程
- MESI协议和std::atomic-它是否确保所有写入立即对其他线程可见?
- 保留对其他类的成员函数的引用
- 使用 DXGI 将一台显示器切换到全屏时,其他显示器将变黑
- 如何获得其他附加显示器的屏幕分辨率
- 检测/识别端口(HDMI,其他)显示器连接到Windows 7/8/10 win32c++