DotOsgWrapper 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
  2. *
  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.
  7. *
  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.
  12. */
  13. #ifndef OSGDB_DOTOSGWRAPPER
  14. #define OSGDB_DOTOSGWRAPPER 1
  15. #include <osg/ref_ptr>
  16. #include <osg/Object>
  17. #include <osgDB/Input>
  18. #include <osgDB/Output>
  19. #include <string>
  20. #include <vector>
  21. namespace osgDB {
  22. /** deprecated. */
  23. class OSGDB_EXPORT DotOsgWrapper : public osg::Referenced
  24. {
  25. public:
  26. typedef std::vector<std::string> Associates;
  27. typedef bool (*ReadFunc)(osg::Object&,osgDB::Input&);
  28. typedef bool (*WriteFunc)(const osg::Object&,osgDB::Output&);
  29. enum ReadWriteMode
  30. {
  31. READ_AND_WRITE,
  32. READ_ONLY
  33. };
  34. DotOsgWrapper(osg::Object* proto,
  35. const std::string& name,
  36. const std::string& associates,
  37. ReadFunc readFunc,
  38. WriteFunc writeFunc,
  39. ReadWriteMode readWriteMode=READ_AND_WRITE);
  40. inline const osg::Object* getPrototype() const { return _prototype.get(); }
  41. inline const std::string& getName() const { return _name; }
  42. inline const Associates& getAssociates() const { return _associates; }
  43. inline ReadFunc getReadFunc() const { return _readFunc; }
  44. inline WriteFunc getWriteFunc() const { return _writeFunc; }
  45. inline ReadWriteMode getReadWriteMode() const { return _readWriteMode; }
  46. protected:
  47. /// protected to prevent inappropriate creation of wrappers.
  48. DotOsgWrapper() {}
  49. /// protected to prevent inappropriate creation of wrappers.
  50. DotOsgWrapper(DotOsgWrapper&):osg::Referenced() {}
  51. /// protected to prevent wrapper being created on stack.
  52. virtual ~DotOsgWrapper() {}
  53. osg::ref_ptr<osg::Object> _prototype;
  54. std::string _name;
  55. Associates _associates;
  56. ReadFunc _readFunc;
  57. WriteFunc _writeFunc;
  58. ReadWriteMode _readWriteMode;
  59. };
  60. /** deprecated. */
  61. class OSGDB_EXPORT DeprecatedDotOsgWrapperManager : public osg::Referenced
  62. {
  63. public:
  64. DeprecatedDotOsgWrapperManager() {}
  65. void addDotOsgWrapper(DotOsgWrapper* wrapper);
  66. void removeDotOsgWrapper(DotOsgWrapper* wrapper);
  67. osg::Object* readObjectOfType(const osg::Object& compObj,Input& fr);
  68. osg::Object* readObjectOfType(const basic_type_wrapper &btw, Input& fr);
  69. osg::Object* readObject(Input& fr);
  70. osg::Image* readImage(Input& fr);
  71. osg::Drawable* readDrawable(Input& fr);
  72. osg::Uniform* readUniform(Input& fr);
  73. osg::StateAttribute* readStateAttribute(Input& fr);
  74. osg::Node* readNode(Input& fr);
  75. osg::Shader* readShader(Input& fr);
  76. bool writeObject(const osg::Object& obj,Output& fw);
  77. typedef std::list<std::string> FileNames;
  78. bool getLibraryFileNamesToTry(const std::string& name, FileNames& fileNames);
  79. private:
  80. virtual ~DeprecatedDotOsgWrapperManager() {}
  81. typedef std::map< std::string, osg::ref_ptr<DotOsgWrapper> > DotOsgWrapperMap;
  82. osg::Object* readObject(DotOsgWrapperMap& dowMap,Input& fr);
  83. void eraseWrapper(DotOsgWrapperMap& wrappermap,DotOsgWrapper* wrapper);
  84. DotOsgWrapperMap _objectWrapperMap;
  85. DotOsgWrapperMap _imageWrapperMap;
  86. DotOsgWrapperMap _drawableWrapperMap;
  87. DotOsgWrapperMap _stateAttrWrapperMap;
  88. DotOsgWrapperMap _uniformWrapperMap;
  89. DotOsgWrapperMap _nodeWrapperMap;
  90. DotOsgWrapperMap _shaderWrapperMap;
  91. DotOsgWrapperMap _classNameWrapperMap;
  92. };
  93. /** deprecated. */
  94. class OSGDB_EXPORT RegisterDotOsgWrapperProxy
  95. {
  96. public:
  97. RegisterDotOsgWrapperProxy(osg::Object* proto,
  98. const std::string& name,
  99. const std::string& associates,
  100. DotOsgWrapper::ReadFunc readFunc,
  101. DotOsgWrapper::WriteFunc writeFunc,
  102. DotOsgWrapper::ReadWriteMode readWriteMode=DotOsgWrapper::READ_AND_WRITE);
  103. ~RegisterDotOsgWrapperProxy();
  104. protected:
  105. osg::ref_ptr<DotOsgWrapper> _wrapper;
  106. };
  107. /** deprecated. */
  108. template<class T>
  109. class TemplateRegisterDotOsgWrapperProxy : public RegisterDotOsgWrapperProxy, public T
  110. {
  111. public:
  112. TemplateRegisterDotOsgWrapperProxy(osg::Object* proto,
  113. const std::string& name,
  114. const std::string& associates,
  115. DotOsgWrapper::ReadFunc readFunc,
  116. DotOsgWrapper::WriteFunc writeFunc,
  117. DotOsgWrapper::ReadWriteMode readWriteMode=DotOsgWrapper::READ_AND_WRITE):
  118. RegisterDotOsgWrapperProxy(proto, name, associates, readFunc, writeFunc, readWriteMode) {}
  119. };
  120. #define REGISTER_DOTOSGWRAPPER(classname) \
  121. extern "C" void dotosgwrapper_##classname(void) {} \
  122. static osgDB::RegisterDotOsgWrapperProxy dotosgwrapper_proxy_##classname
  123. }
  124. #endif