当前位置: 首页 > 知识库问答 >
问题:

在Aero窗口中禁用垂直同步

葛智敏
2023-03-14

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

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

共有2个答案

洪逸清
2023-03-14

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

谈琦
2023-03-14

Aero是一个窗口合成系统。编辑器本质上会引入渲染延迟,甚至可能长达2帧。克服这个问题的唯一方法是禁用编辑器。

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

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

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

 类似资料:
  • 所以我在我的Mac上安装了VS代码,它运行得非常好。屏幕上只有一条白色的垂直线,有点烦人。 我不确定它应该是某种指南、标尺还是什么。它从一开始就出现了。有办法禁用它吗? 看起来是这样的:

  • 我想在表格上垂直对齐。 从'React'导入React,{Component};从“原生基”导入{Container,Header,Content,Form,Item,Input,Button,Text};从“react native”导入{StyleSheet}; }); 我的应用程序看起来像这样。

  • 我使用GridPane作为舞台的主要场景,布局完全是在FXML文件中定义的。我想有一个按钮在窗口的整个边(即在我的GridPane的所有行上),如下所示: 然而,我就是不能让它工作。更确切地说,它似乎只是按钮不会增加整个高度。我已经为按钮设置了、和,但按钮仍然与其中的文本一样长,并且放在侧面的中心。 我如何使按钮延伸到整个网格窗格?正如开头提到的,我当然已经正确设置了。这并不是按钮没有正确地放置在

  • 问题内容: 我有一个主Frame(称为)和一个弹出式Toplevel(称为)。如何确保用户在“处于活动状态”时无法单击任何内容? 问题答案: 如果您不想隐藏根目录,而只是确保用户只能与弹出窗口进行交互,则可以使用和。 或者 ,您可以使它不可见的根源: 将保留根,但仅可见。 如果您需要它,可以做

  • 我对Vert.x非常陌生,就像几天前一样。我来自一个JAX式的,安逸的世界。我可能大错特错,请指正。 我的问题是:如何使顶点公开自己的REST接口(子路由器),以及如何将其子路由器注册到应用程序的主路由器中? 我尝试过类似的东西,但是当我请求/产品/所有:( } }

  • 我正在使用Visual Studio 2017 RC,当您单击“调试”时弹出的新Chrome窗口会让我非常失望。 “调试”Chrome 窗口存在的问题: 启动/"附加"网站需要很长时间(我认为它附加了我不需要的所有javascript调试,因为我无论如何都使用Chrome开发工具) 不能与其他Chrome窗口对接(作为选项卡) 不记得表单历史。如果我在测试表单,我不能自动完成表单数据,所以我每次都