1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
14#ifndef OSGDB_DOTOSGWRAPPER
15#define OSGDB_DOTOSGWRAPPER 1
21#include <osgDB/Output>
30class OSGDB_EXPORT DotOsgWrapper : public osg::Referenced
34 typedef std::vector<std::string> Associates;
35 typedef bool (*ReadFunc)(osg::Object&,osgDB::Input&);
36 typedef bool (*WriteFunc)(const osg::Object&,osgDB::Output&);
44 DotOsgWrapper(osg::Object* proto,
45 const std::string& name,
46 const std::string& associates,
49 ReadWriteMode readWriteMode=READ_AND_WRITE);
52 inline const osg::Object* getPrototype() const { return _prototype.get(); }
53 inline const std::string& getName() const { return _name; }
54 inline const Associates& getAssociates() const { return _associates; }
55 inline ReadFunc getReadFunc() const { return _readFunc; }
56 inline WriteFunc getWriteFunc() const { return _writeFunc; }
57 inline ReadWriteMode getReadWriteMode() const { return _readWriteMode; }
61 /// protected to prevent inappropriate creation of wrappers.
64 /// protected to prevent inappropriate creation of wrappers.
65 DotOsgWrapper(DotOsgWrapper&):osg::Referenced() {}
67 /// protected to prevent wrapper being created on stack.
68 virtual ~DotOsgWrapper() {}
70 osg::ref_ptr<osg::Object> _prototype;
73 Associates _associates;
78 ReadWriteMode _readWriteMode;
83class OSGDB_EXPORT DeprecatedDotOsgWrapperManager : public osg::Referenced
87 DeprecatedDotOsgWrapperManager() {}
89 void addDotOsgWrapper(DotOsgWrapper* wrapper);
90 void removeDotOsgWrapper(DotOsgWrapper* wrapper);
92 osg::Object* readObjectOfType(const osg::Object& compObj,Input& fr);
93 osg::Object* readObjectOfType(const basic_type_wrapper &btw, Input& fr);
95 osg::Object* readObject(Input& fr);
96 osg::Image* readImage(Input& fr);
97 osg::Drawable* readDrawable(Input& fr);
98 osg::Uniform* readUniform(Input& fr);
99 osg::StateAttribute* readStateAttribute(Input& fr);
100 osg::Node* readNode(Input& fr);
101 osg::Shader* readShader(Input& fr);
103 bool writeObject(const osg::Object& obj,Output& fw);
105 typedef std::list<std::string> FileNames;
106 bool getLibraryFileNamesToTry(const std::string& name, FileNames& fileNames);
110 virtual ~DeprecatedDotOsgWrapperManager() {}
112 typedef std::map< std::string, osg::ref_ptr<DotOsgWrapper> > DotOsgWrapperMap;
114 osg::Object* readObject(DotOsgWrapperMap& dowMap,Input& fr);
115 void eraseWrapper(DotOsgWrapperMap& wrappermap,DotOsgWrapper* wrapper);
117 DotOsgWrapperMap _objectWrapperMap;
118 DotOsgWrapperMap _imageWrapperMap;
119 DotOsgWrapperMap _drawableWrapperMap;
120 DotOsgWrapperMap _stateAttrWrapperMap;
121 DotOsgWrapperMap _uniformWrapperMap;
122 DotOsgWrapperMap _nodeWrapperMap;
123 DotOsgWrapperMap _shaderWrapperMap;
125 DotOsgWrapperMap _classNameWrapperMap;
131class OSGDB_EXPORT RegisterDotOsgWrapperProxy
135 RegisterDotOsgWrapperProxy(osg::Object* proto,
136 const std::string& name,
137 const std::string& associates,
138 DotOsgWrapper::ReadFunc readFunc,
139 DotOsgWrapper::WriteFunc writeFunc,
140 DotOsgWrapper::ReadWriteMode readWriteMode=DotOsgWrapper::READ_AND_WRITE);
142 ~RegisterDotOsgWrapperProxy();
145 osg::ref_ptr<DotOsgWrapper> _wrapper;
150class TemplateRegisterDotOsgWrapperProxy : public RegisterDotOsgWrapperProxy, public T
154 TemplateRegisterDotOsgWrapperProxy(osg::Object* proto,
155 const std::string& name,
156 const std::string& associates,
157 DotOsgWrapper::ReadFunc readFunc,
158 DotOsgWrapper::WriteFunc writeFunc,
159 DotOsgWrapper::ReadWriteMode readWriteMode=DotOsgWrapper::READ_AND_WRITE):
160 RegisterDotOsgWrapperProxy(proto, name, associates, readFunc, writeFunc, readWriteMode) {}
165#define REGISTER_DOTOSGWRAPPER(classname) \
166 extern "C" void dotosgwrapper_##classname(void) {} \
167 static osgDB::RegisterDotOsgWrapperProxy dotosgwrapper_proxy_##classname