[osg-users] A problem with regard to std:istream on Android

龚来恩 8802661 at qq.com
Sat May 27 16:19:06 PDT 2017


Hi michael,
  The osg format file can be loaded. The problem has to do with std::istream >> operator reading binary stream.

------------------ 原始邮件 ------------------
发件人: "michael kapelko" <kornerr at gmail.com>;
发送时间: 2017年5月27日(星期六) 17:13
收件人: "OpenSceneGraph Users" <osg-users at lists.openscenegraph.org>;
主题: Re: [osg-users] A problem with regard to std:istream on Android



Hi.

Are you sure /sdcard path is valid at all? Different Android versions
use different sdcard paths. Use getExternalStorageDirectory():
https://stackoverflow.com/a/21230946/3404710
Note that you need a special permission to read from external storage, too.


2017-05-26 13:06 GMT+07:00 龚来恩 <8802661 at qq.com>:
> 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 )
>         {
>             CATCH_EXCEPTION(is);
>             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.
>
> Glen
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
osg-users at lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20170528/28fbef48/attachment-0002.htm>


More information about the osg-users mailing list