diff --git a/code/ObjExporter.cpp b/code/ObjExporter.cpp index d08b5f859..6cd69f402 100644 --- a/code/ObjExporter.cpp +++ b/code/ObjExporter.cpp @@ -439,8 +439,14 @@ void ObjExporter::AddMesh(const aiString& name, const aiMesh* m, const aiMatrix4 void ObjExporter::AddNode(const aiNode* nd, const aiMatrix4x4& mParent) { const aiMatrix4x4& mAbs = mParent * nd->mTransformation; + aiMesh *cm( nullptr ); for(unsigned int i = 0; i < nd->mNumMeshes; ++i) { - AddMesh(nd->mName, pScene->mMeshes[nd->mMeshes[i]], mAbs); + cm = pScene->mMeshes[nd->mMeshes[i]]; + if (nullptr != cm) { + AddMesh(cm->mName, pScene->mMeshes[nd->mMeshes[i]], mAbs); + } else { + AddMesh(nd->mName, pScene->mMeshes[nd->mMeshes[i]], mAbs); + } } for(unsigned int i = 0; i < nd->mNumChildren; ++i) { diff --git a/code/OptimizeGraph.cpp b/code/OptimizeGraph.cpp index 5a2607d4f..7835c3f01 100644 --- a/code/OptimizeGraph.cpp +++ b/code/OptimizeGraph.cpp @@ -73,28 +73,28 @@ using namespace Assimp; // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer OptimizeGraphProcess::OptimizeGraphProcess() - : mScene() - , nodes_in() - , nodes_out() - , count_merged() -{} +: mScene() +, nodes_in() +, nodes_out() +, count_merged() { + // empty +} // ------------------------------------------------------------------------------------------------ // Destructor, private as well -OptimizeGraphProcess::~OptimizeGraphProcess() -{} +OptimizeGraphProcess::~OptimizeGraphProcess() { + // empty +} // ------------------------------------------------------------------------------------------------ // Returns whether the processing step is present in the given flag field. -bool OptimizeGraphProcess::IsActive( unsigned int pFlags) const -{ +bool OptimizeGraphProcess::IsActive( unsigned int pFlags) const { return (0 != (pFlags & aiProcess_OptimizeGraph)); } // ------------------------------------------------------------------------------------------------ -// Setup properties for the postprocessing step -void OptimizeGraphProcess::SetupProperties(const Importer* pImp) -{ +// Setup properties for the post-processing step +void OptimizeGraphProcess::SetupProperties(const Importer* pImp) { // Get value of AI_CONFIG_PP_OG_EXCLUDE_LIST std::string tmp = pImp->GetPropertyString(AI_CONFIG_PP_OG_EXCLUDE_LIST,""); AddLockedNodeList(tmp); @@ -102,16 +102,14 @@ void OptimizeGraphProcess::SetupProperties(const Importer* pImp) // ------------------------------------------------------------------------------------------------ // Collect new children -void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list& nodes) -{ +void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list& nodes) { nodes_in += nd->mNumChildren; // Process children std::list child_nodes; for (unsigned int i = 0; i < nd->mNumChildren; ++i) { - CollectNewChildren(nd->mChildren[i],child_nodes); - nd->mChildren[i] = NULL; + nd->mChildren[i] = nullptr; } // Check whether we need this node; if not we can replace it by our own children (warn, danger of incest). @@ -130,13 +128,11 @@ void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list& no if (nd->mNumMeshes || !child_nodes.empty()) { nodes.push_back(nd); - } - else { + } else { delete nd; /* bye, node */ return; } - } - else { + } else { // Retain our current position in the hierarchy nodes.push_back(nd); @@ -160,14 +156,11 @@ void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list& no } } if (n == child->mNumMeshes) { - if (!join_master) { join_master = child; inv = join_master->mTransformation; inv.Inverse(); - } - else { - + } else { child->mTransformation = inv * child->mTransformation ; join.push_back(child); @@ -227,9 +220,10 @@ void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list& no delete[] nd->mChildren; - if (!child_nodes.empty()) + if (!child_nodes.empty()) { nd->mChildren = new aiNode*[child_nodes.size()]; - else nd->mChildren = NULL; + } + else nd->mChildren = nullptr; } nd->mNumChildren = static_cast(child_nodes.size()); @@ -246,9 +240,8 @@ void OptimizeGraphProcess::CollectNewChildren(aiNode* nd, std::list& no } // ------------------------------------------------------------------------------------------------ -// Execute the postprocessing step on the given scene -void OptimizeGraphProcess::Execute( aiScene* pScene) -{ +// Execute the post-processing step on the given scene +void OptimizeGraphProcess::Execute( aiScene* pScene) { DefaultLogger::get()->debug("OptimizeGraphProcess begin"); nodes_in = nodes_out = count_merged = 0; mScene = pScene; @@ -268,7 +261,6 @@ void OptimizeGraphProcess::Execute( aiScene* pScene) for (unsigned int i = 0; i < pScene->mNumAnimations; ++i) { for (unsigned int a = 0; a < pScene->mAnimations[i]->mNumChannels; ++a) { - aiNodeAnim* anim = pScene->mAnimations[i]->mChannels[a]; locked.insert(AI_OG_GETKEY(anim->mNodeName)); } @@ -349,7 +341,7 @@ void OptimizeGraphProcess::Execute( aiScene* pScene) } // ------------------------------------------------------------------------------------------------ -// Buidl a LUT of all instanced meshes +// Build a LUT of all instanced meshes void OptimizeGraphProcess::FindInstancedMeshes (aiNode* pNode) { for (unsigned int i = 0; i < pNode->mNumMeshes;++i) {