Index: 3dsftk3/SOURCE/3dsprim.c =================================================================== --- 3dsftk3/SOURCE/3dsprim.c (revision 2986) +++ 3dsftk3/SOURCE/3dsprim.c (working copy) @@ -161,7 +161,7 @@ ushort3ds ReadUShort3ds() { - ushort3ds native, intel; + ushort3ds native, intel = 0; if (fread(&intel, ShortSize3ds, 1, GetFile3ds()) != 1) SET_ERROR_RETURNR(ERR_READING_FILE, 0); @@ -205,7 +205,7 @@ ulong3ds ReadULong3ds() { - ulong3ds native, intel; + ulong3ds native, intel = 0; if(fread(&intel, LongSize3ds, 1, GetFile3ds()) != 1) SET_ERROR_RETURNR(ERR_READING_FILE, 0); Index: 3dsftk3/SOURCE/Makefile =================================================================== --- 3dsftk3/SOURCE/Makefile (revision 2986) +++ 3dsftk3/SOURCE/Makefile (working copy) @@ -39,7 +39,7 @@ all : $(LIBNAME) clean : - -rm *.o + -rm *.o $(LIBDIR)/*.a ################################################# Index: src/3ds2mesh.cpp =================================================================== --- src/3ds2mesh.cpp (revision 2986) +++ src/3ds2mesh.cpp (working copy) @@ -87,17 +87,56 @@ return -1; } + Ogre::LogManager *logMgr; + Ogre::ResourceGroupManager *rgm; + Ogre::Math *mth; + Ogre::LodStrategyManager *lodMgr; + Ogre::MaterialManager *matMgr; + Ogre::SkeletonManager *skelMgr; + Ogre::MeshSerializer *meshSerializer; + Ogre::SkeletonSerializer *skeletonSerializer; + Ogre::DefaultHardwareBufferManager *bufferManager; + Ogre::MeshManager *meshMgr; + + int retCode = 0; + // Construct Ogre singletons needed by the exporter - Ogre::LogManager logMgr; - Ogre::LogManager::getSingleton().createLog("3DSOgreExporter.log", true); - Ogre::ResourceGroupManager resGrpMgr; - Ogre::MaterialManager matMgr; - matMgr.initialise(); - Ogre::DefaultHardwareBufferManager defHWBufMgr; - Ogre::MeshManager meshMgr; - Ogre::SkeletonManager skelMgr; + try + { + logMgr = new Ogre::LogManager(); + logMgr->createLog("3DSOgreExporter.log", true); + rgm = new Ogre::ResourceGroupManager(); + mth = new Ogre::Math(); + lodMgr = new Ogre::LodStrategyManager(); + matMgr = new Ogre::MaterialManager(); + matMgr->initialise(); + skelMgr = new Ogre::SkeletonManager(); + meshSerializer = new Ogre::MeshSerializer(); + skeletonSerializer = new Ogre::SkeletonSerializer(); + bufferManager = new Ogre::DefaultHardwareBufferManager(); // needed because we don't have a rendersystem + meshMgr = new Ogre::MeshManager(); + // don't pad during upgrade + meshMgr->setBoundsPaddingFactor(0.0f); - convert3dsToMesh(argv[1], argv[2], bCreateSkeleton, bTextureVerticalFlip); + convert3dsToMesh(argv[1], argv[2], bCreateSkeleton, bTextureVerticalFlip); + } + catch (exception& e) + { + cout << "Exception caught: " << e.what(); + retCode = 1; + } + + if (meshMgr) delete meshMgr; + if (skeletonSerializer) delete skeletonSerializer; + if (meshSerializer) delete meshSerializer; + if (skelMgr) delete skelMgr; + if (matMgr) delete matMgr; + if (lodMgr) delete lodMgr; + if (mth) delete mth; + if (rgm) delete rgm; + if (logMgr) delete logMgr; + + return retCode; } #define PRINT_ERRORS_RETURN(file) {if(ftkerr3ds){DumpErrList3ds(file); if (!ignoreftkerr3ds) return (false);}} @@ -402,7 +441,8 @@ Ogre::VertexDeclaration* newDecl = ogreSubMesh->vertexData->vertexDeclaration->getAutoOrganisedDeclaration( false, - false); + false, + false); Ogre::BufferUsageList bufferUsages; for (size_t u = 0; u <= newDecl->getMaxSource(); ++u) bufferUsages.push_back(Ogre::HardwareBuffer::HBU_STATIC_WRITE_ONLY); @@ -465,6 +505,10 @@ if (strlen(mat->texture.map.name) > 0) { Ogre::TextureUnitState *tu; + if(ogremat->getNumTechniques() == 0){ + Ogre::Technique *t = ogremat->createTechnique(); + t->createPass(); + } tu = ogremat->getTechnique(0)->getPass(0)->createTextureUnitState(mat->texture.map.name); } Index: src/Makefile =================================================================== --- src/Makefile (revision 2986) +++ src/Makefile (working copy) @@ -1,16 +1,25 @@ -CXXFLAGS=-I$(OGRE_HOME)/include/OGRE \ +ifdef DEBUG +CFLAGS=-g -D_DEBUG +LIB_DEBUG_SUFFIX=d +else +CFLAGS= +LIB_DEBUG_SUFFIX= +endif + +CXXFLAGS=`pkg-config --cflags OGRE` \ -DEXT_HASH \ - -I../3dsftk3/INC + -I../3dsftk3/INC \ + $(CFLAGS) -LIBS=-g -L$(OGRE_HOME)/lib \ - -Wl,--rpath -Wl,$(OGRE_HOME)/lib -lOgreMain \ - -L../3dsftk3/lib -lftk +LIBS=`pkg-config --libs OGRE` \ + -Wl,--rpath -Wl,\ + -L../3dsftk3/lib -lftk$(LIB_DEBUG_SUFFIX) TARGETS = 3ds2mesh all: $(TARGETS) -$(TARGETS): $$@.o +$(TARGETS): %: %.o $(CXX) $(LDFLAGS) -o $@ $? $(LIBS) clean: Index: Makefile =================================================================== --- Makefile (revision 2986) +++ Makefile (working copy) @@ -1,6 +1,6 @@ all: - (cd 3dsftk3/SOURCE; make all) - (cd src; make all) + (cd 3dsftk3/SOURCE; make all DEBUG=$(DEBUG)) + (cd src; make all DEBUG=$(DEBUG)) clean: (cd 3dsftk3/SOURCE; make clean)