我遵循firebreath opengl firebreath opengl教程,它的工作,但它开始闪烁当我调整大小或滚动页面,所以我搜索了网络的解决方案,但我没有找到任何东西,除了一个小提示
FireBreath提示:在Windows上画画
上面写着:
无论何时接收到RefreshEvent,都必须重新绘制。如果你正在使用一个次要线程来绘制,确保你有某种方式将消息传递给该线程,否则你会得到闪烁
所以我想做的是,找到一种方法来传递重绘消息到绘图线程,我使用Boost等效的ManualResetEvent来强制主线程重绘,但什么也没发生。
我使用的代码:
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
}
}
似乎我记得有人有这个问题,并通过处理WM_ERASEBKGND消息来修复它。你可以试试