首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Aero窗口中禁用VSync

在Aero窗口中禁用VSync
EN

Stack Overflow用户
提问于 2013-01-11 09:18:44
回答 2查看 2.2K关注 0票数 0

我正在为Windows (XP,Vista,7,8)开发一个有窗口(而不是全屏)的OpenGL应用程序,其中VSync和GPU帧队列会导致非常明显(和糟糕的)输入延迟。我使用了wglSwapBufferEXT来禁用VSync,并在SwapBuffers之后使用了glFinish来防止帧排队。

问题是,在启用了Aero的Windows版本上,输入延迟仍然存在。禁用Aero可以解决这个问题,但我们不想强迫用户这么做。有没有办法防止Aero在我们的应用程序上强制使用VSync,或者只为我们的应用程序禁用Aero?

EN

回答 2

Stack Overflow用户

发布于 2013-01-11 10:30:15

Aero是一个窗口合成系统。合成器本质上引入了渲染延迟,甚至可能有2个帧周期长。克服这个问题的唯一方法就是禁用排序器。

大约两年前,我确实为基于X11合成的系统概述了一个同步方案,其中每个程序将提供关于其渲染时间的“圈速”。基本上,您不能使延迟比渲染帧所需的时间更短。但是,如果您设法将渲染帧的开始延迟到尽可能长的时间,那么集成用户输入直到渲染开始时,您将获得尽可能短的延迟。

这个想法是让排序器收集计时统计信息,合成窗口需要多长时间,以及每个程序渲染一个帧需要多长时间。然后合成器会给每个程序一个“立即开始渲染”的信号,这样渲染就会在V-Sync之前及时完成合成。

不过,到目前为止,我还没有实现这一点。

票数 0
EN

Stack Overflow用户

发布于 2013-01-11 10:36:52

您可以在应用程序运行时使用DwmEnableComposition函数禁用Aero。我不确定这是否是你所说的“仅为我们的应用程序禁用Aero”的意思。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14270174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档