Fixed a severe performance penalty in .x loader.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@941 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
parent
bd88f744f5
commit
658ca725f6
@ -234,6 +234,14 @@ bool CXMeshFileLoader::load(io::IReadFile* file)
|
||||
}
|
||||
|
||||
// store vertices in buffers and remember relation in verticesLink
|
||||
u32* vCountArray = new u32[mesh->Buffers.size()];
|
||||
memset(vCountArray, 0, mesh->Buffers.size()*sizeof(u32));
|
||||
// count vertices in each buffer and reallocate
|
||||
for (i=0;i<mesh->Vertices.size();++i)
|
||||
++vCountArray[verticesLinkBuffer[i]];
|
||||
for (i=0; i!=mesh->Buffers.size(); ++i)
|
||||
mesh->Buffers[i]->Vertices_Standard.reallocate(vCountArray[i]);
|
||||
// actually store vertices
|
||||
for (i=0;i<mesh->Vertices.size();++i)
|
||||
{
|
||||
scene::SSkinMeshBuffer *buffer = mesh->Buffers[ verticesLinkBuffer[i] ];
|
||||
@ -242,16 +250,19 @@ bool CXMeshFileLoader::load(io::IReadFile* file)
|
||||
buffer->Vertices_Standard.push_back( mesh->Vertices[i] );
|
||||
}
|
||||
|
||||
// count indices per buffer and reallocate
|
||||
memset(vCountArray, 0, mesh->Buffers.size()*sizeof(u32));
|
||||
for (i=0;i<mesh->FaceMaterialIndices.size();++i)
|
||||
++vCountArray[ mesh->FaceMaterialIndices[i] ];
|
||||
for (i=0; i!=mesh->Buffers.size(); ++i)
|
||||
mesh->Buffers[i]->Indices.reallocate(vCountArray[i]);
|
||||
delete [] vCountArray;
|
||||
// create indices per buffer
|
||||
for (i=0;i<mesh->FaceMaterialIndices.size();++i)
|
||||
{
|
||||
scene::SSkinMeshBuffer *buffer = mesh->Buffers[ mesh->FaceMaterialIndices[i] ];
|
||||
buffer->Indices.reallocate(buffer->Indices.size()+3);
|
||||
|
||||
for (u32 id=i*3+0;id!=i*3+3;++id)
|
||||
{
|
||||
buffer->Indices.push_back( verticesLink[ mesh->Indices[id] ] );
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0; i<AnimatedMesh->getAllJoints().size(); ++i)
|
||||
|
Loading…
x
Reference in New Issue
Block a user