[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