# include <simgear_config.h>
#endif
-#if defined ( __CYGWIN__ )
-#include <ieeefp.h>
-#endif
-
#include <simgear/compiler.h>
#include <simgear/constants.h>
#include <simgear/structure/exception.hxx>
#include <string.h>
#include <string>
-#include <osg/AlphaFunc>
-#include <osg/BlendFunc>
-#include <osg/CullFace>
-#include <osg/Material>
-#include <osg/Point>
-#include <osg/PointSprite>
-#include <osg/PolygonMode>
-#include <osg/PolygonOffset>
-#include <osg/StateSet>
-#include <osg/TexEnv>
-#include <osg/TexGen>
-#include <osg/Texture2D>
+#include <osgDB/Registry>
#include <simgear/debug/logstream.hxx>
#include <simgear/misc/sg_path.hxx>
#include "mat.hxx"
+#include "Effect.hxx"
+#include "Technique.hxx"
#include "matlib.hxx"
using std::string;
<< ex.getMessage() );
throw;
}
-
+ osg::ref_ptr<osgDB::ReaderWriter::Options> options
+ = new osgDB::ReaderWriter::Options;
+ options->setObjectCacheHint(osgDB::ReaderWriter::Options::CACHE_ALL);
+ options->setDatabasePath(fg_root);
int nMaterials = materials.nChildren();
for (int i = 0; i < nMaterials; i++) {
const SGPropertyNode *node = materials.getChild(i);
}
}
- SGSharedPtr<SGMaterial> m = new SGMaterial(fg_root, node);
+ SGSharedPtr<SGMaterial> m = new SGMaterial(options.get(), node);
vector<SGPropertyNode_ptr>names = node->getChildren("name");
for ( unsigned int j = 0; j < names.size(); j++ ) {
// cerr << "Material " << name << endl;
matlib[name] = m;
m->add_name(name);
- SG_LOG( SG_TERRAIN, SG_INFO, " Loading material "
+ SG_LOG( SG_TERRAIN, SG_DEBUG, " Loading material "
<< names[j]->getStringValue() );
}
} else {
}
const SGMaterial*
-SGMaterialLib::findMaterial(const osg::StateSet* stateSet)
+SGMaterialLib::findMaterial(const osg::Geode* geode)
{
- if (!stateSet)
- return 0;
-
- const osg::Referenced* base = stateSet->getUserData();
- if (!base)
- return 0;
-
- const SGMaterialUserData* matUserData
- = dynamic_cast<const SGMaterialUserData*>(base);
- if (!matUserData)
- return 0;
-
- return matUserData->getMaterial();
+ if (!geode)
+ return 0;
+ const simgear::EffectGeode* effectGeode;
+ effectGeode = dynamic_cast<const simgear::EffectGeode*>(geode);
+ if (!effectGeode)
+ return 0;
+ const simgear::Effect* effect = effectGeode->getEffect();
+ if (!effect)
+ return 0;
+ const SGMaterialUserData* userData;
+ userData = dynamic_cast<const SGMaterialUserData*>(effect->getUserData());
+ if (!userData)
+ return 0;
+ return userData->getMaterial();
}