From b12069e14c0fc04bdd9345b222e9a985b855e547 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 9 May 2008 17:08:31 +0000 Subject: [PATCH] Initial cut of file cache population app --- applications/CMakeLists.txt | 1 + applications/osgfilecache/CMakeLists.txt | 5 + applications/osgfilecache/osgfilecache.cpp | 117 +++++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100644 applications/osgfilecache/CMakeLists.txt create mode 100644 applications/osgfilecache/osgfilecache.cpp diff --git a/applications/CMakeLists.txt b/applications/CMakeLists.txt index 6571315c4..0e56415cc 100644 --- a/applications/CMakeLists.txt +++ b/applications/CMakeLists.txt @@ -30,6 +30,7 @@ ADD_SUBDIRECTORY(osgviewer) ADD_SUBDIRECTORY(osgarchive) ADD_SUBDIRECTORY(osgconv) ADD_SUBDIRECTORY(osgversion) +ADD_SUBDIRECTORY(osgfilecache) #REWRITE_CMAKELIST(ADD_OSG_EXAMPLE) diff --git a/applications/osgfilecache/CMakeLists.txt b/applications/osgfilecache/CMakeLists.txt new file mode 100644 index 000000000..2857510df --- /dev/null +++ b/applications/osgfilecache/CMakeLists.txt @@ -0,0 +1,5 @@ + +SET(TARGET_SRC osgfilecache.cpp ) + +#### end var setup ### +SETUP_APPLICATION(osgfilecache) diff --git a/applications/osgfilecache/osgfilecache.cpp b/applications/osgfilecache/osgfilecache.cpp new file mode 100644 index 000000000..2cab6b593 --- /dev/null +++ b/applications/osgfilecache/osgfilecache.cpp @@ -0,0 +1,117 @@ +/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield + * + * This application is open source and may be redistributed and/or modified + * freely and without restriction, both in commericial and non commericial applications, + * as long as this copyright notice is maintained. + * + * This application is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +*/ + +#include +#include +#include + +#include +#include +#include +#include + +#include +#include + +class LoadDataVisitor : public osg::NodeVisitor +{ +public: + + LoadDataVisitor(unsigned int maxNumLevels=0): + osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN), + _maxLevels(maxNumLevels), + _currentLevel(0) {} + + void apply(osg::PagedLOD& plod) + { + if (_currentLevel>_maxLevels) return; + + ++_currentLevel; + + std::cout<<"Found PagedLOD "< node = osgDB::readNodeFile(filename); + + if (node.valid()) node->accept(*this); + } + } + + --_currentLevel; + } + +protected: + + unsigned int _maxLevels; + unsigned int _currentLevel; +}; + + +int main( int argc, char **argv ) +{ + // use an ArgumentParser object to manage the program arguments. + osg::ArgumentParser arguments(&argc,argv); + + // set up the usage document, in case we need to print out how to use this program. + arguments.getApplicationUsage()->setApplicationName(arguments.getApplicationName()); + arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is an application for collecting a set of seperate files into a single archive file that can be later read in OSG applications.."); + arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ..."); + + // if user request help write it out to cout. + if (arguments.read("-h") || arguments.read("--help")) + { + arguments.getApplicationUsage()->write(std::cout); + return 1; + } + + unsigned int maxLevels = 0; + while(arguments.read("-l",maxLevels)) {} + + std::string fileCache; + while(arguments.read("-c",fileCache)) {} + + if (!fileCache.empty()) + { + std::string str("OSG_FILE_CACHE="); + str += fileCache; + + putenv(strdup((char*)str.c_str())); + } + + osg::ref_ptr loadedModel = osgDB::readNodeFiles(arguments); + if (!loadedModel) + { + std::cout<<"No data loaded, please specify a database to load"<accept(ldv); + + return 0; +} +