WGL_EXT_swap_control扩展允许在Windows上执行此操作,但我无法找到任何甚至远程跨平台执行相同的操作,即同步我的缓冲区交换屏幕刷新。我的应用程序使用GLEW,所以提供的东西更可取。对Linux,Mac和Windows的跨平台支持是必要的,但如果无法设置同步,我的应用程序将不会中断(例如,用户已将其强制关闭在图形驱动程序中)。
我将接受程序代码在许多平台上使用GLEW作为有效答案。
答案 0 :(得分:6)
有一个原因是找到跨平台解决方案并不容易。平台最终拥有显示(以及交换行为)。所以它必然是平台API的一部分(如果暴露)。实际上并不存在跨平台解决方案。在涉及与平台的交互时,即使是glew也有一些特定于平台的位。
现在您可以争辩说,所有平台都应该为其界面的特定位使用相同的API,但我怀疑您是否会从中获得任何吸引力。
最后,并非所有帧缓冲区都直接显示。如果您正在使用实际将帧缓冲像素混合到桌面的窗口管理系统(就像Aero在活动时那样),那么您无论如何都无法控制交换行为。
供参考,在主要平台上执行此操作的各种API:
答案 1 :(得分:1)
来自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 (又名垂直同步)。
答案 2 :(得分:0)
这听起来很讨厌,让你自己想一下Mac OS X上的哪个调用,但this guy似乎有某种解决方案。
答案 3 :(得分:0)
NSOpenGLCPSwapInterval
设置或获取交换间隔。交换 interval表示为一个long。如果交换间隔设置为0 (默认值),flushBuffer方法尽快执行, 不考虑显示器的垂直刷新率。如果 swap interval设置为1,缓冲区仅在交换期间交换 显示器的垂直回扫。适用于Mac OS X v10.0和 后面。
在NSOpenGL.h中声明。