Hi Terry, On Sun, Sep 4, 2011 at 9:29 PM, Terry Welsh <[email protected]> wrote: > Excellent ZipFS plugin Jason. Thank you for the help. I think that > was the hardest part of the problem. I finally got around to working > on this more and I have the other half of the problem mostly solved. Thanks, glad it worked for you. We don't use it anymore for osgEarth but I think in general it's pretty useful.
> It looks like OSG uses zlib for all its compression/decompression. > Just out of curiosity, how did you pick libzip instead? Or did you > not write ZipFS? I did write the ZipFS plugin, we chose libzip over just using zlib b/c it had easy access to dealing with zip archives. If zlib itself has something in there that we can use instead of having another dependency that would be great but I didn't really look that hard since libzip worked so well. If you have a submission for the osgEarth that you need integrated just send along the whole modified file or do a pull request on github and I'll take a look at it. Jason > To recap, I'm trying to set an OSG_FILE_PATH such as > mydirectory/data.zip and load files out of the specified archive. At > first I discovered the Registry class's FindFileCallback. I thought I > could just make one of those and have it search inside of zip files. > However, the work that I really needed to replace happened when the > default Registry::findDataFileImplementation would call > osgDB::findFileInPath in FileUtils. So I decided to override > findFileInPath so that would look for paths containing ".zip" and try > to locate the desired file inside the zip file. > > That almost worked. I also had to modify ReaderWriterZipFS::readFile > so that it uses OSG's directory searching. At the beginning of the > function I added > > std::string filenameWithPath = > osgDB::Registry::instance()->findDataFile(fullFileName, options, > CASE_SENSITIVE); > > and then I use filenameWithPath instead of fullFileName where appropriate. > > So now I can load almost all my game resources from one .zip file > instead of a directory full of files. I haven't tested performance > yet, but there's no noticeable change. .osg files load with all their > textures. > > Here's the catch: .osg files don't get loaded with their shaders. I > believe this is because shaders don't use the standard OSG plugin > loading paradigm. Instead they simply use > Shader::loadShaderSourceFromFile(). I haven't put any thought into > this last detail yet (I hope it's not too messy), but I need a > programming break.... > -- > Terry Welsh > mogumbo 'at' gmail.com > www.reallyslick.com > >> >> Message: 9 >> Date: Fri, 5 Aug 2011 08:50:10 -0400 >> From: Jason Beverage <[email protected]> >> To: OpenSceneGraph Users <[email protected]> >> Subject: Re: [osg-users] tight integration of virtual file system >> Message-ID: >> <camcxsmsly2m20aoa5z7tubjob1xyrqqkmnz9z9lslzmmkqu...@mail.gmail.com> >> Content-Type: text/plain; charset=ISO-8859-1 >> >> Hi Terry, >> >> osgEarth has a generic zip based plugin called ZipFS that is >> implemented as an osgDB plugin and isn't dependent on osgEarth. We >> originally developed it to support using a zip file of imagery tiles >> for a cache. >> >> It allows you to load files like: >> osgDB::readNodeFile("c:/data/models.zip/cow.osg"); >> >> I haven't used it for quite awhile but last I checked it was working >> just fine. You can get the osgearth source code from github at >> https://github.com/gwaldron/osgearth >> >> If anything it could be a start to what you're looking for. >> >> Thanks, >> >> Jason >> > _______________________________________________ > osg-users mailing list > [email protected] > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > _______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

