Revert "Partial fix for crash in SGPropertyNode::fireValueChanged"

This reverts commit f33ad357e9.
This commit is contained in:
Torsten Dreyer 2014-09-05 11:28:28 +02:00
parent 85090180d0
commit 5b9af0c0aa
4 changed files with 10 additions and 58 deletions

View File

@ -1356,28 +1356,6 @@ void Effect::InitializeCallback::doUpdate(osg::Node* node, osg::NodeVisitor* nv)
}
}
void Effect::UpdateCallback::operator()(osg::Node* node, osg::NodeVisitor* nv)
{
EffectGeode* eg = dynamic_cast<EffectGeode*>(node);
if (!eg)
return;
Effect* effect = eg->getEffect();
if (!effect)
return;
for (vector<SGSharedPtr<Updater> >::iterator itr = effect->_extraData.begin(),
end = effect->_extraData.end();
itr != end;
++itr) {
PropertyPoller * poller
= dynamic_cast<PropertyPoller*>(itr->ptr());
if (poller)
poller->pollProperties(effect);
}
traverse(node, nv);
}
bool Effect::Key::EqualTo::operator()(const Effect::Key& lhs,
const Effect::Key& rhs) const
{

View File

@ -73,17 +73,6 @@ private:
bool _initialized;
};
class PropertyPoller
{
public:
PropertyPoller() {};
virtual ~PropertyPoller() {};
virtual void pollProperties(Effect* effect)
{
}
private:
};
class Effect : public osg::Object
{
public:
@ -132,17 +121,6 @@ public:
{
void doUpdate(osg::Node* node, osg::NodeVisitor* nv);
};
friend struct UpdateCallback;
struct UpdateCallback : public osg::NodeCallback
{
UpdateCallback() {}
UpdateCallback(const UpdateCallback& nc, const osg::CopyOp& copyop)
: osg::NodeCallback(nc, copyop)
{
}
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv);
};
protected:
std::vector<SGSharedPtr<Updater> > _extraData;
~Effect();

View File

@ -496,17 +496,19 @@ make_OSGFunctor(Obj* obj, void (Obj::*const func)(const OSGParam&))
template<typename OSGParamType, typename ObjType, typename F>
class ScalarChangeListener
: public SGPropertyChangeListener, public InitializeWhenAdded,
public PropertyPoller,
public Effect::Updater
{
public:
ScalarChangeListener(ObjType* obj, const F& setter,
const std::string& propName)
: _obj(obj), _setter(setter), _propName(propName)
: _obj(obj), _setter(setter)
{
_propName = new std::string(propName);
}
virtual ~ScalarChangeListener()
{
delete _propName;
_propName = 0;
}
void valueChanged(SGPropertyNode* node)
{
@ -514,20 +516,16 @@ public:
}
void initOnAddImpl(Effect* effect, SGPropertyNode* propRoot)
{
_listenProp = makeNode(propRoot, _propName);
// if ( _listenProp.valid() )
// _listenProp->addChangeListener(this, true);
}
void pollProperties(Effect* effect)
{
if( false == _listenProp.valid() ) return;
valueChanged(_listenProp);
SGPropertyNode* listenProp = makeNode(propRoot, *_propName);
delete _propName;
_propName = 0;
if (listenProp)
listenProp->addChangeListener(this, true);
}
private:
SGPropertyNode_ptr _listenProp;
osg::ref_ptr<ObjType> _obj;
F _setter;
std::string _propName;
std::string* _propName;
};
template<typename T, typename Func>

View File

@ -52,9 +52,7 @@ void EffectGeode::setEffect(Effect* effect)
_effect = effect;
if (!_effect)
return;
//TODO: do we leak the callbacks or does the geode own pointer afterwards?
addUpdateCallback(new Effect::InitializeCallback);
addUpdateCallback(new Effect::UpdateCallback);
}
void EffectGeode::resizeGLObjectBuffers(unsigned int maxSize)