Changeset 9549
- Timestamp:
- 01/26/09 16:16:24 (4 years ago)
- Location:
- OpenSceneGraph/trunk
- Files:
-
- 5 modified
-
include/osg/Referenced (modified) (3 diffs)
-
include/osg/State (modified) (5 diffs)
-
src/osg/Referenced.cpp (modified) (2 diffs)
-
src/osg/State.cpp (modified) (1 diff)
-
src/osgWrappers/osg/State.cpp (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
OpenSceneGraph/trunk/include/osg/Referenced
r9343 r9549 90 90 91 91 /** Add a Observer that is observing this object, notify the Observer when this object gets deleted.*/ 92 void addObserver(Observer* observer) ;92 void addObserver(Observer* observer) const; 93 93 94 94 /** Add a Observer that is observing this object, notify the Observer when this object gets deleted.*/ 95 void removeObserver(Observer* observer) ;95 void removeObserver(Observer* observer) const; 96 96 97 97 public: … … 122 122 struct ObserverSetData; 123 123 124 OpenThreads::AtomicPtr _observerSetDataPtr;124 mutable OpenThreads::AtomicPtr _observerSetDataPtr; 125 125 126 126 mutable OpenThreads::Atomic _refCount; … … 131 131 mutable int _refCount; 132 132 133 void*_observers;133 mutable void* _observers; 134 134 #endif 135 135 }; -
OpenSceneGraph/trunk/include/osg/State
r9447 r9549 20 20 #include <osg/Uniform> 21 21 #include <osg/BufferObject> 22 #include <osg/observer_ptr> 22 23 23 24 #include <osg/FrameStamp> … … 85 86 * \c captureCurrentState() and \c getModelViewMatrix()). 86 87 */ 87 class OSG_EXPORT State : public Referenced 88 class OSG_EXPORT State : public Referenced, public Observer 88 89 { 89 90 public : … … 961 962 962 963 963 void setLastAppliedProgramObject(const Program::PerContextProgram* program) { if (_lastAppliedProgramObject!=program) { _lastAppliedProgramObject = program; if (program) _appliedProgramObjectSet.insert(program); } } 964 const Program::PerContextProgram* getLastAppliedProgramObject() const { return _lastAppliedProgramObject; } 964 inline void setLastAppliedProgramObject(const Program::PerContextProgram* program) 965 { 966 if (_lastAppliedProgramObject!=program) 967 { 968 _lastAppliedProgramObject = program; 969 if (program && _appliedProgramObjectSet.count(program)==0) 970 { 971 _appliedProgramObjectSet.insert(program); 972 program->addObserver(this); 973 } 974 } 975 } 976 inline const Program::PerContextProgram* getLastAppliedProgramObject() const { return _lastAppliedProgramObject; } 965 977 966 978 inline GLint getUniformLocation( const std::string& name ) const { return _lastAppliedProgramObject ? _lastAppliedProgramObject->getUniformLocation(name) : -1; } … … 1065 1077 void initializeExtensionProcs(); 1066 1078 1079 virtual void objectDeleted(void* object); 1080 1067 1081 protected: 1068 1082 … … 1207 1221 typedef std::vector<ref_ptr<const Matrix> > MatrixStack; 1208 1222 1209 typedef std::set< osg::ref_ptr<const Program::PerContextProgram> >AppliedProgramObjectSet;1223 typedef std::set<const Program::PerContextProgram* > AppliedProgramObjectSet; 1210 1224 1211 1225 ModeMap _modeMap; -
OpenSceneGraph/trunk/src/osg/Referenced.cpp
r9343 r9549 310 310 } 311 311 312 void Referenced::addObserver(Observer* observer) 312 void Referenced::addObserver(Observer* observer) const 313 313 { 314 314 #if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS) … … 338 338 } 339 339 340 void Referenced::removeObserver(Observer* observer) 340 void Referenced::removeObserver(Observer* observer) const 341 341 { 342 342 #if defined(_OSG_REFERENCED_USE_ATOMIC_OPERATIONS) -
OpenSceneGraph/trunk/src/osg/State.cpp
r9469 r9549 91 91 State::~State() 92 92 { 93 for(AppliedProgramObjectSet::iterator itr = _appliedProgramObjectSet.begin(); 94 itr != _appliedProgramObjectSet.end(); 95 ++itr) 96 { 97 (*itr)->removeObserver(this); 98 } 99 } 100 101 void State::objectDeleted(void* object) 102 { 103 const Program::PerContextProgram* ppcp = reinterpret_cast<const Program::PerContextProgram*>(object); 104 AppliedProgramObjectSet::iterator itr = _appliedProgramObjectSet.find(ppcp); 105 if (itr != _appliedProgramObjectSet.end()) 106 { 107 osg::notify(osg::NOTICE)<<"Removing _appliedProgramObjectSet entry "<<ppcp<<std::endl; 108 _appliedProgramObjectSet.erase(itr); 109 } 93 110 } 94 111 -
OpenSceneGraph/trunk/src/osgWrappers/osg/State.cpp
r9449 r9549 44 44 I_DeclaringFile("osg/State"); 45 45 I_BaseType(osg::Referenced); 46 I_BaseType(osg::Observer); 46 47 I_Constructor0(____State, 47 48 "", … … 716 717 __void__initializeExtensionProcs, 717 718 "Initialize extension used by osg:State. ", 719 ""); 720 I_Method1(void, objectDeleted, IN, void *, object, 721 Properties::VIRTUAL, 722 __void__objectDeleted__void_P1, 723 "", 718 724 ""); 719 725
