diff --git a/code/ProcessHelper.cpp b/code/ProcessHelper.cpp index cb38d96ef..3a774e7b8 100644 --- a/code/ProcessHelper.cpp +++ b/code/ProcessHelper.cpp @@ -95,12 +95,16 @@ void FindMeshCenter (aiMesh* mesh, aiVector3D& out, aiVector3D& min, aiVector3D& } // ------------------------------------------------------------------------------- -void FindSceneCenter (aiScene* scene, aiVector3D& out, aiVector3D& min, aiVector3D& max) -{ - if (scene->mNumMeshes == 0) return; +void FindSceneCenter (aiScene* scene, aiVector3D& out, aiVector3D& min, aiVector3D& max) { + if ( NULL == scene ) { + return; + } + + if ( 0 == scene->mNumMeshes ) { + return; + } FindMeshCenter(scene->mMeshes[0], out, min, max); - for (unsigned int i = 1; i < scene->mNumMeshes; ++i) - { + for (unsigned int i = 1; i < scene->mNumMeshes; ++i) { aiVector3D tout, tmin, tmax; FindMeshCenter(scene->mMeshes[i], tout, tmin, tmax); if (min[0] > tmin[0]) min[0] = tmin[0]; @@ -151,6 +155,8 @@ float ComputePositionEpsilon(const aiMesh* pMesh) // ------------------------------------------------------------------------------- float ComputePositionEpsilon(const aiMesh* const* pMeshes, size_t num) { + ai_assert( NULL != pMeshes ); + const float epsilon = 1e-4f; // calculate the position bounds so we have a reliable epsilon to check position differences against diff --git a/code/RemoveRedundantMaterials.cpp b/code/RemoveRedundantMaterials.cpp index 290396f20..3a8bb065d 100644 --- a/code/RemoveRedundantMaterials.cpp +++ b/code/RemoveRedundantMaterials.cpp @@ -55,7 +55,7 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer RemoveRedundantMatsProcess::RemoveRedundantMatsProcess() -{ +: configFixedMaterials() { // nothing to do here } @@ -126,16 +126,18 @@ void RemoveRedundantMatsProcess::Execute( aiScene* pScene) } } - // TODO: reimplement this algorithm to work in-place - unsigned int* aiMappingTable = new unsigned int[pScene->mNumMaterials]; + // TODO: re-implement this algorithm to work in-place + unsigned int *aiMappingTable = new unsigned int[pScene->mNumMaterials]; + for ( unsigned int i=0; imNumMaterials; i++ ) { + aiMappingTable[ i ] = 0; + } unsigned int iNewNum = 0; // Iterate through all materials and calculate a hash for them // store all hashes in a list and so a quick search whether // we do already have a specific hash. This allows us to // determine which materials are identical. - uint32_t* aiHashes; - aiHashes = new uint32_t[pScene->mNumMaterials]; + uint32_t *aiHashes = new uint32_t[ pScene->mNumMaterials ];; for (unsigned int i = 0; i < pScene->mNumMaterials;++i) { // No mesh is referencing this material, remove it. @@ -177,18 +179,18 @@ void RemoveRedundantMatsProcess::Execute( aiScene* pScene) // generate new names for all modified materials const unsigned int idx = aiMappingTable[p]; - if (ppcMaterials[idx]) - { + if (ppcMaterials[idx]) { aiString sz; sz.length = ::sprintf(sz.data,"JoinedMaterial_#%u",p); ((aiMaterial*)ppcMaterials[idx])->AddProperty(&sz,AI_MATKEY_NAME); - } - else + } else { ppcMaterials[idx] = pScene->mMaterials[p]; + } } // update all material indices for (unsigned int p = 0; p < pScene->mNumMeshes;++p) { aiMesh* mesh = pScene->mMeshes[p]; + ai_assert( NULL!=mesh ); mesh->mMaterialIndex = aiMappingTable[mesh->mMaterialIndex]; } // delete the old material list