opengl 打开和关闭垂直同步方法
来源:互联网 发布:h3c mac过滤 编辑:程序博客网 时间:2024/04/29 07:28
原文地址:http://blog.csdn.net/husongchao/article/details/6771484
垂直同步是涉及到显卡和显示器的一个概念。
当开启了垂直同步,显卡在渲染完成一帧图像之后,显卡需要等待垂直同步信号的到来,
否则无法绘制下一帧。
启用垂直同步,将限制画面更新率和显示器一样,也就是限制了FPS(帧率)。
有关资料(没有完全证实):
在nvidia系列的显卡,垂直同步默认是启用的;
在ATI
在OpenGL中设置垂直同步开关的代码如下:
typedef BOOL (APIENTRY *PFNWGLSWAPINTERVALFARPRO
PFNWGLSWAPINTERVALFARPRO
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALFARPRO
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 打开和关闭垂直同步方法
- opengl 打开和关闭垂直同步方法
- 垂直同步是什么意思,到底是打开还是关闭垂直同步?
- 打开和关闭HDMI输出方法
- 打开和关闭输入法
- 打开和关闭Activity
- Ubuntu下打开和关闭笔记本触摸板的方法
- MAC OSX打开和关闭MySQL的方法
- 打开和关闭mysql服务的两种方法
- 打开和关闭mysql服务的两种方法
- 关闭和打开Drawerlayout侧拉手势滑动的方法
- mac打开和关闭tomcat的几种方法
- Chapter10-“I/O设备的同步和异步”之打开和关闭设备
- 打开、关闭光驱的方法
- Linux 打开关闭selinux方法
- LCD刷新率和垂直同步的设置
- 垂直同步
- 怎么有效利用碎片时间的?
- android permission
- 我的第一份android工作
- 为什么匿名内部类参数必须为final类型
- 强连通分量
- opengl 打开和关闭垂直同步方法
- java线程之线程同步
- C#数据库操作类的封装
- 程序员心中的“高山”与“大河”(二)
- Java中类名与文件名的关系
- centos配置svn
- UBUNTU系统上安装QT CREATOR及Mysql
- java 解析/拆分 xml
- javascript 深度递归引起的堆栈溢出,终极解决方案