I checked out the latest svn and still got exactly the same problem at the
same place.

Time for bed now :-)

Roger

> -----Original Message-----
> From: [EMAIL PROTECTED] [mailto:osg-users-
> [EMAIL PROTECTED] On Behalf Of
> [EMAIL PROTECTED]
> Sent: 27 September 2006 20:17
> To: osg users
> Subject: Re: [osg-users] Collada plugin not working
> 
> Ahhhhhh,
> 
> I knew I have seen this issue before. And I have already fixed it. This
> was a problem in the DOM. Its in the 1.1.0 release but has been fixed in
> the SVN. If you check out from there you will get that fix, plus much
> much more.
> 
> When Mike Weiblen packaged up the project to hand over to the OSG
> community he included prebuilt libs from the SVN, not the 1.1.0 release
> package. I don't know if they are still being used but if you download
> and build the DOM1.1.0 release you will have this problem. If you use
> the prebuilt libs (or get from svn) you wont.
> 
> -Andy
> 
> P.S. I am planning on making another release package of the DOM sometime
> in the very near future.
> 
> Andreas Ekstrand wrote:
> > Hi Roger,
> >
> > Thanks for your efforts! This helped me come up with a possible
> > solution. What do you think about the modifications to the attached
> > ReaderWriterDAE.cpp? I create the DAE instance when it's first needed
> > instead of in the constructor. I had to use const_cast to do this, maybe
> > not the nicest code, but I couldn't see any alternative. Anyway, it
> > seems to work fine and I'd appreciate it if you verified this. If you or
> > anyone else can't see any problem with the solution I will submit the
> > modifications to Robert.
> >
> > /Andreas
> >
> >
> > Roger James wrote:
> >
> >> On further investigation it looks like the constructor of the global
> >>
> >> osgDB::RegisterReaderWriterProxy<ReaderWriterDAE>
> >> g_readerWriter_DAE_Proxy;
> >>
> >> in ReaderWriterDAE.cpp
> >>
> >> is being called before the constructor of the static
> >> daeStringTable daeStringRef::_stringTable;
> >>
> >> in daestringref.cpp
> >>
> >>> From memory the only way you force ordering of global initialisation
> >>> in C++
> >> it to put them in the same file. But I tried this and it did not work
> >> :-(.
> >>
> >> Roger
> >>
> >>
> >>
> >>> -----Original Message-----
> >>> From: [EMAIL PROTECTED] [mailto:osg-users-
> >>> [EMAIL PROTECTED] On Behalf Of Roger James
> >>> Sent: 27 September 2006 15:49
> >>> To: 'osg users'
> >>> Subject: RE: [osg-users] Collada plugin not working
> >>>
> >>> Anders,
> >>>
> >>> I think I am seeing the same behaviour as you.
> >>>
> >>> My environment is MSVC7.1.
> >>>
> >>> The plugin dll crashes during its initialisation phase when the global
> >>> reader writer proxy object is created by the runtime.
> >>>
> >>>
> >>
> >>
> >>
> >> _______________________________________________
> >> osg-users mailing list
> >> osg-users@openscenegraph.net
> >> http://openscenegraph.net/mailman/listinfo/osg-users
> >> http://www.openscenegraph.org/
> >>
> >>
> >>
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > /* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
> >  *
> >  * This application is open source and may be redistributed and/or
> modified
> >  * freely and without restriction, both in commericial and non
> commericial
> >  * applications, as long as this copyright notice is maintained.
> >  *
> >  * This application is distributed in the hope that it will be useful,
> >  * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
> >  *
> > */
> >
> > #include <sstream>
> >
> > #include <osg/Notify>
> > #include <osgDB/ReaderWriter>
> > #include <osgDB/FileNameUtils>
> > #include <osgDB/Registry>
> >
> > #include "daeReader.h"
> > #include "daeWriter.h"
> >
> > #define EXTENSION_NAME "dae"
> >
> >
> //////////////////////////////////////////////////////////////////////////
> /
> > // OSG reader/writer plugin for the COLLADA 1.4.x ".dae" format.
> > // See http://collada.org/ and http://khronos.org/collada/
> >
> > class ReaderWriterDAE : public osgDB::ReaderWriter
> > {
> > public:
> >   ReaderWriterDAE() : dae_(NULL)
> >     {
> >     }
> >
> >     ~ReaderWriterDAE()
> >     {
> >         if(dae_ != NULL){
> >             delete dae_;
> >             DAE::cleanup();
> >             dae_ = NULL;
> >         }
> >     }
> >
> >     const char* className() const { return "COLLADA 1.4.x DAE
> reader/writer"; }
> >
> >     bool acceptsExtension(const std::string& extension) const
> >     {
> >         return osgDB::equalCaseInsensitive( extension, EXTENSION_NAME );
> >     }
> >
> >     ReadResult readNode(const std::string&, const Options*) const;
> >
> >     WriteResult writeNode(const osg::Node&, const std::string&, const
> Options*) const;
> >
> > private:
> >
> >     DAE *dae_;
> >
> > };
> >
> >
> //////////////////////////////////////////////////////////////////////////
> /
> >
> > osgDB::ReaderWriter::ReadResult
> > ReaderWriterDAE::readNode(const std::string& fname,
> >         const osgDB::ReaderWriter::Options* options) const
> > {
> >     std::string ext( osgDB::getLowerCaseFileExtension(fname) );
> >     if( ! acceptsExtension(ext) ) return ReadResult::FILE_NOT_HANDLED;
> >
> >     std::string fileName( osgDB::findDataFile( fname, options ) );
> >     if( fileName.empty() ) return ReadResult::FILE_NOT_FOUND;
> >
> >     osg::notify(osg::INFO) << "ReaderWriterDAE( \"" << fileName << "\"
> )" << std::endl;
> >
> >     if (dae_ == NULL)
> >       const_cast<ReaderWriterDAE *>(this)->dae_ = new DAE();
> >
> >     osgdae::daeReader daeReader(dae_);
> >     std::string fileURI( osgDB::convertFileNameToUnixStyle(fileName) );
> >     if ( ! daeReader.convert( fileURI ) )
> >     {
> >         osg::notify( osg::WARN ) << "Load failed in COLLADA DOM
> conversion" << std::endl;
> >         return ReadResult::ERROR_IN_READING_FILE;
> >     }
> >
> >     osg::Node* rootNode( daeReader.getRootNode() );
> >     return rootNode;
> > }
> >
> >
> //////////////////////////////////////////////////////////////////////////
> /
> >
> > osgDB::ReaderWriter::WriteResult
> > ReaderWriterDAE::writeNode( const osg::Node& node,
> >         const std::string& fname, const osgDB::ReaderWriter::Options*
> options ) const
> > {
> >     std::string ext( osgDB::getLowerCaseFileExtension(fname) );
> >     if( ! acceptsExtension(ext) ) return WriteResult::FILE_NOT_HANDLED;
> >
> >     // Process options
> >     bool usePolygon(false);
> >     if( options )
> >     {
> >       std::istringstream iss( options->getOptionString() );
> >       std::string opt;
> >
> >       while( std::getline( iss, opt, ',' ) )
> >       {
> >         if( opt == "polygon")  usePolygon = true;
> >         else
> >         {
> >           osg::notify(osg::WARN)
> >               << "\n" "COLLADA dae plugin: unrecognized option \"" <<
> opt << "\"\n"
> >               << "comma-delimited options:\n"
> >               << "\tpolygon = use polygons instead of polylists for
> element\n"
> >               << "example: osgviewer -O polygon bar.dae" "\n"
> >               << std::endl;
> >         }
> >       }
> >     }
> >
> >     if (dae_ == NULL)
> >       const_cast<ReaderWriterDAE *>(this)->dae_ = new DAE();
> >
> >     osgdae::daeWriter daeWriter(dae_, fname, usePolygon );
> >     daeWriter.setRootNode( node );
> >     const_cast<osg::Node*>(&node)->accept( daeWriter );
> >
> >     osgDB::ReaderWriter::WriteResult retVal(
> WriteResult::ERROR_IN_WRITING_FILE );
> >     if ( daeWriter.isSuccess() )
> >     {
> >         if ( daeWriter.writeFile() )
> >         {
> >             retVal = WriteResult::FILE_SAVED;
> >         }
> >     }
> >
> >     return retVal;
> > }
> >
> >
> //////////////////////////////////////////////////////////////////////////
> /
> > // Add ourself to the Registry to instantiate the reader/writer.
> >
> > osgDB::RegisterReaderWriterProxy<ReaderWriterDAE>
> g_readerWriter_DAE_Proxy;
> >
> > // vim: set sw=4 ts=8 et ic ai:
> >
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > osg-users mailing list
> > osg-users@openscenegraph.net
> > http://openscenegraph.net/mailman/listinfo/osg-users
> > http://www.openscenegraph.org/
> 
> _______________________________________________
> osg-users mailing list
> osg-users@openscenegraph.net
> http://openscenegraph.net/mailman/listinfo/osg-users
> http://www.openscenegraph.org/


_______________________________________________
osg-users mailing list
osg-users@openscenegraph.net
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to