|
有好多同行遇到这个问题,经过一段时间的探索,和向Array神的请教,断定IE浏览器崩溃原因就是线程共享问题。需要添加命令缓存来解决。Pick的双击拣选节点解决问题方法如下:
bool osgWebPlugin:nMouseDown(FB::MouseDownEvent *evt, FB:luginWindow *win)
{
FB::PluginWindowWin* window = reinterpret_cast<FB::PluginWindowWin*>(win);
if (window)
{
if(m_OperHandler) m_OperHandler->addCommond(osg::Vec2(evt->m_x,evt->m_y));
}
return false;
}
在一个handler里面添加命令缓存。。
handler里面处理如下:
std::vector<osg::Vec2> pos;
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(m_mutex);
pos.swap(m_command);
float x = ea.getX();
float y = ea.getY();
if (!viewer->computeIntersections(x,y,m_intersections)) return false;
for(LineIntersecions::iterator hitr = m_intersections.begin();
这样处理 求交时 就不会出现崩溃问题。。。注意最好把交点集合设置为成员变量m_intersections。
我就是这样解决的。希望对大家有所帮助。。 |
|