git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@99 67173fc5-114c-0410-ac8e-9d2fd5bffc1f
parent
f5be0b0475
commit
333f0c805e
|
@ -39,19 +39,25 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
---------------------------------------------------------------------------
|
---------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
/** @file Implementation of the Plain-C API */
|
/** @file Implementation of the Plain-C API */
|
||||||
|
|
||||||
|
// CRT headers
|
||||||
#include <map>
|
#include <map>
|
||||||
|
|
||||||
|
// public ASSIMP headers
|
||||||
#include "../include/assimp.h"
|
#include "../include/assimp.h"
|
||||||
#include "../include/assimp.hpp"
|
#include "../include/assimp.hpp"
|
||||||
|
#include "../include/DefaultLogger.h"
|
||||||
#include "../include/aiAssert.h"
|
#include "../include/aiAssert.h"
|
||||||
using namespace Assimp;
|
|
||||||
|
|
||||||
|
// boost headers
|
||||||
|
#define AI_C_THREADSAFE
|
||||||
#if (defined AI_C_THREADSAFE)
|
#if (defined AI_C_THREADSAFE)
|
||||||
# include <boost/thread/thread.hpp>
|
# include <boost/thread/thread.hpp>
|
||||||
# include <boost/thread/mutex.hpp>
|
# include <boost/thread/mutex.hpp>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
using namespace Assimp;
|
||||||
|
|
||||||
/** Stores the importer objects for all active import processes */
|
/** Stores the importer objects for all active import processes */
|
||||||
typedef std::map< const aiScene*, Assimp::Importer* > ImporterMap;
|
typedef std::map< const aiScene*, Assimp::Importer* > ImporterMap;
|
||||||
|
|
||||||
|
@ -111,7 +117,11 @@ void aiReleaseImport( const aiScene* pScene)
|
||||||
ImporterMap::iterator it = gActiveImports.find( pScene);
|
ImporterMap::iterator it = gActiveImports.find( pScene);
|
||||||
// it should be there... else the user is playing fools with us
|
// it should be there... else the user is playing fools with us
|
||||||
if( it == gActiveImports.end())
|
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;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// kill the importer, the data dies with it
|
// kill the importer, the data dies with it
|
||||||
delete it->second;
|
delete it->second;
|
||||||
|
@ -172,4 +182,25 @@ void aiGetExtensionList(aiString* szOut)
|
||||||
szOut->Set ( szTemp );
|
szOut->Set ( szTemp );
|
||||||
delete pcTemp;
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -69,7 +69,7 @@ void MD2::LookupNormalIndex(uint8_t iNormalIndex,aiVector3D& vOut)
|
||||||
// make sure the normal index has a valid value
|
// make sure the normal index has a valid value
|
||||||
if (iNormalIndex >= ARRAYSIZE(g_avNormals))
|
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). ");
|
" LUT has only 162 entries). ");
|
||||||
|
|
||||||
iNormalIndex = ARRAYSIZE(g_avNormals) - 1;
|
iNormalIndex = ARRAYSIZE(g_avNormals) - 1;
|
||||||
|
@ -113,6 +113,30 @@ bool MD2Importer::CanRead( const std::string& pFile, IOSystem* pIOHandler) const
|
||||||
// Validate the file header
|
// Validate the file header
|
||||||
void MD2Importer::ValidateHeader( )
|
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:
|
/* to be validated:
|
||||||
int32_t offsetSkins;
|
int32_t offsetSkins;
|
||||||
int32_t offsetTexCoords;
|
int32_t offsetTexCoords;
|
||||||
|
@ -129,6 +153,7 @@ void MD2Importer::ValidateHeader( )
|
||||||
this->m_pcHeader->offsetEnd > this->fileSize)
|
this->m_pcHeader->offsetEnd > this->fileSize)
|
||||||
{
|
{
|
||||||
throw new ImportErrorException("Invalid MD2 header: some offsets are outside the file");
|
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)
|
if (this->m_pcHeader->numSkins > AI_MD2_MAX_SKINS)
|
||||||
|
@ -166,20 +191,7 @@ void MD2Importer::InternReadFile(
|
||||||
file->Read( (void*)mBuffer, 1, fileSize);
|
file->Read( (void*)mBuffer, 1, fileSize);
|
||||||
|
|
||||||
this->m_pcHeader = (const MD2::Header*)this->mBuffer;
|
this->m_pcHeader = (const MD2::Header*)this->mBuffer;
|
||||||
|
this->ValidateHeader();
|
||||||
// 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();
|
|
||||||
|
|
||||||
// check some values whether they are valid
|
// check some values whether they are valid
|
||||||
if (0 == this->m_pcHeader->numFrames)
|
if (0 == this->m_pcHeader->numFrames)
|
||||||
|
@ -387,4 +399,4 @@ void MD2Importer::InternReadFile(
|
||||||
throw ex;
|
throw ex;
|
||||||
}
|
}
|
||||||
delete[] this->mBuffer; AI_DEBUG_INVALIDATE_PTR(this->mBuffer);
|
delete[] this->mBuffer; AI_DEBUG_INVALIDATE_PTR(this->mBuffer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -50,12 +50,12 @@ BEGIN
|
||||||
BEGIN
|
BEGIN
|
||||||
VALUE "Comments", "Licensed under a 3-clause BSD license"
|
VALUE "Comments", "Licensed under a 3-clause BSD license"
|
||||||
VALUE "CompanyName", "ASSIMP Development Team"
|
VALUE "CompanyName", "ASSIMP Development Team"
|
||||||
VALUE "FileDescription", "Open Asset Import Library "
|
VALUE "FileDescription", "Open Asset Import Library"
|
||||||
VALUE "FileVersion", "1, 0, 0, 0"
|
VALUE "FileVersion", "1, 0, 0, 0"
|
||||||
VALUE "InternalName", "assimp"
|
VALUE "InternalName", "assimp"
|
||||||
VALUE "LegalCopyright", "Copyright (C) 2008"
|
VALUE "LegalCopyright", "Copyright (C) 2008"
|
||||||
VALUE "OriginalFilename", "assimpNN.dll"
|
VALUE "OriginalFilename", "assimpNN.dll"
|
||||||
VALUE "ProductName", "Open Asset Import Library "
|
VALUE "ProductName", "Open Asset Import Library"
|
||||||
VALUE "ProductVersion", "1, 0, 0, 0"
|
VALUE "ProductVersion", "1, 0, 0, 0"
|
||||||
END
|
END
|
||||||
END
|
END
|
||||||
|
@ -65,41 +65,6 @@ BEGIN
|
||||||
END
|
END
|
||||||
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
|
#endif // !!ASSIMP_JNI_EXPORT
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue