我对Windows 10中的桌面窗口管理器(又名DWM)有几个问题:
背景:对于我用C ++编写的OpenGL应用程序,我需要有关OpenGL中前后缓冲区交换的精确时序以及在OS级别上实现这些命令。 (我知道Windows 10,或Windows一般来说,这是一个糟糕的选择,但还有其他限制因素)。
问题1:我的互联网研究表明,DWM管理第三个缓冲区(使可视化成为三重缓冲系统),我无法控制它,因此会产生不可预测的延迟。调查还显示,可以通过在全屏模式下打开OpenGL上下文来绕过这一点。这些信息是否正确?
问题2:这种延迟是由操作系统随机指示DWM复制缓冲区引起的吗?
问题3:实际延迟多长时间,我的调查显示了< 1毫秒到50毫秒,但没有值得信赖的来源。
事实上,除了单一的事实,仅仅存在延迟,我无法在互联网上找到任何其他假设的可靠来源。因此,我恳请任何对此问题有答案的人,如果可能,请参考他们的陈述。
我不知道这是否重要,但我通过GLFW和GLEW使用OpenGL。
答案 0 :(得分:0)
虽然我无法找到问题2和3的答案,但联系Nvidia支持部门提供了问题1的答案。
Nvidia指出,在全屏上下文中呈现的应用程序无法访问DWM。只有在窗口模式下呈现的应用程序才会被处理。
警告:他们还说这是设计的。考虑到微软试图强迫用户/程序员使用DWM这一事实并不能保证这个设计决策能保持多久不变。
来自Nvidia的原始邮件:
[...]
在我们的专业部门检查您的请求后,请注意当游戏或任何内容处于全屏状态时,您无法访问此Windows功能[annot。:DWM]。这是设计的。如果要访问此功能,则需要窗口模式。
[...]