垂直同步是涉及到显卡和显示器的一个概念。
当开启了垂直同步,显卡在渲染完成一帧图像之后,显卡需要等待垂直同步信号的到来,
否则无法绘制下一帧。
启用垂直同步,将限制画面更新率和显示器一样,也就是限制了FPS(帧率)。
有关资料(没有完全证实):
在nvidia系列的显卡,垂直同步默认是启用的;
在ATI 系列的显卡,垂直同步默认是不启用的;
在OpenGL中设置垂直同步开关的代码如下:
typedef BOOL (APIENTRY *PFNWGLSWAPINTERVALFARPROC)( int );
PFNWGLSWAPINTERVALFARPROC wglSwapIntervalEXT = 0;
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALFARPROC)wglGetProcAddress("wglSwapIntervalEXT");
wglSwapIntervalEXT(1);//打开垂直分布,限制帧率
wglSwapIntervalEXT(0);//关闭垂直分布,充分发挥显卡的渲染能力
-----------------------------------------------------------------------------------------------------------------------------------------------------------以上摘自【新浪网】
关闭opengl默认的垂直同步机制,让你的FPS飞起来
2010-01-23 19:06
opengl默认情况下,SwapBuffers是和屏幕刷新率同步的,所以你设置的显示器刷新率是60的话,你的opengl程序的FPS只有在60帧。包括nehe的例子程序都是如此,如果要关闭垂直同步功能,需要使用opengl的扩展接口。贴上代码。 typedef void (APIENTRY *PFNWGLEXTSWAPCONTROLPROC) (int); typedef int (*PFNWGLEXTGETSWAPINTERVALPROC) (void); PFNWGLEXTSWAPCONTROLPROC wglSwapIntervalEXT = NULL; PFNWGLEXTGETSWAPINTERVALPROC wglGetSwapIntervalEXT = NULL; // 初始化函数指针接口 bool InitVSync() { char* extensions = (char*)glGetString(GL_EXTENSIONS); if (strstr(extensions,"WGL_EXT_swap_control")) { wglSwapIntervalEXT = (PFNWGLEXTSWAPCONTROLPROC)wglGetProcAddress("wglSwapIntervalEXT"); wglGetSwapIntervalEXT = (PFNWGLEXTGETSWAPINTERVALPROC)wglGetProcAddress("wglGetSwapIntervalEXT"); return true; }
return false; }
// 判断当前状态是否为垂直同步 bool IsVSyncEnabled() { return (wglGetSwapIntervalEXT() > 0); }
// 开启和关闭垂直同步 void SetVSyncState(bool enable) { if (enable) wglSwapIntervalEXT(1); else wglSwapIntervalEXT(0); }
使用方法:
bool isOk = InitVSync(); if (isOk) { SetVSyncState(false); }
这样在初始化的地方使用这些代码可以关闭垂直同步功能,这样FPS可以变的很高。
注意: 需要加入下面的这些代码才能正常编译。
// 包含windows的头文件 #include <windows.h> // 包含opengl需要用到的头文件(完整的vs编辑器中会自带这些文件) #include <gl/gl.h> #include <gl/glu.h> #include <gl/glaux.h> // 设置链接时的库文件 #pragma comment(lib, "OPENGL32.LIB") #pragma comment(lib, "glu32.lib") #pragma comment(lib, "glaux.lib") ---------------------------------------------------------------------------------------------------------------------------------------------------以上 摘自【百度空间】
|