首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在OpenGL中启用VSYNC

如何在OpenGL中启用VSYNC
EN

Stack Overflow用户
提问于 2010-01-18 04:32:00
回答 3查看 11.5K关注 0票数 4

WGL_EXT_swap_control扩展允许在Windows上执行此操作,但我无法找到任何远程跨平台执行此操作的方法,即通过屏幕刷新同步缓冲区交换。我的应用程序使用GLEW,所以这样提供的东西会更好。对Linux、Mac和Windows的跨平台支持是必要的,但是如果不能设置同步,我的应用程序就不会中断(例如,用户在他的图形驱动程序中强制关闭了同步)。

我将接受程序代码在许多平台上使用GLEW,作为一个有效的答案。

EN

回答 3

Stack Overflow用户

发布于 2010-01-20 18:02:06

找到跨平台解决方案并不容易,这是有原因的。平台最终拥有显示(以及交换行为)。因此,它必然是平台API的一部分(如果公开的话)。不可能有一个跨平台的解决方案。甚至glew在与平台交互时也有一些特定于平台的比特。

现在,您可能会争辩说,所有的平台都应该在其接口的特定部分使用相同的API,但我怀疑您是否会从它们那里得到任何支持。

最后,并不是所有的帧缓冲区都直接显示。如果您碰巧使用的窗口管理系统实际上将框架缓冲区像素与桌面混合(就像Aero在活动时所做的那样),那么无论如何您都无法控制交换行为。

供参考,各API可在主要平台上这样做:

  • wglSwapIntervalEXT
  • glXSwapIntervalSGI
  • AGLSetInteger
票数 6
EN

Stack Overflow用户

发布于 2010-02-26 17:20:09

来自http://www.opengl.org/wiki/Swap_Interval (并间接来自http://www.opengl.org/registry/specs/SGI/swap_control.txt):

在Linux中,

的情况要简单得多。如果GLX_SGI_swap_control存在于glGetString(GL_EXTENSIONS),返回的字符串中,则可以使用glXSwapIntervalSGI(0)禁用vsync,也可以使用glXSwapIntervalSGI(1)启用vsync (也称为垂直同步)。

票数 1
EN

Stack Overflow用户

发布于 2011-12-07 06:53:18

对于OS,请查看http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/ApplicationKit/Classes/NSOpenGLContext_Class/Reference/Reference.html

NSOpenGLCPSwapInterval

设置或获取交换间隔。交换间隔表示为1长。如果交换间隔设置为0(默认值),则flushBuffer方法将尽快执行,而不考虑监视器的垂直刷新速率。如果交换间隔设置为1,则仅在监视器的垂直回溯过程中交换缓冲区。可在MacOSXv10.0及更高版本中使用。

在NSOpenGL.h.中声明

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

https://stackoverflow.com/questions/2083912

复制
相关文章

相似问题

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