openGL在MFC下的闪烁问题
2015-11-16 19:23
169 查看
我们知道,在窗口中拖动一个图形的时候,由于边画边显示,会出现闪烁的现象。在GDI中解决这个问题较为复杂,通过在内存中生成一个内存DC,绘画时让画笔在内存DC中画,画完后一次用Bitblt将内存DC“贴”到显示器上,就可解决闪烁的问题。在OpenGL中,我们是通过双缓存来解决这个问题的。一般来说,双缓存在图形工作软件中是很普遍的。双缓存是两个缓存,一个前台缓存、一个后台缓存。绘图先在后台缓存中画,画完后,交换到前台缓存,这样就不会有闪烁现象了。
A:将像素格式定义成支持双缓存的 pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_STEREO_DONTCARE;
B:在物体绘制完成后加入这样一行代码SwapBuffers(hDC),到此OpenGL绘图已经没有闪烁了,但MFC还会反复的重绘背景产生闪烁
C:处理消息循环OnEraseBkgnd,使其不要重绘背景
BOOL CoglView::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return TRUE;
//return CView::OnEraseBkgnd(pDC);
}
这样就彻底解决了闪烁问题!
A:将像素格式定义成支持双缓存的 pixelDesc.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER | PFD_STEREO_DONTCARE;
B:在物体绘制完成后加入这样一行代码SwapBuffers(hDC),到此OpenGL绘图已经没有闪烁了,但MFC还会反复的重绘背景产生闪烁
C:处理消息循环OnEraseBkgnd,使其不要重绘背景
BOOL CoglView::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return TRUE;
//return CView::OnEraseBkgnd(pDC);
}
这样就彻底解决了闪烁问题!
相关文章推荐
- Hadoop伪分布式搭建
- 将本地光盘做成yum源
- clientHeight、offsetHeight、scrollTop
- 获取网页被卷去的高度scrollTop
- CentOS 7-Zip安装与命令用法
- 在 Linux 下用户空间与内核空间数据交换的方式,第 1 部分: 内核启动参数、模块参数与sysfs、sysctl、系统调用和netlink
- centos安装jdk,tomcat
- [置顶] Docker镜像与容器命令
- OpenGL中x64 debug下bmp图像导入出错解决方案
- 【问题】Server Tomcat v6.0 Server at localhost was unable to start within 45 seconds
- [前端] centos下搭建nodejs
- 笔记本升级--固态硬盘安装双系统win10-CentOS
- java 在centos6.5+eclipse环境下调用opencv实现sift算法
- Tomcat自动启动脚本
- 【初级篇】Linux下部署DNS域名解析服务
- lunux 启动 tomcat
- linux进程间的通信机制--信号量互斥
- centos7 配置多个Tomcat
- Linux命令日积月累
- Linux-sudoers设置方法