1

我遵循了firebreath opengl Firebreath Opengl教程,它可以工作,但是当我调整页面大小或滚动页面时它开始闪烁,所以我在网上搜索了一个解决方案,但除了一个小提示之外我没有找到任何东西

FireBreath 技巧:在 Windows 上绘图

它说:

每当收到 RefreshEvent 时,您必须重绘。如果您使用辅助线程进行绘图,请确保您有某种方式将消息传递给该线程,否则您会闪烁。

为了让我尝试做的事情,找到一种将重绘消息传递给绘图线程的方法,我使用了相当于 ManualResetEvent 的 Boost来强制主线程重绘,但什么也没发生。

我使用的代码:

bool threadedOpenGLTestPlugin::draw( FB::RefreshEvent *evt, FB::PluginWindow* win )
{
   Event.Set(); // Event is Boost equivalent of ManualResetEvent
   //Refresh Events... nothing todo since the opengl is running in it's own thread
   return true;
}
void threadedOpenGLTestPlugin::drawThreaded()
{
   while(true)
   {
      Event.Wait(30);// the event waits for 30 milisec or for event fired by the threadedOpenGLTestPlugin::draw function
      Event.Reset();
      //.......... drawing loop 
   }
}
4

1 回答 1

1

好像我记得有人遇到这个问题并通过处理WM_ERASEBKGND消息来解决它。你可以试试。

于 2013-01-18T22:44:09.833 回答