17 #include <osg/Referenced>
19 #include <osg/ref_ptr>
29 class UserDataContainer;
35 #define _ADDQUOTES(def) #def
36 #define ADDQUOTES(def) _ADDQUOTES(def)
42 #define META_Object(library,name) \
43 virtual osg::Object* cloneType() const { return new name (); } \
44 virtual osg::Object* clone(const osg::CopyOp& copyop) const { return new name (*this,copyop); } \
45 virtual bool isSameKindAs(const osg::Object* obj) const { return dynamic_cast<const name *>(obj)!=NULL; } \
46 virtual const char* libraryName() const { return #library; }\
47 virtual const char* className() const { return #name; }
50 #define OSG_INIT_SINGLETON_PROXY(ProxyName, Func) static struct ProxyName{ ProxyName() { Func; } } s_##ProxyName;
67 inline explicit Object(
bool threadSafeRefUnref):
Referenced(threadSafeRefUnref),_dataVariance(UNSPECIFIED),_userDataContainer(0) {}
87 virtual const char* libraryName()
const = 0;
91 virtual const char* className()
const = 0;
94 std::string
getCompoundClassName()
const {
return std::string(libraryName()) + std::string(
"::") + std::string(className()); }
131 virtual void setThreadSafeRefUnref(
bool threadSafe);
134 virtual void setName(
const std::string& name ) { _name = name; }
139 if (name) setName(std::string(name));
140 else setName(std::string());
144 inline const std::string&
getName()
const {
return _name; }
194 virtual const Referenced* getUserData()
const;
201 bool getUserValue(
const std::string& name, T& value)
const;
207 void setUserValue(
const std::string& name,
const T& value);
248 T* ptr =
dynamic_cast<T*
>(obj.
get());
256 OSG_WARN<<
"Warning: osg::clone(const T*, osg::CopyOp&) cloned object not of type T, returning NULL."<<std::endl;
262 OSG_WARN<<
"Warning: osg::clone(const T*, osg::CopyOp&) passed null object to clone, returning NULL."<<std::endl;
273 newObject->setName(name);
278 OSG_WARN<<
"Warning: osg::clone(const T*, const std::string&, const osg::CopyOp) passed null object to clone, returning NULL."<<std::endl;
290 T* ptr =
dynamic_cast<T*
>(obj.
get());
298 OSG_WARN<<
"Warning: osg::cloneType(const T*) cloned object not of type T, returning NULL."<<std::endl;
304 OSG_WARN<<
"Warning: osg::cloneType(const T*) passed null object to clone, returning NULL."<<std::endl;
bool getUserValue(const osg::NodePath &nodepath, const std::string &name, T &value)
osg::UserDataContainer * _userDataContainer
virtual void releaseGLObjects(osg::State *=0) const
virtual void resizeGLObjectBuffers(unsigned int)
virtual const Node * asNode() const
virtual Object * cloneType() const =0
T * clone(const T *t, const osg::CopyOp ©op=osg::CopyOp::SHALLOW_COPY)
void setDataVariance(DataVariance dv)
DataVariance getDataVariance() const
virtual const Uniform * asUniform() const
const osg::UserDataContainer * getUserDataContainer() const
virtual const StateAttribute * asStateAttribute() const
const std::string & getName() const
virtual void setName(const std::string &name)
T * cloneType(const T *t)
virtual Object * clone(const CopyOp &) const =0
virtual NodeVisitor * asNodeVisitor()
std::string getCompoundClassName() const
virtual Uniform * asUniform()
void setName(const char *name)
virtual const NodeVisitor * asNodeVisitor() const
DataVariance _dataVariance
osg::UserDataContainer * getUserDataContainer()
META_Object(osg, DummyObject) protected
DummyObject(const DummyObject &, const osg::CopyOp &)
virtual void computeDataVariance()
virtual StateAttribute * asStateAttribute()
virtual bool isSameKindAs(const Object *) const
Object(bool threadSafeRefUnref)