15 #ifndef OSGDB_OBJECTWRAPPER
16 #define OSGDB_OBJECTWRAPPER
18 #include <OpenThreads/ReentrantMutex>
19 #include <osgDB/Serializer>
20 #include <osg/ScriptEngine>
27 typedef std::vector< osg::ref_ptr<osg::Object> >
Parameters;
38 void setName(
const std::string& name ) { _name = name; }
39 const std::string&
getName()
const {
return _name; }
41 virtual bool compress( std::ostream&,
const std::string& ) = 0;
42 virtual bool decompress( std::istream&, std::string& ) = 0;
56 typedef std::vector< BaseSerializer::Type >
TypeList;
61 ObjectWrapper( CreateInstanceFunc* createInstanceFunc,
const std::string& name,
62 const std::string& associates );
63 ObjectWrapper( CreateInstanceFunc* createInstanceFunc,
const std::string& domain,
const std::string& name,
64 const std::string& associates );
70 const std::string&
getDomain()
const {
return _domain; }
71 const std::string&
getName()
const {
return _name; }
81 void markSerializerAsRemoved(
const std::string& name );
91 bool readSchema(
const StringList& properties,
const TypeList& types );
92 void writeSchema(
StringList& properties, TypeList& types );
93 void resetSchema() {
if ( _backupSerializers.size()>0 ) _serializers = _backupSerializers; }
95 void addMethodObject(
const std::string& methodName,
MethodObject* mo);
146 typedef std::map< std::string, osg::ref_ptr<ObjectWrapper> >
WrapperMap;
155 typedef std::map< std::string, osg::ref_ptr<BaseCompressor> >
CompressorMap;
180 IntLookupMap::iterator itr = _globalMap.find(group);
181 if ( itr!=_globalMap.end() )
return itr->second;
182 else return _globalMap[
"GL"];
195 const std::string& associates, AddPropFunc func );
209 const std::string& associates, AddPropFunc func );
217 #define REGISTER_OBJECT_WRAPPER(NAME, CREATEINSTANCE, CLASS, ASSOCIATES) \
218 extern "C" void wrapper_serializer_##NAME(void) {} \
219 extern void wrapper_propfunc_##NAME(osgDB::ObjectWrapper*); \
220 static osg::Object* wrapper_createinstancefunc##NAME() { return CREATEINSTANCE; } \
221 static osgDB::RegisterWrapperProxy wrapper_proxy_##NAME( \
222 wrapper_createinstancefunc##NAME, #CLASS, ASSOCIATES, &wrapper_propfunc_##NAME); \
223 typedef CLASS MyClass; \
224 void wrapper_propfunc_##NAME(osgDB::ObjectWrapper* wrapper)
226 #define REGISTER_OBJECT_WRAPPER2(NAME, CREATEINSTANCE, CLASS, CLASSNAME, ASSOCIATES) \
227 extern "C" void wrapper_serializer_##NAME(void) {} \
228 extern void wrapper_propfunc_##NAME(osgDB::ObjectWrapper*); \
229 static osg::Object* wrapper_createinstancefunc##NAME() { return CREATEINSTANCE; } \
230 static osgDB::RegisterWrapperProxy wrapper_proxy_##NAME( \
231 wrapper_createinstancefunc##NAME, CLASSNAME, ASSOCIATES, &wrapper_propfunc_##NAME); \
232 typedef CLASS MyClass; \
233 void wrapper_propfunc_##NAME(osgDB::ObjectWrapper* wrapper)
235 #define REGISTER_CUSTOM_OBJECT_WRAPPER(DOMAIN, NAME, CREATEINSTANCE, CLASS, ASSOCIATES) \
236 extern "C" void wrapper_serializer_##NAME(void) {} \
237 extern void wrapper_propfunc_##NAME(const char*, osgDB::ObjectWrapper*); \
238 static osg::Object* wrapper_createinstancefunc##NAME() { return CREATEINSTANCE; } \
239 static osgDB::RegisterCustomWrapperProxy wrapper_proxy_##NAME( \
240 wrapper_createinstancefunc##NAME, #DOMAIN, #CLASS, ASSOCIATES, &wrapper_propfunc_##NAME); \
241 typedef CLASS MyClass; \
242 void wrapper_propfunc_##NAME(const char* domain, osgDB::ObjectWrapper* wrapper)
244 #define REGISTER_CUSTOM_OBJECT_WRAPPER2(DOMAIN, NAME, CREATEINSTANCE, CLASS, CLASSNAME, ASSOCIATES) \
245 extern "C" void wrapper_serializer_##NAME(void) {} \
246 extern void wrapper_propfunc_##NAME(const char*, osgDB::ObjectWrapper*); \
247 static osg::Object* wrapper_createinstancefunc##NAME() { return CREATEINSTANCE; } \
248 static osgDB::RegisterCustomWrapperProxy wrapper_proxy_##NAME( \
249 wrapper_createinstancefunc##NAME, #DOMAIN, CLASSNAME, ASSOCIATES, &wrapper_propfunc_##NAME); \
250 typedef CLASS MyClass; \
251 void wrapper_propfunc_##NAME(const char* domain, osgDB::ObjectWrapper* wrapper)
263 #define REGISTER_COMPRESSOR(NAME, CLASS) \
264 extern "C" void wrapper_compressor_##CLASS(void) {} \
265 static osgDB::RegisterCompressorProxy compressor_proxy_##CLASS(NAME, new CLASS);
UpdateWrapperVersionProxy(ObjectWrapper *w, int v)
FinishedObjectReadCallbackList _finishedObjectReadCallbacks
std::multimap< std::string, osg::ref_ptr< MethodObject > > MethodObjectMap
std::map< std::string, osg::ref_ptr< BaseCompressor > > CompressorMap
MethodObjectMap _methodObjectMap
SerializerList _backupSerializers
const std::string & getString(const std::string &group, IntLookup::Value value)
int getUpdatedVersion() const
std::vector< osg::ref_ptr< BaseSerializer > > SerializerList
IntLookupMap & getLookupMap()
IntLookup & findLookup(const std::string &group)
CompressorMap _compressors
std::vector< std::string > StringList
std::map< std::string, IntLookup > IntLookupMap
IntLookup::Value getValue(const std::string &group, const std::string &str)
SerializerList _serializers
virtual bool get(const osg::Object &, void *)
const std::string & getName() const
std::vector< osg::ref_ptr< osg::Object > > Parameters
osg::Object * createInstance() const
SerializerList & getSerializerList()
const SerializerList & getSerializerList() const
const StringList & getAssociates() const
osg::ref_ptr< BaseCompressor > _compressor
OpenThreads::ReentrantMutex _wrapperMutex
typedef void(GL_APIENTRY *GLTexImage3DProc)(GLenum target
virtual bool run(void *objectPtr, osg::Parameters &inputParameters, osg::Parameters &outputParameters) const =0
void setName(const std::string &name)
void setUpdatedVersion(int ver)
const std::string & getDomain() const
BaseSerializer * getLastSerializer()
CompressorMap & getCompressorMap()
void addFinishedObjectReadCallback(FinishedObjectReadCallback *forc)
GLint GLenum GLsizei GLsizei GLsizei GLint GLenum GLenum type
osg::ref_ptr< ObjectWrapper > _wrapper
MethodObjectMap & getMethodObjectMap()
virtual void objectRead(osgDB::InputStream &is, osg::Object &obj)=0
osg::ref_ptr< ObjectWrapper > _wrapper
std::vector< osg::ref_ptr< osg::Object > > Parameters
std::map< std::string, osg::ref_ptr< ObjectWrapper > > WrapperMap
std::vector< osg::ref_ptr< FinishedObjectReadCallback > > FinishedObjectReadCallbackList
const CompressorMap & getCompressorMap() const
osg::Object * CreateInstanceFunc()
const WrapperMap & getWrapperMap() const
const IntLookupMap & getLookupMap() const
~UpdateWrapperVersionProxy()
const TypeList & getTypeList() const
const MethodObjectMap & getMethodObjectMap() const
CreateInstanceFunc * _createInstanceFunc
WrapperMap & getWrapperMap()
const std::string & getName() const
std::vector< BaseSerializer::Type > TypeList