00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _MATLIB_HXX
00025 #define _MATLIB_HXX
00026
00027
00028 #ifndef __cplusplus
00029 # error This library requires C++
00030 #endif
00031
00032 #include <simgear/compiler.h>
00033
00034 #include <simgear/structure/SGSharedPtr.hxx>
00035
00036 #include <string>
00037 #include <map>
00038 #include <vector>
00039
00040 #include <osg/Geode>
00041
00042 class SGMaterial;
00043 class SGPropertyNode;
00044
00045 using std::string;
00046 using std::map;
00047 using std::vector;
00048 using std::less;
00049
00050 namespace simgear
00051 {
00052 class Effect;
00053 }
00054
00055
00056 class SGMaterialLib {
00057
00058 private:
00059
00060
00061 typedef map < string, SGSharedPtr<SGMaterial> > material_map;
00062 typedef material_map::iterator material_map_iterator;
00063 typedef material_map::const_iterator const_material_map_iterator;
00064
00065 material_map matlib;
00066
00067 public:
00068
00069
00070 SGMaterialLib ( void );
00071
00072
00073 bool load( const string &fg_root, const string& mpath,
00074 SGPropertyNode *prop_root );
00075
00076 SGMaterial *find( const string& material );
00077
00078 material_map_iterator begin() { return matlib.begin(); }
00079 const_material_map_iterator begin() const { return matlib.begin(); }
00080
00081 material_map_iterator end() { return matlib.end(); }
00082 const_material_map_iterator end() const { return matlib.end(); }
00083
00084 static const SGMaterial* findMaterial(const osg::Geode* geode);
00085
00086
00087 ~SGMaterialLib ( void );
00088 };
00089
00090
00091 #endif // _MATLIB_HXX