From db163de91cd166f65e89602e3bc2170d2aeb8b10 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 7 Dec 2006 10:16:43 +0000 Subject: [PATCH] From Luigi Calori, "In order to effectively use --image-ext and to add -O "plugin options", some fix to osgdem.cpp and osgTerrain/DataSet.cpp These mods should allow to build terrains controlling jpeg compressed imagery embedded in ive files, using something like: osgdemd --image-ext jpeg --RGB_24 -O "JPEG_QUALITY 20 compressImageData" ......." --- applications/osgdem/osgdem.cpp | 10 ++++++++-- src/osgTerrain/DataSet.cpp | 11 ++++++++--- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/applications/osgdem/osgdem.cpp b/applications/osgdem/osgdem.cpp index 2a0d18ae9..a2bafd4a1 100644 --- a/applications/osgdem/osgdem.cpp +++ b/applications/osgdem/osgdem.cpp @@ -210,7 +210,7 @@ int main( int argc, char **argv ) arguments.getApplicationUsage()->addCommandLineOption("--tile-image-size","Set the tile maximum image size"); arguments.getApplicationUsage()->addCommandLineOption("--tile-terrain-size","Set the tile maximum terrain size"); arguments.getApplicationUsage()->addCommandLineOption("--comment","Added a comment/description string to the top most node in the dataset"); - + arguments.getApplicationUsage()->addCommandLineOption("-O","string option to pass to write plugins, use \" \" for multiple options"); // create DataSet. osg::ref_ptr dataset = new osgTerrain::DataSet; @@ -341,7 +341,13 @@ int main( int argc, char **argv ) } } - + if (arguments.read("-O",str)) + { + osgDB::ReaderWriter::Options* options = new osgDB::ReaderWriter::Options; + options->setOptionString(str); + osgDB::Registry::instance()->setOptions(options); + } + // if user request help write it out to cout. if (arguments.read("-h") || arguments.read("--help")) { diff --git a/src/osgTerrain/DataSet.cpp b/src/osgTerrain/DataSet.cpp index ccc86a9ed..7472ed147 100644 --- a/src/osgTerrain/DataSet.cpp +++ b/src/osgTerrain/DataSet.cpp @@ -2339,7 +2339,8 @@ osg::StateSet* DataSet::DestinationTile::createStateSet() osg::Image* image = imageData._imagery->_image.get(); - std::string imageExension(".dds"); // ".rgb" + std::string imageExension(_dataSet->_imageExtension); + //std::string imageExension(".dds"); // ".rgb" //std::string imageExension(".jp2"); // ".rgb" std::string imageName = _name; if (layerNum>0) @@ -4758,8 +4759,12 @@ void DataSet::_buildDestination(bool writeToDisk) if (!_state) _state = new osg::State; osg::ref_ptr previous_options = osgDB::Registry::instance()->getOptions(); - osgDB::Registry::instance()->setOptions(new osgDB::ReaderWriter::Options("precision 16")); - + if(previous_options.get()) { + osg::notify(osg::NOTICE) << "osgTerrain: adding optionstring" << previous_options->getOptionString() << std::endl; + osgDB::Registry::instance()->setOptions(new osgDB::ReaderWriter::Options(std::string("precision 16") + std::string(" ") + previous_options->getOptionString()) ); + } else { + osgDB::Registry::instance()->setOptions(new osgDB::ReaderWriter::Options("precision 16")); + } if (!_archive && !_archiveName.empty()) { unsigned int indexBlockSizeHint=4096;