1
0
Fork 0
This commit is contained in:
Torsten Dreyer 2011-06-23 22:23:35 +02:00
commit cc15056a74
2 changed files with 30 additions and 15 deletions

View file

@ -1392,7 +1392,7 @@ struct OptionDesc {
{"enable-wireframe", false, OPTION_BOOL, "/sim/rendering/wireframe", true, "", 0 }, {"enable-wireframe", false, OPTION_BOOL, "/sim/rendering/wireframe", true, "", 0 },
{"disable-terrasync", false, OPTION_BOOL, "/sim/terrasync/enabled", false, "", 0 }, {"disable-terrasync", false, OPTION_BOOL, "/sim/terrasync/enabled", false, "", 0 },
{"enable-terrasync", false, OPTION_BOOL, "/sim/terrasync/enabled", true, "", 0 }, {"enable-terrasync", false, OPTION_BOOL, "/sim/terrasync/enabled", true, "", 0 },
{"terrasync-dir", false, OPTION_STRING, "/sim/terrasync/scenery-dir", false, "", 0 }, {"terrasync-dir", true, OPTION_STRING, "/sim/terrasync/scenery-dir", false, "", 0 },
{"geometry", true, OPTION_FUNC, "", false, "", fgOptGeometry }, {"geometry", true, OPTION_FUNC, "", false, "", fgOptGeometry },
{"bpp", true, OPTION_FUNC, "", false, "", fgOptBpp }, {"bpp", true, OPTION_FUNC, "", false, "", fgOptBpp },
{"units-feet", false, OPTION_STRING, "/sim/startup/units", false, "feet", 0 }, {"units-feet", false, OPTION_STRING, "/sim/startup/units", false, "feet", 0 },

View file

@ -2,9 +2,11 @@
#include <cstdlib> #include <cstdlib>
#include <osg/ArgumentParser> #include <osg/ArgumentParser>
#include <osg/Fog>
#include <osgDB/ReadFile> #include <osgDB/ReadFile>
#include <osgViewer/Viewer> #include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers> #include <osgViewer/ViewerEventHandlers>
#include <osgViewer/Renderer>
#include <osgGA/KeySwitchMatrixManipulator> #include <osgGA/KeySwitchMatrixManipulator>
#include <osgGA/TrackballManipulator> #include <osgGA/TrackballManipulator>
#include <osgGA/FlightManipulator> #include <osgGA/FlightManipulator>
@ -14,6 +16,7 @@
#include <simgear/props/props.hxx> #include <simgear/props/props.hxx>
#include <simgear/props/props_io.hxx> #include <simgear/props/props_io.hxx>
#include <simgear/misc/sg_path.hxx> #include <simgear/misc/sg_path.hxx>
#include <simgear/scene/material/EffectCullVisitor.hxx>
#include <simgear/scene/material/matlib.hxx> #include <simgear/scene/material/matlib.hxx>
#include <simgear/scene/tgdb/SGReaderWriterBTGOptions.hxx> #include <simgear/scene/tgdb/SGReaderWriterBTGOptions.hxx>
#include <simgear/scene/tgdb/userdata.hxx> #include <simgear/scene/tgdb/userdata.hxx>
@ -26,8 +29,7 @@ public:
virtual osg::Node *loadTileModel(const string& modelPath, bool) virtual osg::Node *loadTileModel(const string& modelPath, bool)
{ {
try { try {
SGSharedPtr<SGPropertyNode> prop = new SGPropertyNode; return simgear::SGModelLib::loadModel(modelPath, simgear::getPropertyRoot());
return simgear::SGModelLib::loadModel(modelPath, prop);
} catch (...) { } catch (...) {
std::cerr << "Error loading \"" << modelPath << "\"" << std::endl; std::cerr << "Error loading \"" << modelPath << "\"" << std::endl;
return 0; return 0;
@ -42,7 +44,6 @@ main(int argc, char** argv)
// pulled in by the linker ... // pulled in by the linker ...
// FIXME: make that more explicit clear and call an initialization function // FIXME: make that more explicit clear and call an initialization function
simgear::ModelRegistry::instance(); simgear::ModelRegistry::instance();
sgUserDataInit(0);
DummyLoadHelper dummyLoadHelper; DummyLoadHelper dummyLoadHelper;
simgear::TileEntry::setModelLoadHelper(&dummyLoadHelper); simgear::TileEntry::setModelLoadHelper(&dummyLoadHelper);
@ -51,13 +52,11 @@ main(int argc, char** argv)
// construct the viewer. // construct the viewer.
osgViewer::Viewer viewer(arguments); osgViewer::Viewer viewer(arguments);
// ... for some reason, get rid of that FIXME!
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);
// set up the camera manipulators. // set up the camera manipulators.
osgGA::KeySwitchMatrixManipulator* keyswitchManipulator; osgGA::KeySwitchMatrixManipulator* keyswitchManipulator;
keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator; keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;
keyswitchManipulator->addMatrixManipulator('1', "Trackball", keyswitchManipulator->addMatrixManipulator('1', "Trackball",
new osgGA::TrackballManipulator); new osgGA::TrackballManipulator);
keyswitchManipulator->addMatrixManipulator('2', "Flight", keyswitchManipulator->addMatrixManipulator('2', "Flight",
@ -66,16 +65,30 @@ main(int argc, char** argv)
new osgGA::DriveManipulator); new osgGA::DriveManipulator);
keyswitchManipulator->addMatrixManipulator('4', "Terrain", keyswitchManipulator->addMatrixManipulator('4', "Terrain",
new osgGA::TerrainManipulator); new osgGA::TerrainManipulator);
viewer.setCameraManipulator(keyswitchManipulator); viewer.setCameraManipulator(keyswitchManipulator);
// Usefull stats // Usefull stats
viewer.addEventHandler(new osgViewer::HelpHandler); viewer.addEventHandler(new osgViewer::HelpHandler);
viewer.addEventHandler(new osgViewer::StatsHandler); viewer.addEventHandler(new osgViewer::StatsHandler);
// Same FIXME ... viewer.addEventHandler(new osgViewer::ThreadingHandler);
// viewer.addEventHandler(new osgViewer::ThreadingHandler);
viewer.addEventHandler(new osgViewer::LODScaleHandler); viewer.addEventHandler(new osgViewer::LODScaleHandler);
viewer.addEventHandler(new osgViewer::ScreenCaptureHandler); viewer.addEventHandler(new osgViewer::ScreenCaptureHandler);
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
// Sigh, we need our own cull visitor ...
osg::Camera* camera = viewer.getCamera();
osgViewer::Renderer* renderer = static_cast<osgViewer::Renderer*>(camera->getRenderer());
for (int j = 0; j < 2; ++j) {
osgUtil::SceneView* sceneView = renderer->getSceneView(j);
sceneView->setCullVisitor(new simgear::EffectCullVisitor);
}
// Shaders expect valid fog
osg::Fog* fog = new osg::Fog;
fog->setMode(osg::Fog::EXP2);
fog->setColor(osg::Vec4(1, 1, 1, 1));
fog->setDensity(1e-6);
camera->getOrCreateStateSet()->setAttribute(fog);
const char *fg_root_env = std::getenv("FG_ROOT"); const char *fg_root_env = std::getenv("FG_ROOT");
std::string fg_root; std::string fg_root;
@ -110,6 +123,7 @@ main(int argc, char** argv)
} }
SGSharedPtr<SGPropertyNode> props = new SGPropertyNode; SGSharedPtr<SGPropertyNode> props = new SGPropertyNode;
sgUserDataInit(props.get());
try { try {
SGPath preferencesFile = fg_root; SGPath preferencesFile = fg_root;
preferencesFile.append("preferences.xml"); preferencesFile.append("preferences.xml");
@ -130,14 +144,15 @@ main(int argc, char** argv)
std::cerr << "Problems loading FlightGear materials.\n" std::cerr << "Problems loading FlightGear materials.\n"
<< "Probably FG_ROOT is not properly set." << std::endl; << "Probably FG_ROOT is not properly set." << std::endl;
} }
simgear::SGModelLib::init(fg_root, props);
// The file path list must be set in the registry. // The file path list must be set in the registry.
osgDB::Registry::instance()->getDataFilePathList() = filePathList; osgDB::Registry::instance()->getDataFilePathList() = filePathList;
SGReaderWriterBTGOptions* btgOptions = new SGReaderWriterBTGOptions; SGReaderWriterBTGOptions* btgOptions = new SGReaderWriterBTGOptions;
btgOptions->getDatabasePathList() = filePathList; btgOptions->getDatabasePathList() = filePathList;
btgOptions->setMatlib(ml); btgOptions->setMatlib(ml);
// read the scene from the list of file specified command line args. // read the scene from the list of file specified command line args.
osg::ref_ptr<osg::Node> loadedModel; osg::ref_ptr<osg::Node> loadedModel;
loadedModel = osgDB::readNodeFiles(arguments, btgOptions); loadedModel = osgDB::readNodeFiles(arguments, btgOptions);
@ -148,9 +163,9 @@ main(int argc, char** argv)
<< ": No data loaded" << std::endl; << ": No data loaded" << std::endl;
return EXIT_FAILURE; return EXIT_FAILURE;
} }
// pass the loaded scene graph to the viewer. // pass the loaded scene graph to the viewer.
viewer.setSceneData(loadedModel.get()); viewer.setSceneData(loadedModel.get());
return viewer.run(); return viewer.run();
} }