2
0
Эх сурвалжийг харах

git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@99 67173fc5-114c-0410-ac8e-9d2fd5bffc1f

aramis_acg 17 жил өмнө
parent
commit
333f0c805e
3 өөрчлөгдсөн 63 нэмэгдсэн , 55 устгасан
  1. 33 2
      code/Assimp.cpp
  2. 28 16
      code/MD2Loader.cpp
  3. 2 37
      code/res/assimp.rc

+ 33 - 2
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 <map>
 
+// 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 <boost/thread/thread.hpp>
 #	include <boost/thread/mutex.hpp>
 #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);
+}
 

+ 28 - 16
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);
-}
+}

+ 2 - 37
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