diff --git a/applications/osgconv/PluginQuery.cpp b/applications/osgconv/PluginQuery.cpp index 50115ca74..6bb4f0c5b 100644 --- a/applications/osgconv/PluginQuery.cpp +++ b/applications/osgconv/PluginQuery.cpp @@ -39,3 +39,33 @@ FileNameList osgDB::listAllAvailablePlugins() return pluginFiles; } + + +bool osgDB::queryPlugin(const std::string& fileName, ReaderWriterInfoList& infoList) +{ + if (osgDB::Registry::instance()->loadLibrary(fileName)) + { + const Registry::ReaderWriterList& rwList = osgDB::Registry::instance()->getReaderWriterList(); + for(Registry::ReaderWriterList::const_iterator itr = rwList.begin(); + itr != rwList.end(); + ++itr) + { + const ReaderWriter* rw = itr->get(); + osg::ref_ptr rwi = new ReaderWriterInfo; + rwi->plugin = fileName; + rwi->description = rw->className(); + rwi->protocols = rw->supportedProtocols(); + rwi->extensions = rw->supportedExtensions(); + rwi->options = rw->supportedOptions(); + + infoList.push_back(rwi.get()); + } + + osgDB::Registry::instance()->closeLibrary(fileName); + return true; + } + else + { + return false; + } +} diff --git a/applications/osgconv/PluginQuery.h b/applications/osgconv/PluginQuery.h index b1c0b029d..f9175322b 100644 --- a/applications/osgconv/PluginQuery.h +++ b/applications/osgconv/PluginQuery.h @@ -22,6 +22,20 @@ typedef std::list FileNameList; FileNameList listAllAvailablePlugins(); +class ReaderWriterInfo : public osg::Referenced +{ + public: + + std::string plugin; + std::string description; + ReaderWriter::FormatDescriptionMap protocols; + ReaderWriter::FormatDescriptionMap extensions; + ReaderWriter::FormatDescriptionMap options; +}; + +typedef std::list< osg::ref_ptr > ReaderWriterInfoList; + +bool queryPlugin(const std::string& fileName, ReaderWriterInfoList& infoList); } diff --git a/applications/osgconv/osgconv.cpp b/applications/osgconv/osgconv.cpp index 1fa45a29c..84b8d1b5e 100644 --- a/applications/osgconv/osgconv.cpp +++ b/applications/osgconv/osgconv.cpp @@ -507,7 +507,8 @@ int main( int argc, char **argv ) arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ..."); arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display command line parameters"); arguments.getApplicationUsage()->addCommandLineOption("--help-env","Display environmental variables available"); - arguments.getApplicationUsage()->addCommandLineOption("--fmts","List supported file formats"); + arguments.getApplicationUsage()->addCommandLineOption("--formats","List supported file formats"); + arguments.getApplicationUsage()->addCommandLineOption("--plugins","List database olugins"); // if user request help write it out to cout. @@ -524,7 +525,7 @@ int main( int argc, char **argv ) return 1; } - if (arguments.read("--fmts")) + if (arguments.read("--plugins")) { osgDB::FileNameList plugins = osgDB::listAllAvailablePlugins(); for(osgDB::FileNameList::iterator itr = plugins.begin(); @@ -533,7 +534,55 @@ int main( int argc, char **argv ) { std::cout<<"Plugin "<<*itr<first<<"\t"<second<first<<"\t"<second<first<<"\t"<second<