NDOLoader: improve reusability of some temporary vectors.
ColladaLoader: fix http://sourceforge.net/tracker/?func=detail&aid=3054873&group_id=226462&atid=1067632, thanks to Adario for the report. git-svn-id: https://assimp.svn.sourceforge.net/svnroot/assimp/trunk@814 67173fc5-114c-0410-ac8e-9d2fd5bffc1fpull/1/head
parent
960f7defd7
commit
e440fb2769
|
@ -229,13 +229,18 @@ void ColladaLoader::ResolveNodeInstances( const ColladaParser& pParser, const Co
|
||||||
end = pNode->mNodeInstances.end(); it != end; ++it)
|
end = pNode->mNodeInstances.end(); it != end; ++it)
|
||||||
{
|
{
|
||||||
// find the corresponding node in the library
|
// find the corresponding node in the library
|
||||||
ColladaParser::NodeLibrary::const_iterator fnd = pParser.mNodeLibrary.find((*it).mNode);
|
|
||||||
if (fnd == pParser.mNodeLibrary.end())
|
// FIX for http://sourceforge.net/tracker/?func=detail&aid=3054873&group_id=226462&atid=1067632
|
||||||
|
// need to check for both name and ID to catch all. The const_cast is legal
|
||||||
|
// because we won't attempt to modify the instanced node although it is kept
|
||||||
|
// non-const.
|
||||||
|
Collada::Node* nd = const_cast<Collada::Node*>(FindNode(pParser.mRootNode,(*it).mNode));
|
||||||
|
if (!nd)
|
||||||
DefaultLogger::get()->error("Collada: Unable to resolve reference to instanced node " + (*it).mNode);
|
DefaultLogger::get()->error("Collada: Unable to resolve reference to instanced node " + (*it).mNode);
|
||||||
|
|
||||||
else {
|
else {
|
||||||
// attach this node to the list of children
|
// attach this node to the list of children
|
||||||
resolved.push_back((*fnd).second);
|
resolved.push_back(nd);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,6 +220,9 @@ void NDOImporter::InternReadFile( const std::string& pFile,
|
||||||
aiNode** cc = root->mChildren = new aiNode* [ root->mNumChildren = static_cast<unsigned int>( objects.size()) ] ();
|
aiNode** cc = root->mChildren = new aiNode* [ root->mNumChildren = static_cast<unsigned int>( objects.size()) ] ();
|
||||||
pScene->mMeshes = new aiMesh* [ root->mNumChildren] ();
|
pScene->mMeshes = new aiMesh* [ root->mNumChildren] ();
|
||||||
|
|
||||||
|
std::vector<aiVector3D> vertices;
|
||||||
|
std::vector<unsigned int> indices;
|
||||||
|
|
||||||
for_each(const Object& obj,objects) {
|
for_each(const Object& obj,objects) {
|
||||||
aiNode* nd = *cc++ = new aiNode(obj.name);
|
aiNode* nd = *cc++ = new aiNode(obj.name);
|
||||||
nd->mParent = root;
|
nd->mParent = root;
|
||||||
|
@ -240,9 +243,7 @@ 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()];
|
aiFace* faces = mesh->mFaces = new aiFace[mesh->mNumFaces=face_table.size()];
|
||||||
|
|
||||||
std::vector<aiVector3D> vertices;
|
vertices.clear();
|
||||||
std::vector<unsigned int> indices;
|
|
||||||
|
|
||||||
vertices.reserve(4 * face_table.size()); // arbitrarily choosen
|
vertices.reserve(4 * face_table.size()); // arbitrarily choosen
|
||||||
for_each(FaceTable::value_type& v, face_table) {
|
for_each(FaceTable::value_type& v, face_table) {
|
||||||
indices.clear();
|
indices.clear();
|
||||||
|
|
Loading…
Reference in New Issue