我按照firebreath opengl Firebreath Opengl教程进行操作,但是当我调整页面大小或滚动页面时它会开始闪烁,所以我在网上搜索了一个解决方案,但除了一个小提示之外我没有找到任何东西< / p>
FireBreath Tips: Drawing on Windows
它说:
每当收到RefreshEvent时,您都必须重绘。如果您使用辅助线程进行绘制,请确保您有某种方式将消息传递给该线程,否则您将会闪烁。
所以我试图做的,找到一种方法将重绘消息传递给绘图线程,我使用Boost equivalent of 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
}
}