代码之家  ›  专栏  ›  技术社区  ›  Tronic

如何在OpenGL中启用VSYNC

  •  3
  • Tronic  · 技术社区  · 16 年前

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

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

    4 回复  |  直到 16 年前
        1
  •  6
  •   Bahbar    16 年前

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

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

    • wglSwapIntervalEXT
    • glXSwapIntervalSGI
    • AGLSetInteger
        2
  •  1
  •   MSN    16 年前

    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

        3
  •  0
  •   Danny Dulai    14 年前

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

    设置或获取交换间隔。互换 (默认值),flushBuffer方法会尽快执行, 不考虑监视器的垂直刷新率。如果 监视器的垂直回程。在Mac OS X v10.0和

    在NSOpenGL.h中声明。