//-------------------------------------- void ofSetVerticalSync(bool bSync){ //---------------------------- #ifdef TARGET_WIN32 //---------------------------- if (bSync) { if (WGL_EXT_swap_control) wglSwapIntervalEXT (1); } else { if (WGL_EXT_swap_control) wglSwapIntervalEXT (0); } //---------------------------- #endif //---------------------------- //-------------------------------------- #ifdef TARGET_OSX //-------------------------------------- GLint sync = bSync == true ? 1 : 0; CGLSetParameter (CGLGetCurrentContext(), kCGLCPSwapInterval, &sync); //-------------------------------------- #endif //-------------------------------------- //-------------------------------------- #ifdef TARGET_LINUX //-------------------------------------- void (*swapIntervalExt)(Display *,GLXDrawable, int) = (void (*)(Display *,GLXDrawable, int)) glXGetProcAddress((const GLubyte*) "glXSwapIntervalEXT"); if(swapIntervalExt){ Display *dpy = glXGetCurrentDisplay(); GLXDrawable drawable = glXGetCurrentDrawable(); if (drawable) { swapIntervalExt(dpy, drawable, bSync ? 1 : 0); return; } } void (*swapInterval)(int) = (void (*)(int)) glXGetProcAddress((const GLubyte*) "glXSwapIntervalSGI"); if(!swapInterval) swapInterval = (void (*)(int)) glXGetProcAddress((const GLubyte*) "glXSwapIntervalMESA"); if(swapInterval) swapInterval(bSync ? 1 : 0); //-------------------------------------- #endif //-------------------------------------- }
void glMakeCurrent( Window & _window , GLContext & _glContext , Bool _vSync ) { auto & xWindow = getXWindow( _window ); ::glMakeCurrent( xWindow , _glContext.glxContextUnique.get() ); if( _vSync && swapInterval != nullptr ) { swapInterval( xWindow ); } }
//-------------------------------------- void ofSetVerticalSync(bool bSync){ //---------------------------- #ifdef TARGET_WIN32 //---------------------------- if (bSync) { if (WGL_EXT_swap_control) wglSwapIntervalEXT (1); } else { if (WGL_EXT_swap_control) wglSwapIntervalEXT (0); } //---------------------------- #endif //---------------------------- //-------------------------------------- #ifdef TARGET_OSX //-------------------------------------- GLint sync = bSync == true ? 1 : 0; CGLSetParameter (CGLGetCurrentContext(), kCGLCPSwapInterval, &sync); //-------------------------------------- #endif //-------------------------------------- //-------------------------------------- #ifdef TARGET_LINUX //-------------------------------------- //if (GLEW_GLX_SGI_swap_control) void (*swapInterval)(int) = (void (*)(int)) glXGetProcAddress((const GLubyte*) "glXSwapIntervalSGI"); if(!swapInterval) swapInterval = (void (*)(int)) glXGetProcAddress((const GLubyte*) "glXSwapIntervalMESA"); if(swapInterval) swapInterval(bSync ? 1 : 0); //glXSwapIntervalSGI(bSync ? 1 : 0); //-------------------------------------- #endif //-------------------------------------- }
void GlContext::swapInterval(int interval) const { std::error_code ec; if(!swapInterval(interval, ec)) throw std::system_error(ec, "ny::GlContext::swapInterval"); }
void WindowProfiler::vsync(bool state) { swapInterval(state ? 1 : 0); m_vsync = state; printf("vsync: %s\n", state ? "on" : "off"); }