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