Optim FindInstancesProcess

ComputePositionEpsilon() is a costly function which was called in the inner
loop although it only uses data from upper loop.
pull/2484/head
Alexandre Avenel 2019-05-22 20:00:33 +02:00
parent f0a0de63e9
commit daef984ac6
1 changed files with 6 additions and 6 deletions

View File

@ -137,6 +137,11 @@ void FindInstancesProcess::Execute( aiScene* pScene)
aiMesh* inst = pScene->mMeshes[i];
hashes[i] = GetMeshHash(inst);
// Find an appropriate epsilon
// to compare position differences against
float epsilon = ComputePositionEpsilon(inst);
epsilon *= epsilon;
for (int a = i-1; a >= 0; --a) {
if (hashes[i] == hashes[a])
{
@ -154,12 +159,7 @@ void FindInstancesProcess::Execute( aiScene* pScene)
orig->mPrimitiveTypes != inst->mPrimitiveTypes)
continue;
// up to now the meshes are equal. find an appropriate
// epsilon to compare position differences against
float epsilon = ComputePositionEpsilon(inst);
epsilon *= epsilon;
// now compare vertex positions, normals,
// up to now the meshes are equal. Now compare vertex positions, normals,
// tangents and bitangents using this epsilon.
if (orig->HasPositions()) {
if(!CompareArrays(orig->mVertices,inst->mVertices,orig->mNumVertices,epsilon))