I think Andy means the latest svn of the collada-dom at sourceforge, not
of OSG itself.

http://sourceforge.net/projects/collada-dom

Regards,
Marcus

On Thu, 2006-09-28 at 01:38 +0100, Roger James wrote:
> 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
> > >> [email protected]
> > >> 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
> > > [email protected]
> > > http://openscenegraph.net/mailman/listinfo/osg-users
> > > http://www.openscenegraph.org/
> > 
> > _______________________________________________
> > osg-users mailing list
> > [email protected]
> > http://openscenegraph.net/mailman/listinfo/osg-users
> > http://www.openscenegraph.org/
> 
> 
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://openscenegraph.net/mailman/listinfo/osg-users
> http://www.openscenegraph.org/
> 

_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to