解决OpenGL在MFC下的闪烁问题

The flicker occurs because Windows paints the backgroundfirst and then OpenGL next. Since we have OpenGL doing the job of clearing thebackground, we'll turn off Windows from clearing the background. This can bedone by editing OnEraseBkgnd() member function appropriately. We do this byreturning true from the function.

 BOOLCOpenGLView::OnEraseBkgnd(CDC* pDC)

{

    // TODO: Addyour message handler code here and/or call default

    //comment outthe original call

    //returnCView::OnEraseBkgnd(pDC);

    //Tell Windowsnot to erase the background

    return TRUE;

}

 

我们知道,在窗口中拖动一个图形的时候,由于边画边显示,会出现闪烁的现象。在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);

}

这样就彻底解决了闪烁问题!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值