Merge branch 'master' of https://github.com/assimp/assimp
commit
566aa1ae00
10
.travis.yml
10
.travis.yml
|
@ -1,5 +1,6 @@
|
||||||
before_install:
|
before_install:
|
||||||
- sudo apt-get update -qq
|
- sudo apt-get update -qq
|
||||||
|
- sudo apt-get install cmake
|
||||||
- sudo apt-get install cmake python3
|
- sudo apt-get install cmake python3
|
||||||
- if [ $LINUX ]; then sudo apt-get install -qq freeglut3-dev libxmu-dev libxi-dev ; fi
|
- if [ $LINUX ]; then sudo apt-get install -qq freeglut3-dev libxmu-dev libxi-dev ; fi
|
||||||
- echo -e "#ifndef A_R_H_INC\n#define A_R_H_INC\n#define GitVersion ${TRAVIS_JOB_ID}\n#define GitBranch \"${TRAVIS_BRANCH}\"\n#endif // A_R_H_INC" > revision.h
|
- echo -e "#ifndef A_R_H_INC\n#define A_R_H_INC\n#define GitVersion ${TRAVIS_JOB_ID}\n#define GitBranch \"${TRAVIS_BRANCH}\"\n#endif // A_R_H_INC" > revision.h
|
||||||
|
@ -18,6 +19,7 @@ branches:
|
||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
|
- secure: "lZ7pHQvl5dpZWzBQAaIMf0wqrvtcZ4wiZKeIZjf83TEsflW8+z0uTpIuN30ZV6Glth/Sq1OhLnTP5+N57fZU/1ebA5twHdvP4bS5CIUUg71/CXQZNl36xeaqvxsG/xRrdpKOsPdjAOsQ9KPTQulsX43XDLS7CasMiLvYOpqKcPc="
|
||||||
- PV=r8e PLATF=linux-x86_64 NDK_HOME=${TRAVIS_BUILD_DIR}/android-ndk-${PV} PATH=${PATH}:${NDK_HOME}
|
- PV=r8e PLATF=linux-x86_64 NDK_HOME=${TRAVIS_BUILD_DIR}/android-ndk-${PV} PATH=${PATH}:${NDK_HOME}
|
||||||
matrix:
|
matrix:
|
||||||
- LINUX=1 TRAVIS_NO_EXPORT=YES ENABLE_COVERALLS=ON
|
- LINUX=1 TRAVIS_NO_EXPORT=YES ENABLE_COVERALLS=ON
|
||||||
|
@ -52,3 +54,11 @@ after_success:
|
||||||
- lcov --list coverage.info
|
- lcov --list coverage.info
|
||||||
- coveralls-lcov --source-encoding=ISO-8859-1 --repo-token=${COVERALLS_TOKEN} coverage.info
|
- coveralls-lcov --source-encoding=ISO-8859-1 --repo-token=${COVERALLS_TOKEN} coverage.info
|
||||||
|
|
||||||
|
addons:
|
||||||
|
coverity_scan:
|
||||||
|
project:
|
||||||
|
name: "assimp/assimp"
|
||||||
|
notification_email: kim.kulling@googlemail.com
|
||||||
|
build_command_prepend: "cmake"
|
||||||
|
build_command: "make"
|
||||||
|
branch_pattern: coverity_scan
|
||||||
|
|
|
@ -40,3 +40,4 @@ after_build:
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: assimp.7z
|
- path: assimp.7z
|
||||||
name: assimp_lib
|
name: assimp_lib
|
||||||
|
|
||||||
|
|
|
@ -105,6 +105,8 @@ BlenderImporter::~BlenderImporter()
|
||||||
delete modifier_cache;
|
delete modifier_cache;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const char* Tokens[] = { "BLENDER" };
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// Returns whether the class can handle the format of the given file.
|
// Returns whether the class can handle the format of the given file.
|
||||||
bool BlenderImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
|
bool BlenderImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, bool checkSig) const
|
||||||
|
@ -116,8 +118,7 @@ bool BlenderImporter::CanRead( const std::string& pFile, IOSystem* pIOHandler, b
|
||||||
|
|
||||||
else if ((!extension.length() || checkSig) && pIOHandler) {
|
else if ((!extension.length() || checkSig) && pIOHandler) {
|
||||||
// note: this won't catch compressed files
|
// note: this won't catch compressed files
|
||||||
const char* tokens[] = {"BLENDER"};
|
return SearchFileHeaderForToken(pIOHandler,pFile, Tokens,1);
|
||||||
return SearchFileHeaderForToken(pIOHandler,pFile,tokens,1);
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -171,7 +172,7 @@ void BlenderImporter::InternReadFile( const std::string& pFile,
|
||||||
|
|
||||||
char magic[8] = {0};
|
char magic[8] = {0};
|
||||||
stream->Read(magic,7,1);
|
stream->Read(magic,7,1);
|
||||||
if (strcmp(magic,"BLENDER")) {
|
if (strcmp(magic, Tokens[0] )) {
|
||||||
// Check for presence of the gzip header. If yes, assume it is a
|
// Check for presence of the gzip header. If yes, assume it is a
|
||||||
// compressed blend file and try uncompressing it, else fail. This is to
|
// compressed blend file and try uncompressing it, else fail. This is to
|
||||||
// avoid uncompressing random files which our loader might end up with.
|
// avoid uncompressing random files which our loader might end up with.
|
||||||
|
@ -346,8 +347,9 @@ void BlenderImporter::ConvertBlendFile(aiScene* out, const Scene& in,const FileD
|
||||||
if (cur->object) {
|
if (cur->object) {
|
||||||
if(!cur->object->parent) {
|
if(!cur->object->parent) {
|
||||||
no_parents.push_back(cur->object.get());
|
no_parents.push_back(cur->object.get());
|
||||||
|
} else {
|
||||||
|
conv.objects.insert( cur->object.get() );
|
||||||
}
|
}
|
||||||
else conv.objects.insert(cur->object.get());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (std::shared_ptr<Base> cur = in.basact; cur; cur = cur->next) {
|
for (std::shared_ptr<Base> cur = in.basact; cur; cur = cur->next) {
|
||||||
|
@ -430,8 +432,9 @@ void BlenderImporter::ResolveImage(aiMaterial* out, const Material* mat, const M
|
||||||
// so we can extract the file extension from it.
|
// so we can extract the file extension from it.
|
||||||
const size_t nlen = strlen( img->name );
|
const size_t nlen = strlen( img->name );
|
||||||
const char* s = img->name+nlen, *e = s;
|
const char* s = img->name+nlen, *e = s;
|
||||||
|
while ( s >= img->name && *s != '.' ) {
|
||||||
while (s >= img->name && *s != '.')--s;
|
--s;
|
||||||
|
}
|
||||||
|
|
||||||
tex->achFormatHint[0] = s+1>e ? '\0' : ::tolower( s[1] );
|
tex->achFormatHint[0] = s+1>e ? '\0' : ::tolower( s[1] );
|
||||||
tex->achFormatHint[1] = s+2>e ? '\0' : ::tolower( s[2] );
|
tex->achFormatHint[1] = s+2>e ? '\0' : ::tolower( s[2] );
|
||||||
|
@ -448,8 +451,7 @@ void BlenderImporter::ResolveImage(aiMaterial* out, const Material* mat, const M
|
||||||
tex->pcData = reinterpret_cast<aiTexel*>(ch);
|
tex->pcData = reinterpret_cast<aiTexel*>(ch);
|
||||||
|
|
||||||
LogInfo("Reading embedded texture, original file was "+std::string(img->name));
|
LogInfo("Reading embedded texture, original file was "+std::string(img->name));
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
name = aiString( img->name );
|
name = aiString( img->name );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -805,5 +805,5 @@ void DNA::RegisterConverters() {
|
||||||
converters["Image"] = DNA::FactoryPair( &Structure::Allocate<Image>, &Structure::Convert<Image> );
|
converters["Image"] = DNA::FactoryPair( &Structure::Allocate<Image>, &Structure::Convert<Image> );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#endif // ASSIMP_BUILD_NO_BLEND_IMPORTER
|
#endif // ASSIMP_BUILD_NO_BLEND_IMPORTER
|
||||||
|
|
||||||
|
|
|
@ -1394,9 +1394,9 @@ unsigned int Converter::ConvertMeshMultiMaterial( const MeshGeometry& mesh, cons
|
||||||
// allocate tangents, binormals.
|
// allocate tangents, binormals.
|
||||||
const std::vector<aiVector3D>& tangents = mesh.GetTangents();
|
const std::vector<aiVector3D>& tangents = mesh.GetTangents();
|
||||||
const std::vector<aiVector3D>* binormals = &mesh.GetBinormals();
|
const std::vector<aiVector3D>* binormals = &mesh.GetBinormals();
|
||||||
|
std::vector<aiVector3D> tempBinormals;
|
||||||
|
|
||||||
if ( tangents.size() ) {
|
if ( tangents.size() ) {
|
||||||
std::vector<aiVector3D> tempBinormals;
|
|
||||||
if ( !binormals->size() ) {
|
if ( !binormals->size() ) {
|
||||||
if ( normals.size() ) {
|
if ( normals.size() ) {
|
||||||
// XXX this computes the binormals for the entire mesh, not only
|
// XXX this computes the binormals for the entire mesh, not only
|
||||||
|
|
|
@ -127,8 +127,7 @@ void HMPImporter::InternReadFile( const std::string& pFile,
|
||||||
throw DeadlyImportError( "HMP File is too small.");
|
throw DeadlyImportError( "HMP File is too small.");
|
||||||
|
|
||||||
// Allocate storage and copy the contents of the file to a memory buffer
|
// Allocate storage and copy the contents of the file to a memory buffer
|
||||||
std::vector<uint8_t> buffer(fileSize);
|
mBuffer = new uint8_t[fileSize];
|
||||||
mBuffer = &buffer[0];
|
|
||||||
file->Read( (void*)mBuffer, 1, fileSize);
|
file->Read( (void*)mBuffer, 1, fileSize);
|
||||||
iFileSize = (unsigned int)fileSize;
|
iFileSize = (unsigned int)fileSize;
|
||||||
|
|
||||||
|
@ -174,7 +173,9 @@ void HMPImporter::InternReadFile( const std::string& pFile,
|
||||||
// Set the AI_SCENE_FLAGS_TERRAIN bit
|
// Set the AI_SCENE_FLAGS_TERRAIN bit
|
||||||
pScene->mFlags |= AI_SCENE_FLAGS_TERRAIN;
|
pScene->mFlags |= AI_SCENE_FLAGS_TERRAIN;
|
||||||
|
|
||||||
// File buffer destructs automatically now
|
delete[] mBuffer;
|
||||||
|
mBuffer= nullptr;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -449,11 +450,13 @@ void HMPImporter::ReadFirstSkin(unsigned int iNumSkins, const unsigned char* szC
|
||||||
|
|
||||||
// read the type of the skin ...
|
// read the type of the skin ...
|
||||||
// sometimes we need to skip 12 bytes here, I don't know why ...
|
// sometimes we need to skip 12 bytes here, I don't know why ...
|
||||||
uint32_t iType = *((uint32_t*)szCursor);szCursor += sizeof(uint32_t);
|
uint32_t iType = *((uint32_t*)szCursor);
|
||||||
|
szCursor += sizeof(uint32_t);
|
||||||
if (0 == iType)
|
if (0 == iType)
|
||||||
{
|
{
|
||||||
szCursor += sizeof(uint32_t) * 2;
|
szCursor += sizeof(uint32_t) * 2;
|
||||||
iType = *((uint32_t*)szCursor);szCursor += sizeof(uint32_t);
|
iType = *((uint32_t*)szCursor);
|
||||||
|
szCursor += sizeof(uint32_t);
|
||||||
if (!iType)
|
if (!iType)
|
||||||
throw DeadlyImportError("Unable to read HMP7 skin chunk");
|
throw DeadlyImportError("Unable to read HMP7 skin chunk");
|
||||||
|
|
||||||
|
|
|
@ -269,14 +269,15 @@ void IRRImporter::CopyMaterial(std::vector<aiMaterial*>& materials,
|
||||||
if (UINT_MAX == defMatIdx)
|
if (UINT_MAX == defMatIdx)
|
||||||
{
|
{
|
||||||
defMatIdx = (unsigned int)materials.size();
|
defMatIdx = (unsigned int)materials.size();
|
||||||
aiMaterial* mat = new aiMaterial();
|
//TODO: add this materials to someone?
|
||||||
|
/*aiMaterial* mat = new aiMaterial();
|
||||||
|
|
||||||
aiString s;
|
aiString s;
|
||||||
s.Set(AI_DEFAULT_MATERIAL_NAME);
|
s.Set(AI_DEFAULT_MATERIAL_NAME);
|
||||||
mat->AddProperty(&s,AI_MATKEY_NAME);
|
mat->AddProperty(&s,AI_MATKEY_NAME);
|
||||||
|
|
||||||
aiColor3D c(0.6f,0.6f,0.6f);
|
aiColor3D c(0.6f,0.6f,0.6f);
|
||||||
mat->AddProperty(&c,1,AI_MATKEY_COLOR_DIFFUSE);
|
mat->AddProperty(&c,1,AI_MATKEY_COLOR_DIFFUSE);*/
|
||||||
}
|
}
|
||||||
mesh->mMaterialIndex = defMatIdx;
|
mesh->mMaterialIndex = defMatIdx;
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -116,14 +116,18 @@ const aiImporterDesc* IRRMeshImporter::GetInfo () const
|
||||||
return &desc;
|
return &desc;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void releaseMaterial( aiMaterial *mat ) {
|
static void releaseMaterial( aiMaterial **mat ) {
|
||||||
delete mat;
|
if(*mat!= nullptr) {
|
||||||
mat = nullptr;
|
delete *mat;
|
||||||
|
*mat = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void releaseMesh( aiMesh *mesh ) {
|
static void releaseMesh( aiMesh **mesh ) {
|
||||||
delete mesh;
|
if (*mesh != nullptr){
|
||||||
mesh = nullptr;
|
delete *mesh;
|
||||||
|
*mesh = nullptr;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
|
@ -148,8 +152,8 @@ void IRRMeshImporter::InternReadFile( const std::string& pFile,
|
||||||
meshes.reserve(5);
|
meshes.reserve(5);
|
||||||
|
|
||||||
// temporary data - current mesh buffer
|
// temporary data - current mesh buffer
|
||||||
aiMaterial* curMat = NULL;
|
aiMaterial* curMat = nullptr;
|
||||||
aiMesh* curMesh = NULL;
|
aiMesh* curMesh = nullptr;
|
||||||
unsigned int curMatFlags = 0;
|
unsigned int curMatFlags = 0;
|
||||||
|
|
||||||
std::vector<aiVector3D> curVertices,curNormals,curTangents,curBitangents;
|
std::vector<aiVector3D> curVertices,curNormals,curTangents,curBitangents;
|
||||||
|
@ -170,14 +174,14 @@ void IRRMeshImporter::InternReadFile( const std::string& pFile,
|
||||||
// end of previous buffer. A material and a mesh should be there
|
// end of previous buffer. A material and a mesh should be there
|
||||||
if ( !curMat || !curMesh) {
|
if ( !curMat || !curMesh) {
|
||||||
DefaultLogger::get()->error("IRRMESH: A buffer must contain a mesh and a material");
|
DefaultLogger::get()->error("IRRMESH: A buffer must contain a mesh and a material");
|
||||||
releaseMaterial( curMat );
|
releaseMaterial( &curMat );
|
||||||
releaseMesh( curMesh );
|
releaseMesh( &curMesh );
|
||||||
} else {
|
} else {
|
||||||
materials.push_back(curMat);
|
materials.push_back(curMat);
|
||||||
meshes.push_back(curMesh);
|
meshes.push_back(curMesh);
|
||||||
}
|
}
|
||||||
curMat = NULL;
|
curMat = nullptr;
|
||||||
curMesh = NULL;
|
curMesh = nullptr;
|
||||||
|
|
||||||
curVertices.clear();
|
curVertices.clear();
|
||||||
curColors.clear();
|
curColors.clear();
|
||||||
|
@ -192,7 +196,7 @@ void IRRMeshImporter::InternReadFile( const std::string& pFile,
|
||||||
if (!ASSIMP_stricmp(reader->getNodeName(),"material")) {
|
if (!ASSIMP_stricmp(reader->getNodeName(),"material")) {
|
||||||
if (curMat) {
|
if (curMat) {
|
||||||
DefaultLogger::get()->warn("IRRMESH: Only one material description per buffer, please");
|
DefaultLogger::get()->warn("IRRMESH: Only one material description per buffer, please");
|
||||||
releaseMaterial( curMat );
|
releaseMaterial( &curMat );
|
||||||
}
|
}
|
||||||
curMat = ParseMaterial(curMatFlags);
|
curMat = ParseMaterial(curMatFlags);
|
||||||
}
|
}
|
||||||
|
@ -204,8 +208,8 @@ void IRRMeshImporter::InternReadFile( const std::string& pFile,
|
||||||
// This is possible ... remove the mesh from the list and skip further reading
|
// This is possible ... remove the mesh from the list and skip further reading
|
||||||
DefaultLogger::get()->warn("IRRMESH: Found mesh with zero vertices");
|
DefaultLogger::get()->warn("IRRMESH: Found mesh with zero vertices");
|
||||||
|
|
||||||
releaseMaterial( curMat );
|
releaseMaterial( &curMat );
|
||||||
releaseMesh( curMesh );
|
releaseMesh( &curMesh );
|
||||||
textMeaning = 0;
|
textMeaning = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -248,7 +252,7 @@ void IRRMeshImporter::InternReadFile( const std::string& pFile,
|
||||||
vertexFormat = 2;
|
vertexFormat = 2;
|
||||||
}
|
}
|
||||||
else if (ASSIMP_stricmp("standard", t)) {
|
else if (ASSIMP_stricmp("standard", t)) {
|
||||||
releaseMaterial( curMat );
|
releaseMaterial( &curMat );
|
||||||
DefaultLogger::get()->warn("IRRMESH: Unknown vertex format");
|
DefaultLogger::get()->warn("IRRMESH: Unknown vertex format");
|
||||||
}
|
}
|
||||||
else vertexFormat = 0;
|
else vertexFormat = 0;
|
||||||
|
@ -256,7 +260,7 @@ void IRRMeshImporter::InternReadFile( const std::string& pFile,
|
||||||
}
|
}
|
||||||
else if (!ASSIMP_stricmp(reader->getNodeName(),"indices")) {
|
else if (!ASSIMP_stricmp(reader->getNodeName(),"indices")) {
|
||||||
if (curVertices.empty() && curMat) {
|
if (curVertices.empty() && curMat) {
|
||||||
releaseMaterial( curMat );
|
releaseMaterial( &curMat );
|
||||||
throw DeadlyImportError("IRRMESH: indices must come after vertices");
|
throw DeadlyImportError("IRRMESH: indices must come after vertices");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -272,10 +276,10 @@ void IRRMeshImporter::InternReadFile( const std::string& pFile,
|
||||||
DefaultLogger::get()->warn("IRRMESH: Found mesh with zero indices");
|
DefaultLogger::get()->warn("IRRMESH: Found mesh with zero indices");
|
||||||
|
|
||||||
// mesh - away
|
// mesh - away
|
||||||
releaseMesh( curMesh );
|
releaseMesh( &curMesh );
|
||||||
|
|
||||||
// material - away
|
// material - away
|
||||||
releaseMaterial( curMat );
|
releaseMaterial( &curMat );
|
||||||
|
|
||||||
textMeaning = 0;
|
textMeaning = 0;
|
||||||
continue;
|
continue;
|
||||||
|
@ -487,8 +491,8 @@ void IRRMeshImporter::InternReadFile( const std::string& pFile,
|
||||||
if (curMat || curMesh) {
|
if (curMat || curMesh) {
|
||||||
if ( !curMat || !curMesh) {
|
if ( !curMat || !curMesh) {
|
||||||
DefaultLogger::get()->error("IRRMESH: A buffer must contain a mesh and a material");
|
DefaultLogger::get()->error("IRRMESH: A buffer must contain a mesh and a material");
|
||||||
releaseMaterial( curMat );
|
releaseMaterial( &curMat );
|
||||||
releaseMesh( curMesh );
|
releaseMesh( &curMesh );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
materials.push_back(curMat);
|
materials.push_back(curMat);
|
||||||
|
|
|
@ -1058,8 +1058,6 @@ void LWOImporter::LoadLWO2VertexMap(unsigned int length, bool perPoly)
|
||||||
LWO::PointList& pointList = mCurLayer->mTempPoints;
|
LWO::PointList& pointList = mCurLayer->mTempPoints;
|
||||||
LWO::ReferrerList& refList = mCurLayer->mPointReferrers;
|
LWO::ReferrerList& refList = mCurLayer->mPointReferrers;
|
||||||
|
|
||||||
float temp[4];
|
|
||||||
|
|
||||||
const unsigned int numPoints = (unsigned int)pointList.size();
|
const unsigned int numPoints = (unsigned int)pointList.size();
|
||||||
const unsigned int numFaces = (unsigned int)list.size();
|
const unsigned int numFaces = (unsigned int)list.size();
|
||||||
|
|
||||||
|
@ -1123,10 +1121,12 @@ void LWOImporter::LoadLWO2VertexMap(unsigned int length, bool perPoly)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unique_ptr<float[]> temp(new float[type]);
|
||||||
for (unsigned int l = 0; l < type;++l)
|
for (unsigned int l = 0; l < type;++l)
|
||||||
temp[l] = GetF4();
|
temp[l] = GetF4();
|
||||||
|
|
||||||
DoRecursiveVMAPAssignment(base,type,idx, temp);
|
DoRecursiveVMAPAssignment(base,type,idx, temp.get());
|
||||||
mFileBuffer += diff;
|
mFileBuffer += diff;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -172,8 +172,7 @@ void MDLImporter::InternReadFile( const std::string& pFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
// Allocate storage and copy the contents of the file to a memory buffer
|
// Allocate storage and copy the contents of the file to a memory buffer
|
||||||
std::vector<unsigned char> buffer(iFileSize+1);
|
mBuffer =new unsigned char[iFileSize+1];
|
||||||
mBuffer = &buffer[0];
|
|
||||||
file->Read( (void*)mBuffer, 1, iFileSize);
|
file->Read( (void*)mBuffer, 1, iFileSize);
|
||||||
|
|
||||||
// Append a binary zero to the end of the buffer.
|
// Append a binary zero to the end of the buffer.
|
||||||
|
@ -239,7 +238,8 @@ void MDLImporter::InternReadFile( const std::string& pFile,
|
||||||
0.f,0.f,1.f,0.f,0.f,-1.f,0.f,0.f,0.f,0.f,0.f,1.f);
|
0.f,0.f,1.f,0.f,0.f,-1.f,0.f,0.f,0.f,0.f,0.f,1.f);
|
||||||
|
|
||||||
// delete the file buffer and cleanup
|
// delete the file buffer and cleanup
|
||||||
AI_DEBUG_INVALIDATE_PTR(mBuffer);
|
delete [] mBuffer;
|
||||||
|
mBuffer= nullptr;
|
||||||
AI_DEBUG_INVALIDATE_PTR(pIOHandler);
|
AI_DEBUG_INVALIDATE_PTR(pIOHandler);
|
||||||
AI_DEBUG_INVALIDATE_PTR(pScene);
|
AI_DEBUG_INVALIDATE_PTR(pScene);
|
||||||
}
|
}
|
||||||
|
@ -1557,7 +1557,7 @@ void MDLImporter::InternReadFile_3DGS_MDL7( )
|
||||||
} else {
|
} else {
|
||||||
pcNode->mName.length = ::strlen(szBuffer);
|
pcNode->mName.length = ::strlen(szBuffer);
|
||||||
}
|
}
|
||||||
::strcpy(pcNode->mName.data,szBuffer);
|
::strncpy(pcNode->mName.data,szBuffer,MAXLEN-1);
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -488,7 +488,7 @@ void MDLImporter::ParseSkinLump_3DGS_MDL7(
|
||||||
unsigned int iWidth,
|
unsigned int iWidth,
|
||||||
unsigned int iHeight)
|
unsigned int iHeight)
|
||||||
{
|
{
|
||||||
aiTexture* pcNew = NULL;
|
aiTexture* pcNew = nullptr;
|
||||||
|
|
||||||
// get the type of the skin
|
// get the type of the skin
|
||||||
unsigned int iMasked = (unsigned int)(iType & 0xF);
|
unsigned int iMasked = (unsigned int)(iType & 0xF);
|
||||||
|
@ -522,7 +522,7 @@ void MDLImporter::ParseSkinLump_3DGS_MDL7(
|
||||||
memcpy(pcNew->pcData,szCurrent,pcNew->mWidth);
|
memcpy(pcNew->pcData,szCurrent,pcNew->mWidth);
|
||||||
szCurrent += iWidth;
|
szCurrent += iWidth;
|
||||||
}
|
}
|
||||||
if (0x7 == iMasked)
|
else if (0x7 == iMasked)
|
||||||
{
|
{
|
||||||
// ***** REFERENCE TO EXTERNAL FILE *****
|
// ***** REFERENCE TO EXTERNAL FILE *****
|
||||||
if (1 != iHeight)
|
if (1 != iHeight)
|
||||||
|
@ -546,6 +546,9 @@ void MDLImporter::ParseSkinLump_3DGS_MDL7(
|
||||||
else if (iMasked || !iType || (iType && iWidth && iHeight))
|
else if (iMasked || !iType || (iType && iWidth && iHeight))
|
||||||
{
|
{
|
||||||
// ***** STANDARD COLOR TEXTURE *****
|
// ***** STANDARD COLOR TEXTURE *****
|
||||||
|
if(pcNew!= nullptr)
|
||||||
|
delete pcNew;
|
||||||
|
|
||||||
pcNew = new aiTexture();
|
pcNew = new aiTexture();
|
||||||
if (!iHeight || !iWidth)
|
if (!iHeight || !iWidth)
|
||||||
{
|
{
|
||||||
|
|
|
@ -168,6 +168,8 @@ bool MakeVerboseFormatProcess::MakeVerboseFormat(aiMesh* pcMesh)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// build output vertex weights
|
// build output vertex weights
|
||||||
for (unsigned int i = 0;i < pcMesh->mNumBones;++i)
|
for (unsigned int i = 0;i < pcMesh->mNumBones;++i)
|
||||||
{
|
{
|
||||||
|
@ -177,11 +179,11 @@ bool MakeVerboseFormatProcess::MakeVerboseFormat(aiMesh* pcMesh)
|
||||||
aiVertexWeight *weightToCopy = &( newWeights[i][0] );
|
aiVertexWeight *weightToCopy = &( newWeights[i][0] );
|
||||||
memcpy(pcMesh->mBones[i]->mWeights, weightToCopy,
|
memcpy(pcMesh->mBones[i]->mWeights, weightToCopy,
|
||||||
sizeof(aiVertexWeight) * newWeights[i].size());
|
sizeof(aiVertexWeight) * newWeights[i].size());
|
||||||
delete[] newWeights;
|
|
||||||
} else {
|
} else {
|
||||||
pcMesh->mBones[i]->mWeights = NULL;
|
pcMesh->mBones[i]->mWeights = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
delete[] newWeights;
|
||||||
|
|
||||||
// delete the old members
|
// delete the old members
|
||||||
delete[] pcMesh->mVertices;
|
delete[] pcMesh->mVertices;
|
||||||
|
|
|
@ -257,7 +257,8 @@ void NDOImporter::InternReadFile( const std::string& pFile,
|
||||||
}
|
}
|
||||||
|
|
||||||
aiMesh* mesh = new aiMesh();
|
aiMesh* mesh = new aiMesh();
|
||||||
aiFace* faces = mesh->mFaces = new aiFace[mesh->mNumFaces=face_table.size()];
|
mesh->mNumFaces=face_table.size();
|
||||||
|
aiFace* faces = mesh->mFaces = new aiFace[mesh->mNumFaces];
|
||||||
|
|
||||||
vertices.clear();
|
vertices.clear();
|
||||||
vertices.reserve(4 * face_table.size()); // arbitrarily chosen
|
vertices.reserve(4 * face_table.size()); // arbitrarily chosen
|
||||||
|
@ -298,7 +299,8 @@ void NDOImporter::InternReadFile( const std::string& pFile,
|
||||||
pScene->mMeshes[pScene->mNumMeshes] = mesh;
|
pScene->mMeshes[pScene->mNumMeshes] = mesh;
|
||||||
|
|
||||||
(nd->mMeshes = new unsigned int[nd->mNumMeshes=1])[0]=pScene->mNumMeshes++;
|
(nd->mMeshes = new unsigned int[nd->mNumMeshes=1])[0]=pScene->mNumMeshes++;
|
||||||
}
|
}else
|
||||||
|
delete mesh;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -641,7 +641,7 @@ void SMDImporter::ComputeAbsoluteBoneTransformations()
|
||||||
bone.mOffsetMatrix.Inverse();
|
bone.mOffsetMatrix.Inverse();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
\
|
||||||
// ------------------------------------------------------------------------------------------------
|
// ------------------------------------------------------------------------------------------------
|
||||||
// create output materials
|
// create output materials
|
||||||
void SMDImporter::CreateOutputMaterials()
|
void SMDImporter::CreateOutputMaterials()
|
||||||
|
@ -660,7 +660,7 @@ void SMDImporter::CreateOutputMaterials()
|
||||||
|
|
||||||
if (aszTextures[iMat].length())
|
if (aszTextures[iMat].length())
|
||||||
{
|
{
|
||||||
::strcpy(szName.data, aszTextures[iMat].c_str() );
|
::strncpy(szName.data, aszTextures[iMat].c_str(),MAXLEN-1);
|
||||||
szName.length = aszTextures[iMat].length();
|
szName.length = aszTextures[iMat].length();
|
||||||
pcMat->AddProperty(&szName,AI_MATKEY_TEXTURE_DIFFUSE(0));
|
pcMat->AddProperty(&szName,AI_MATKEY_TEXTURE_DIFFUSE(0));
|
||||||
}
|
}
|
||||||
|
|
|
@ -513,7 +513,7 @@ std::string XFileExporter::toXFileString(aiString &name)
|
||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
void XFileExporter::writePath(aiString path)
|
void XFileExporter::writePath(const aiString &path)
|
||||||
{
|
{
|
||||||
std::string str = std::string(path.C_Str());
|
std::string str = std::string(path.C_Str());
|
||||||
BaseImporter::ConvertUTF8toISO8859_1(str);
|
BaseImporter::ConvertUTF8toISO8859_1(str);
|
||||||
|
|
|
@ -107,7 +107,7 @@ protected:
|
||||||
const ExportProperties* mProperties;
|
const ExportProperties* mProperties;
|
||||||
|
|
||||||
/// write a path
|
/// write a path
|
||||||
void writePath(aiString path);
|
void writePath(const aiString &path);
|
||||||
|
|
||||||
/// The IOSystem for output
|
/// The IOSystem for output
|
||||||
IOSystem* mIOSystem;
|
IOSystem* mIOSystem;
|
||||||
|
|
|
@ -95,6 +95,7 @@ struct aiMetadataEntry
|
||||||
* Helper functions to get the aiType enum entry for a type
|
* Helper functions to get the aiType enum entry for a type
|
||||||
*/
|
*/
|
||||||
// -------------------------------------------------------------------------------
|
// -------------------------------------------------------------------------------
|
||||||
|
|
||||||
inline aiMetadataType GetAiType( bool ) { return AI_BOOL; }
|
inline aiMetadataType GetAiType( bool ) { return AI_BOOL; }
|
||||||
inline aiMetadataType GetAiType( int32_t ) { return AI_INT32; }
|
inline aiMetadataType GetAiType( int32_t ) { return AI_INT32; }
|
||||||
inline aiMetadataType GetAiType( uint64_t ) { return AI_UINT64; }
|
inline aiMetadataType GetAiType( uint64_t ) { return AI_UINT64; }
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (ASSIMP)
|
Open Asset Import Library (ASSIMP)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2010, ASSIMP Development Team
|
Copyright (c) 2006-2016, ASSIMP Development Team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Open Asset Import Library (ASSIMP)
|
Open Asset Import Library (ASSIMP)
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
Copyright (c) 2006-2010, ASSIMP Development Team
|
Copyright (c) 2006-2016, ASSIMP Development Team
|
||||||
All rights reserved.
|
All rights reserved.
|
||||||
|
|
||||||
Redistribution and use of this software in source and binary forms,
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
# Open Asset Import Library (ASSIMP)
|
# Open Asset Import Library (ASSIMP)
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
#
|
#
|
||||||
# Copyright (c) 2006-2013, ASSIMP Development Team
|
# Copyright (c) 2006-2016, ASSIMP Development Team
|
||||||
#
|
#
|
||||||
# All rights reserved.
|
# All rights reserved.
|
||||||
#
|
#
|
||||||
|
|
Binary file not shown.
|
@ -48,10 +48,13 @@ class BlenderIntermediateTest : public ::testing::Test {
|
||||||
// empty
|
// empty
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define NAME_1 "name1"
|
||||||
|
#define NAME_2 "name2"
|
||||||
|
|
||||||
TEST_F( BlenderIntermediateTest,ConversionData_ObjectCompareTest ) {
|
TEST_F( BlenderIntermediateTest,ConversionData_ObjectCompareTest ) {
|
||||||
Object obj1, obj2;
|
Object obj1, obj2;
|
||||||
strncpy( obj1.id.name, "name1", 5 );
|
strncpy( obj1.id.name, NAME_1, sizeof(NAME_1) );
|
||||||
strncpy( obj2.id.name, "name2", 5 );
|
strncpy( obj2.id.name, NAME_2, sizeof(NAME_2) );
|
||||||
Blender::ObjectCompare cmp_false;
|
Blender::ObjectCompare cmp_false;
|
||||||
bool res( cmp_false( &obj1, &obj2 ) );
|
bool res( cmp_false( &obj1, &obj2 ) );
|
||||||
EXPECT_FALSE( res );
|
EXPECT_FALSE( res );
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/*
|
||||||
|
Open Asset Import Library (assimp)
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
|
||||||
|
Copyright (c) 2006-2015, assimp team
|
||||||
|
All rights reserved.
|
||||||
|
|
||||||
|
Redistribution and use of this software in source and binary forms,
|
||||||
|
with or without modification, are permitted provided that the
|
||||||
|
following conditions are met:
|
||||||
|
|
||||||
|
* Redistributions of source code must retain the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer.
|
||||||
|
|
||||||
|
* Redistributions in binary form must reproduce the above
|
||||||
|
copyright notice, this list of conditions and the
|
||||||
|
following disclaimer in the documentation and/or other
|
||||||
|
materials provided with the distribution.
|
||||||
|
|
||||||
|
* Neither the name of the assimp team, nor the names of its
|
||||||
|
contributors may be used to endorse or promote products
|
||||||
|
derived from this software without specific prior
|
||||||
|
written permission of the assimp team.
|
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
*/
|
||||||
|
//
|
Loading…
Reference in New Issue