最近笔者在尝试使用SwapBuffers(hdc);函数时,遇到了严重的效率问题,通过查阅资料发现了是因为windows中开启垂直同步
的原因,由于垂直同步会强制画面的刷新率匹配显示器的刷新率,因此开启垂直同步之后,若画面的刷新率快于显示器的刷新率,就会发生阻塞强行等待一段时间一匹配显示器的刷新率,因此造成了画面严重卡顿的问题。
windows开启垂直同步的方法:
// member call
typedef void (APIENTRY *PFNWGLEXTSWAPCONTROLPROC) (int);
typedef int (*PFNWGLEXTGETSWAPINTERVALPROC) (void);
PFNWGLEXTSWAPCONTROLPROC wglSwapIntervalEXT = NULL;
PFNWGLEXTGETSWAPINTERVALPROC wglGetSwapIntervalEXT = NULL;// init VSYNC setting
char* extensions = (char*)glGetString(GL_EXTENSIONS);
if (strstr(extensions,"WGL_EXT_swap_control")) {wglSwapIntervalEXT = (PFNWGLEXTSWAPCONTROLPROC) wglGetProcAddress("wglSwapIntervalEXT");wglGetSwapIntervalEXT = (PFNWGLEXTGETSWAPINTERVALPROC) wglGetProcAddress("wglGetSwapIntervalEXT");
}// DisableVSync
wglSwapIntervalEXT(0);
参考资料:
Re: How to use wglSwapBuffers?
Why SwapBuffers slows down the performance?
opengl 打开和关闭垂直同步方法