Optimized usedVertexIndices by using bitmask instead of unordered_set
parent
cff81568f3
commit
72b178b9fc
|
@ -264,12 +264,13 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
||||||
// We should care only about used vertices, not all of them
|
// We should care only about used vertices, not all of them
|
||||||
// (this can happen due to original file vertices buffer being used by
|
// (this can happen due to original file vertices buffer being used by
|
||||||
// multiple meshes)
|
// multiple meshes)
|
||||||
std::unordered_set<unsigned int> usedVertexIndices;
|
std::vector<unsigned int> usedVertexIndicesMask;
|
||||||
usedVertexIndices.reserve(pMesh->mNumVertices);
|
usedVertexIndicesMask.resize((pMesh->mNumVertices + 31) / 32, 0);
|
||||||
for( unsigned int a = 0; a < pMesh->mNumFaces; a++) {
|
for (unsigned int a = 0; a < pMesh->mNumFaces; a++) {
|
||||||
aiFace& face = pMesh->mFaces[a];
|
aiFace& face = pMesh->mFaces[a];
|
||||||
for( unsigned int b = 0; b < face.mNumIndices; b++) {
|
for (unsigned int b = 0; b < face.mNumIndices; b++) {
|
||||||
usedVertexIndices.insert(face.mIndices[b]);
|
const unsigned int currIndex = face.mIndices[b];
|
||||||
|
usedVertexIndicesMask[currIndex / 32] |= 1u << (currIndex % 32);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -335,7 +336,7 @@ int JoinVerticesProcess::ProcessMesh( aiMesh* pMesh, unsigned int meshIndex) {
|
||||||
int newIndex = 0;
|
int newIndex = 0;
|
||||||
for( unsigned int a = 0; a < pMesh->mNumVertices; a++) {
|
for( unsigned int a = 0; a < pMesh->mNumVertices; a++) {
|
||||||
// if the vertex is unused Do nothing
|
// if the vertex is unused Do nothing
|
||||||
if (usedVertexIndices.find(a) == usedVertexIndices.end()) {
|
if (0 == (usedVertexIndicesMask[a / 32] & (1u << (a % 32)))) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// collect the vertex data
|
// collect the vertex data
|
||||||
|
|
Loading…
Reference in New Issue