]> git.mxchange.org Git - simgear.git/commitdiff
Revert "Partial fix for crash in SGPropertyNode::fireValueChanged"
authorTorsten Dreyer <torsten@t3r.de>
Fri, 5 Sep 2014 09:28:28 +0000 (11:28 +0200)
committerTorsten Dreyer <torsten@t3r.de>
Fri, 5 Sep 2014 09:28:28 +0000 (11:28 +0200)
This reverts commit f33ad357e928b5210c87cb8977d3cc88deba811b.

simgear/scene/material/Effect.cxx
simgear/scene/material/Effect.hxx
simgear/scene/material/EffectBuilder.hxx
simgear/scene/material/EffectGeode.cxx

index f94be67ac615270af87030291aa0640f98f9a1e7..7d961af47f51d3ed14e2b3332fd902aa5b0f9c32 100644 (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
 {
index 346c52c2c39aa1674ac34f2800fee870725c282a..0966dc1aa63e8b7d9bcba911b90e44af12cf4f64 100644 (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();
index 52e2cf1c98614a2e0c4dee3ea65ff3bf679d7584..a919f10b3398d5380e28197e40d0b0e80777f3a3 100644 (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>
index 2355bb67f78750ad5acd79139b1769073bca7303..c296763928ae90d712183ed06820e07d12f1691e 100644 (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)