我对Windows 10中的桌面窗口管理器(aka DWM)有一些疑问:
背景:对于我用C ++编写的OpenGL应用程序,我需要关于OpenGL中前后缓冲区的交换以及在OS级别上实现这些命令的准确计时。 (我知道Windows 10或一般来说是Windows,这是一个不好的选择,但还有其他限制因素)。
问题1:我的互联网研究表明DWM管理着我无法控制的第三个缓冲区(使可视化成为三重缓冲系统),因此产生了不可预测的延迟。调查还显示,可以通过以全屏模式打开OpenGL上下文来绕过此操作。此信息正确吗?
问题2:这种延迟是否是由操作系统随机指示DWM复制缓冲区的事实引起的?
问题3:实际延迟有多长时间,我的调查显示,延迟时间在1ms到50ms之间,但是没有可靠的来源。
实际上,除了唯一的事实,即延迟的存在之外,我无法在互联网上找到任何其他假设的可靠来源。因此,我恳请对这个问题有答案的任何人在可能的情况下都包括对其陈述的引用。
我不知道这是否重要,但是我正在通过GLFW和GLEW使用OpenGL。
最佳答案
尽管我无法找到问题2和3的答案,但与Nvidia支持人员联系可以提供问题1的答案。
Nvidia声明,在全屏上下文中呈现的应用程序无法访问DWM。它仅处理以窗口模式呈现的应用程序。
警告:他们还说这是设计使然。考虑到Microsoft试图强迫用户/程序员使用DWM的事实,因此不能保证此设计决定将保持多长时间。
来自Nvidia的原始邮件:
[...]
与我们的专业部门核对您的请求后,请注意,当游戏或其他任何东西处于“全屏”状态时,您将无法访问此Windows功能[annot .: DWM]。这是设计使然。如果要访问此功能,则需要为窗口模式。
[...]
关于c++ - Windows 10桌面窗口管理器交换时机?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44287021/