From 333f0c805e53fab359297e425ae321d7791207ab Mon Sep 17 00:00:00 2001 From: aramis_acg Date: Fri, 8 Aug 2008 18:29:05 +0000 Subject: [PATCH] git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@99 67173fc5-114c-0410-ac8e-9d2fd5bffc1f --- code/Assimp.cpp | 35 +++++++++++++++++++++++++++++++++-- code/MD2Loader.cpp | 44 ++++++++++++++++++++++++++++---------------- code/res/assimp.rc | 39 ++------------------------------------- 3 files changed, 63 insertions(+), 55 deletions(-) diff --git a/code/Assimp.cpp b/code/Assimp.cpp index 3854f4a31..1a63a3d79 100644 --- a/code/Assimp.cpp +++ b/code/Assimp.cpp @@ -39,19 +39,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. --------------------------------------------------------------------------- */ /** @file Implementation of the Plain-C API */ + +// CRT headers #include +// public ASSIMP headers #include "../include/assimp.h" #include "../include/assimp.hpp" - +#include "../include/DefaultLogger.h" #include "../include/aiAssert.h" -using namespace Assimp; +// boost headers +#define AI_C_THREADSAFE #if (defined AI_C_THREADSAFE) # include # include #endif +using namespace Assimp; + /** Stores the importer objects for all active import processes */ typedef std::map< const aiScene*, Assimp::Importer* > ImporterMap; @@ -111,7 +117,11 @@ void aiReleaseImport( const aiScene* pScene) ImporterMap::iterator it = gActiveImports.find( pScene); // it should be there... else the user is playing fools with us if( it == gActiveImports.end()) + { + DefaultLogger::get()->error("Unable to find the Importer instance for this scene. " + "Are you sure it has been created by aiImportFile(ex)(...)?"); return; + } // kill the importer, the data dies with it delete it->second; @@ -172,4 +182,25 @@ void aiGetExtensionList(aiString* szOut) szOut->Set ( szTemp ); delete pcTemp; } +// ------------------------------------------------------------------------------------------------ +void aiGetMemoryRequirements(const C_STRUCT aiScene* pIn, + C_STRUCT aiMemoryInfo* in); +{ +// lock the mutex +#if (defined AI_C_THREADSAFE) + boost::mutex::scoped_lock lock(gMutex); +#endif + + // find the importer associated with this data + ImporterMap::iterator it = gActiveImports.find( pIn); + // it should be there... else the user is playing fools with us + if( it == gActiveImports.end()) + { + DefaultLogger::get()->error("Unable to find the Importer instance for this scene. " + "Are you sure it has been created by aiImportFile(ex)(...)?"); + return 0; + } + // get memory statistics + it->second->GetMemoryRequirements(*in); +} diff --git a/code/MD2Loader.cpp b/code/MD2Loader.cpp index 38415af19..bb5e55770 100644 --- a/code/MD2Loader.cpp +++ b/code/MD2Loader.cpp @@ -69,7 +69,7 @@ void MD2::LookupNormalIndex(uint8_t iNormalIndex,aiVector3D& vOut) // make sure the normal index has a valid value if (iNormalIndex >= ARRAYSIZE(g_avNormals)) { - DefaultLogger::get()->warn("Index overflow in MDL7 normal vector list (the " + DefaultLogger::get()->warn("Index overflow in Quake II normal vector list (the " " LUT has only 162 entries). "); iNormalIndex = ARRAYSIZE(g_avNormals) - 1; @@ -113,6 +113,30 @@ bool MD2Importer::CanRead( const std::string& pFile, IOSystem* pIOHandler) const // Validate the file header void MD2Importer::ValidateHeader( ) { + // check magic number + if (this->m_pcHeader->magic != AI_MD2_MAGIC_NUMBER_BE && + this->m_pcHeader->magic != AI_MD2_MAGIC_NUMBER_LE) + { + delete[] this->mBuffer; + AI_DEBUG_INVALIDATE_PTR(this->mBuffer); + + char szBuffer[5]; + szBuffer[0] = ((char*)&this->m_pcHeader->magic)[0]; + szBuffer[1] = ((char*)&this->m_pcHeader->magic)[1]; + szBuffer[2] = ((char*)&this->m_pcHeader->magic)[2]; + szBuffer[3] = ((char*)&this->m_pcHeader->magic)[3]; + szBuffer[4] = '\0'; + + throw new ImportErrorException("Invalid MD2 magic word: should be IDP2, the " + "magic word found is " + std::string(szBuffer)); + } + + // check file format version + if (this->m_pcHeader->version != 8) + { + DefaultLogger::get()->warn( "Unsupported md2 file version. Continuing happily ..."); + } + /* to be validated: int32_t offsetSkins; int32_t offsetTexCoords; @@ -129,6 +153,7 @@ void MD2Importer::ValidateHeader( ) this->m_pcHeader->offsetEnd > this->fileSize) { throw new ImportErrorException("Invalid MD2 header: some offsets are outside the file"); + AI_DEBUG_INVALIDATE_PTR(this->mBuffer); } if (this->m_pcHeader->numSkins > AI_MD2_MAX_SKINS) @@ -166,20 +191,7 @@ void MD2Importer::InternReadFile( file->Read( (void*)mBuffer, 1, fileSize); this->m_pcHeader = (const MD2::Header*)this->mBuffer; - - // check magic number - if (this->m_pcHeader->magic != AI_MD2_MAGIC_NUMBER_BE && - this->m_pcHeader->magic != AI_MD2_MAGIC_NUMBER_LE) - { - throw new ImportErrorException( "Invalid md2 file: Magic bytes not found"); - } - - // check file format version - if (this->m_pcHeader->version != 8) - { - DefaultLogger::get()->warn( "Unsupported md2 file version. Continuing happily ..."); - } - this->ValidateHeader(); + this->ValidateHeader(); // check some values whether they are valid if (0 == this->m_pcHeader->numFrames) @@ -387,4 +399,4 @@ void MD2Importer::InternReadFile( throw ex; } delete[] this->mBuffer; AI_DEBUG_INVALIDATE_PTR(this->mBuffer); -} \ No newline at end of file +} diff --git a/code/res/assimp.rc b/code/res/assimp.rc index 127f2e734..0bf5f111f 100644 --- a/code/res/assimp.rc +++ b/code/res/assimp.rc @@ -50,12 +50,12 @@ BEGIN BEGIN VALUE "Comments", "Licensed under a 3-clause BSD license" VALUE "CompanyName", "ASSIMP Development Team" - VALUE "FileDescription", "Open Asset Import Library " + VALUE "FileDescription", "Open Asset Import Library" VALUE "FileVersion", "1, 0, 0, 0" VALUE "InternalName", "assimp" VALUE "LegalCopyright", "Copyright (C) 2008" VALUE "OriginalFilename", "assimpNN.dll" - VALUE "ProductName", "Open Asset Import Library " + VALUE "ProductName", "Open Asset Import Library" VALUE "ProductVersion", "1, 0, 0, 0" END END @@ -65,41 +65,6 @@ BEGIN END END -#else - -VS_VERSION_INFO VERSIONINFO - FILEVERSION 1,0,0,1 - PRODUCTVERSION 1,0,0,1 - FILEFLAGSMASK 0x17L -#ifdef _DEBUG - FILEFLAGS 0x1L -#else - FILEFLAGS 0x0L -#endif - FILEOS 0x4L - FILETYPE 0x7L - FILESUBTYPE 0x0L -BEGIN - BLOCK "StringFileInfo" - BEGIN - BLOCK "040704b0" - BEGIN - VALUE "Comments", "Licensed under a 3-clause BSD license" - VALUE "CompanyName", "ASSIMP Development Team" - VALUE "FileDescription", "ASSIMP-JNI bridge module" - VALUE "FileVersion", "1, 0, 0, 0" - VALUE "InternalName", "jassimp" - VALUE "LegalCopyright", "Copyright (C) 2008" - VALUE "OriginalFilename", "jAssimpNN.dll" - VALUE "ProductName", "ASSIMP-JNI bridge module" - VALUE "ProductVersion", "1, 0, 0, 0" - END - END - BLOCK "VarFileInfo" - BEGIN - VALUE "Translation", 0x407, 1200 - END -END #endif // !!ASSIMP_JNI_EXPORT