#include "osg/ImageSequence" #include "osgDB/Registry" #include "osgDB/Input" #include "osgDB/Output" using namespace osg; using namespace osgDB; // forward declare functions to use later. bool ImageSequence_readLocalData(Object& obj, Input& fr); bool ImageSequence_writeLocalData(const Object& obj, Output& fw); // register the read and write functions with the osgDB::Registry. REGISTER_DOTOSGWRAPPER(ImageSequence) ( new osg::ImageSequence, "ImageSequence", "Object ImageSequence", &ImageSequence_readLocalData, &ImageSequence_writeLocalData ); bool ImageSequence_readLocalData(Object& obj, Input& fr) { bool iteratorAdvanced = false; ImageSequence& is = static_cast(obj); unsigned int numFilesToPreLoad = 1; std::string modeStr; if (fr.read("Mode",modeStr)) { if (modeStr=="PRE_LOAD_ALL_IMAGES") { is.setMode(osg::ImageSequence::PRE_LOAD_ALL_IMAGES); } else if (modeStr=="PAGE_AND_RETAIN_IMAGES") { is.setMode(osg::ImageSequence::PAGE_AND_RETAIN_IMAGES); } else if (modeStr=="PAGE_AND_DISCARD_USED_IMAGES") { is.setMode(osg::ImageSequence::PAGE_AND_DISCARD_USED_IMAGES); } } double length; if (fr.read("Duration", length) || fr.read("Length", length) ) { is.setLength(length); } if (fr.matchSequence("FileNames {")) { fr += 2; iteratorAdvanced = true; int entry = fr[0].getNoNestedBrackets(); while (!fr.eof() && fr[0].getNoNestedBrackets() >= entry) { if (fr[0].getStr()) { is.addImageFile(fr[0].getStr()); } ++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) { const ImageSequence& is = static_cast(obj); // no current image writing code here // as it is all handled by osg::Registry::writeImage() via plugins. switch(is.getMode()) { case(osg::ImageSequence::PRE_LOAD_ALL_IMAGES): fw.indent()<<"Mode PRE_LOAD_ALL_IMAGES"<getFileName().empty()) fw.indent()<getFileName())<