[osg-users] osg plugin couldn't load an osgb or ive file on Android system

龚来恩 8802661 at qq.com
Fri May 26 22:12:23 PDT 2017

    I googled the reason why the osg plugin couldn't load an osgb or ive file on Android system. Because std::istream >> operate skips spaces which was used widely by osg plugins to read binary stream. It works on windows. But this doesn't work on Andoid.
    The osg file can't be loaded successfully, so >> operate can normally work if reading stream with text format. It's time consuming to convert all data format from osgb to osg. Can anybody give me a better choice?

Thank you in advance!

8802661 at qq.com
From: 龚来恩
Date: 2017-05-26 14:06
To: OpenSceneGraph Users
Subject: [osg-users] A problem with regard to std:istream on Android
Hi All,
    I'm trying to make osgEarth run on Android (OSG 3.2 & osgEarth 2.3). Now the earth can display on Android system. But I run into a problem with regard to std:istream. I tried to load an osgb file by the following code
osg::ref_ptr<osg::Node> node = osgDB::readNodeFile("/sdcard/WV/Models/tk.osgb");
the variable node's value is always be NULL.  I step into this line and traced down to file ReaderWriterOSG2.cpp
virtual ReadResult readNode( const std::string& file, const Options* options ) const
        ReadResult result = ReadResult::FILE_LOADED;
        std::string fileName = file;
        std::ios::openmode mode = std::ios::in;
        Options* local_opt = prepareReading( result, fileName, mode, options );
        if ( !result.success() ) return result;

        osgDB::ifstream istream( fileName.c_str(), mode );
        return readNode( istream, local_opt );

virtual ReadResult readNode( std::istream& fin, const Options* options ) const
        osg::ref_ptr<InputIterator> ii = readInputIterator(fin, options);
        if ( !ii ) return ReadResult::FILE_NOT_HANDLED;

        InputStream is( options );
        if ( is.start(ii.get())!=InputStream::READ_SCENE )
            return ReadResult::FILE_NOT_HANDLED;

        is.decompress(); CATCH_EXCEPTION(is);
        osg::Node* node = dynamic_cast<osg::Node*>(is.readObject()); CATCH_EXCEPTION(is);
        return node;

the debugger couldn't step into the function readNode( std::istream& fin, const Options* options ). But on windows it works.

Can anybody tell me how to solve this problem?

Dev Environment:
    Visual Studio 2017
    Android 7.0
    Android NDK64 r13b
    Arch arm64-v8a

Best regards.


osg-users mailing list
osg-users at lists.openscenegraph.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20170527/086f6f18/attachment-0003.htm>

More information about the osg-users mailing list