diff --git a/src/osgPlugins/osg/ImageSequence.cpp b/src/osgPlugins/osg/ImageSequence.cpp index 0c36a3fa8..ba191cb5e 100644 --- a/src/osgPlugins/osg/ImageSequence.cpp +++ b/src/osgPlugins/osg/ImageSequence.cpp @@ -21,25 +21,91 @@ RegisterDotOsgWrapperProxy g_ImageSequenceProxy &ImageSequence_writeLocalData ); -bool ImageSequence_readLocalData(Object& /*obj*/, Input& /*fr*/) +bool ImageSequence_readLocalData(Object& obj, Input& fr) { bool iteratorAdvanced = false; - // Image& image = static_cast(obj); + ImageSequence& is = static_cast(obj); - // no current image reading code - // as it is all handled by osg::Registry::readImage() via plugins. + if (fr.matchSequence("FileNames {")) + { + fr += 2; + iteratorAdvanced = true; + int entry = fr[0].getNoNestedBrackets(); + while (!fr.eof() && fr[0].getNoNestedBrackets() >= entry) + { + if (fr[0].getStr()) + { +#if 1 + is.addImageFile(fr[0].getStr()); +#else + osg::ref_ptr image = fr.readImage(fr[0].getStr()); + if (image.valid()) is.addImage(image.get()); +#endif + } + ++fr; + } + } + + if (fr.matchSequence("Images {")) + { + fr += 2; + iteratorAdvanced = true; + int entry = fr[0].getNoNestedBrackets(); + while (!fr.eof() && fr[0].getNoNestedBrackets() >= entry) + { + if (fr[0].getStr()) + { + osg::ref_ptr image = fr.readImage(fr[0].getStr()); + if (image.valid()) is.addImage(image.get()); + } + ++fr; + } + } return iteratorAdvanced; } -bool ImageSequence_writeLocalData(const Object& /*obj*/, Output& /*fw*/) +bool ImageSequence_writeLocalData(const Object& obj, Output& fw) { - // const ImageSequence& image = static_cast(obj); + const ImageSequence& is = static_cast(obj); // no current image writing code here // as it is all handled by osg::Registry::writeImage() via plugins. + + if (!is.getFileNames().empty()) + { + fw.indent()<<"FileNames {"<getFileName().empty()) fw.indent()<<(*itr)->getFileName()<getFileName(); - if (fw.getOutputTextureFiles()) + const osg::ImageSequence* is = dynamic_cast(texture.getImage()); + if (is) { - if (fileName.empty()) - { - fileName = fw.getTextureFileNameForOutput(); - } - osgDB::writeImageFile(*texture.getImage(), fileName); + fw.writeObject(*is); } - - if (!fileName.empty()) - { - fw.indent() << "file "<getFileName(); + if (fw.getOutputTextureFiles()) + { + if (fileName.empty()) + { + fileName = fw.getTextureFileNameForOutput(); + } + osgDB::writeImageFile(*texture.getImage(), fileName); + } + + if (!fileName.empty()) + { + fw.indent() << "file "<getFileName(); - if (fw.getOutputTextureFiles()) + const osg::ImageSequence* is = dynamic_cast(texture.getImage()); + if (is) { - if (fileName.empty()) - { - fileName = fw.getTextureFileNameForOutput(); - } - osgDB::writeImageFile(*texture.getImage(), fileName); + fw.writeObject(*is); } - - if (!fileName.empty()) - { - fw.indent() << "file "<getFileName(); + if (fw.getOutputTextureFiles()) + { + if (fileName.empty()) + { + fileName = fw.getTextureFileNameForOutput(); + } + osgDB::writeImageFile(*texture.getImage(), fileName); + } + + if (!fileName.empty()) + { + fw.indent() << "file "<getFileName(); - if (fw.getOutputTextureFiles()) + const osg::ImageSequence* is = dynamic_cast(texture.getImage()); + if (is) { - if (fileName.empty()) - { - fileName = fw.getTextureFileNameForOutput(); - } - osgDB::writeImageFile(*texture.getImage(), fileName); + fw.writeObject(*is); } - - if (!fileName.empty()) - { - fw.indent() << "file "<getFileName(); + if (fw.getOutputTextureFiles()) + { + if (fileName.empty()) + { + fileName = fw.getTextureFileNameForOutput(); + } + osgDB::writeImageFile(*texture.getImage(), fileName); + } + + if (!fileName.empty()) + { + fw.indent() << "file "<getFileName();\ - if (fw.getOutputTextureFiles())\ - {\ - if (fileName.empty())\ + const osg::ImageSequence* is = dynamic_cast(image); \ + if (is) \ + { \ + fw.writeObject(*is); \ + } \ + else \ + { \ + std::string fileName = image->getFileName();\ + if (fw.getOutputTextureFiles())\ {\ - fileName = fw.getTextureFileNameForOutput();\ + if (fileName.empty())\ + {\ + fileName = fw.getTextureFileNameForOutput();\ + }\ + osgDB::writeImageFile(*image, fileName);\ + }\ + if (!fileName.empty())\ + {\ + fw.indent() << "image "<<#FACE<<" "<getFileName(); - if (fw.getOutputTextureFiles()) + const osg::ImageSequence* is = dynamic_cast(texture.getImage()); + if (is) { - if (fileName.empty()) - { - fileName = fw.getTextureFileNameForOutput(); - } - osgDB::writeImageFile(*texture.getImage(), fileName); + fw.writeObject(*is); } - - if (!fileName.empty()) - { - fw.indent() << "file "<getFileName(); + if (fw.getOutputTextureFiles()) + { + if (fileName.empty()) + { + fileName = fw.getTextureFileNameForOutput(); + } + osgDB::writeImageFile(*texture.getImage(), fileName); + } + + if (!fileName.empty()) + { + fw.indent() << "file "<