如何在OpenGL中启用VSYNC

Tro*_*nic 3 c++ opengl vertical-sync vsync

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

我将接受程序代码在许多平台上使用GLEW作为有效答案.

Bah*_*bar 6

找到跨平台解决方案并不容易.平台最终拥有显示(以及交换行为).所以它必然是平台API的一部分(如果暴露).实际上并不存在跨平台解决方案.当涉及到与平台的交互时,甚至glew也有一些特定于平台的位.

现在您可以争辩说,所有平台都应该为其界面的特定位使用相同的API,但我怀疑您是否会从中获得任何牵引力.

最后,并非所有帧缓冲区都直接显示.如果您正在使用实际将帧缓冲像素混合到桌面的窗口管理系统(就像Aero在活动时那样),那么您无法控制交换行为.

供参考,在主要平台上执行此操作的各种API:

  • wglSwapIntervalEXT
  • glXSwapIntervalSGI
  • AGLSetInteger