opengl 打开和关闭垂直同步方法
2012-08-21 16:10
2176 查看
原文地址:/article/10548145.html
垂直同步是涉及到显卡和显示器的一个概念。
当开启了垂直同步,显卡在渲染完成一帧图像之后,显卡需要等待垂直同步信号的到来,
否则无法绘制下一帧。
启用垂直同步,将限制画面更新率和显示器一样,也就是限制了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
垂直同步是涉及到显卡和显示器的一个概念。
当开启了垂直同步,显卡在渲染完成一帧图像之后,显卡需要等待垂直同步信号的到来,
否则无法绘制下一帧。
启用垂直同步,将限制画面更新率和显示器一样,也就是限制了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") --------------------------------------------------------------------------------------------------------------------------------------------------- |
相关文章推荐
- opengl 打开和关闭垂直同步方法
- opengl 打开和关闭垂直同步方法
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 子窗口在用window.open()方法打开后,如何关闭后刷新父窗口
- 关于windows 下每次打开IE 8都弹出欢迎使用Internet Explorer 8 弹窗的关闭方法
- 打开和关闭mysql服务的两种方法
- 关闭和打开Drawerlayout侧拉手势滑动的方法
- 错误:“已有打开的与此命令相关联的 DataReader,必须首先将它关闭”的解决方法。
- IE8打开某个页面提示“Internet Explorer已经为了帮助保护您的计算机而关闭此网页”的解决方法
- [转]兼容IE和Firefox的打开新窗口,关闭父窗口,不提示解决方法
- Ubuntu下打开和关闭笔记本触摸板的方法
- 打开某个AVI文件,explorer.exe遇到问题需要关闭的解决方法
- 使用C#打开新窗口关闭旧窗口的方法;winform中防止重复打开多个相同子窗体
- vmware异常关闭后无法再次打开的解决方法
- easyUI 环境下,关闭打开的窗口的方法
- 使用js打开和关闭窗体的几种方法
- Android系统移植与调试之------->增加一个双击物理按键打开和关闭闪光灯并将闪光灯状态同步到下拉菜单中
- Word2010 打开/关闭 提示 已停止工作解决方法
- 使用jquery reveal打开和关闭弹出框的JS方法。
- AutoCAD 2012打开后闪一下自动关闭的解决方法