⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 readerwriterosga.cpp

📁 最新osg包
💻 CPP
字号:
#include <osg/Notify>#include <osgDB/FileUtils>#include <osgDB/FileNameUtils>#include "OSGA_Archive.h"class ReaderWriterOSGA : public osgDB::ReaderWriter{public:    ReaderWriterOSGA()    {        supportsExtension("osga","OpenSceneGraph Archive format");    }    virtual const char* className() const { return "OpenSceneGraph Archive Reader/Writer"; }    virtual ReadResult openArchive(const std::string& file,ArchiveStatus status, unsigned int indexBlockSize = 4096, const Options* options=NULL) const    {                std::string ext = osgDB::getLowerCaseFileExtension(file);        if (!acceptsExtension(ext)) return ReadResult::FILE_NOT_HANDLED;        std::string fileName = osgDB::findDataFile( file, options );        if (fileName.empty())         {            if (status==READ) return ReadResult::FILE_NOT_FOUND;            fileName = file;        }                    osg::ref_ptr<OSGA_Archive> archive = new OSGA_Archive;        if (!archive->open(fileName, status, indexBlockSize))        {            return ReadResult(ReadResult::FILE_NOT_HANDLED);        }        return archive.get();    }    /** open an archive for reading.*/     virtual ReadResult openArchive(std::istream& fin,const Options*) const    {        osg::ref_ptr<OSGA_Archive> archive = new OSGA_Archive;        if (!archive->open(fin))        {            return ReadResult(ReadResult::FILE_NOT_HANDLED);        }        return archive.get();    }    virtual ReadResult readImage(const std::string& file,const Options* options) const    {        ReadResult result = openArchive(file,osgDB::Archive::READ);                if (!result.validArchive()) return result;        // copy the incoming options if possible so that plugin options can be applied to files        // inside the archive        osg::ref_ptr<osgDB::ReaderWriter::Options> local_options =             options?            new osgDB::ReaderWriter::Options( *options ) :            new osgDB::ReaderWriter::Options;        local_options->setDatabasePath(file);        ReadResult result_2 = result.getArchive()->readImage(result.getArchive()->getMasterFileName(),local_options.get());                if (!options || (options->getObjectCacheHint() & osgDB::ReaderWriter::Options::CACHE_ARCHIVES))        {            // register the archive so that it is cached for future use.            osgDB::Registry::instance()->addToArchiveCache(file, result.getArchive());        }        return result_2;    }    virtual ReadResult readNode(const std::string& file,const Options* options) const    {        ReadResult result = openArchive(file,osgDB::Archive::READ);                if (!result.validArchive()) return result;        // copy the incoming options if possible so that plugin options can be applied to files        // inside the archive        osg::ref_ptr<osgDB::ReaderWriter::Options> local_options =             options?            new osgDB::ReaderWriter::Options( *options ) :            new osgDB::ReaderWriter::Options;        local_options->setDatabasePath(file);        ReadResult result_2 = result.getArchive()->readNode(result.getArchive()->getMasterFileName(),local_options.get());                if (!options || (options->getObjectCacheHint() & osgDB::ReaderWriter::Options::CACHE_ARCHIVES))        {            // register the archive so that it is cached for future use.            osgDB::Registry::instance()->addToArchiveCache(file, result.getArchive());        }        return result_2;    }protected:    };// register with Registry to instantiate the above reader/writer.REGISTER_OSGPLUGIN(osga, ReaderWriterOSGA)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -