Browse Source

Using MurmurHash in MeshTools::Clean.

SubdivideCleanBenchmark times are untouched with this change, but the
hash should be better for MeshTools::CombineIndices, where the previous
hash generated all zeros in most cases.
vectorfields
Vladimír Vondruš 14 years ago
parent
commit
62fb2d5470
  1. 6
      src/MeshTools/Clean.h
  2. 6
      src/MeshTools/Test/CMakeLists.txt

6
src/MeshTools/Clean.h

@ -22,6 +22,7 @@
#include <unordered_map> #include <unordered_map>
#include <limits> #include <limits>
#include "Utility/MurmurHash2.h"
#include "TypeTraits.h" #include "TypeTraits.h"
namespace Magnum { namespace MeshTools { namespace Magnum { namespace MeshTools {
@ -113,10 +114,7 @@ template<class Vertex, size_t vertexSize = Vertex::Size> class Clean {
class IndexHash { class IndexHash {
public: public:
inline size_t operator()(const Math::Vector<size_t, vertexSize>& data) const { inline size_t operator()(const Math::Vector<size_t, vertexSize>& data) const {
size_t a = 0; return *reinterpret_cast<const size_t*>(Corrade::Utility::MurmurHash2()(reinterpret_cast<const char*>(&data), sizeof(data)).byteArray());
for(size_t i = 0; i != vertexSize; ++i)
a ^= data[i];
return a;
} }
}; };

6
src/MeshTools/Test/CMakeLists.txt

@ -1,6 +1,6 @@
corrade_add_test(CleanTest CleanTest.h CleanTest.cpp) corrade_add_test(CleanTest CleanTest.h CleanTest.cpp ${CORRADE_UTILITY_LIBRARY})
corrade_add_test(CompressIndicesTest CompressIndicesTest.h CompressIndicesTest.cpp ${CORRADE_UTILITY_LIBRARY} ${MAGNUM_LIBRARY}) corrade_add_test(CompressIndicesTest CompressIndicesTest.h CompressIndicesTest.cpp ${CORRADE_UTILITY_LIBRARY} ${MAGNUM_LIBRARY})
corrade_add_test(InterleaveTest InterleaveTest.h InterleaveTest.cpp ${CORRADE_UTILITY_LIBRARY}) corrade_add_test(InterleaveTest InterleaveTest.h InterleaveTest.cpp ${CORRADE_UTILITY_LIBRARY})
corrade_add_test(SubdivideTest SubdivideTest.h SubdivideTest.cpp) corrade_add_test(SubdivideTest SubdivideTest.h SubdivideTest.cpp ${CORRADE_UTILITY_LIBRARY})
corrade_add_test(SubdivideCleanBenchmark SubdivideCleanBenchmark.h SubdivideCleanBenchmark.cpp ${MAGNUM_PRIMITIVES_LIBRARY}) corrade_add_test(SubdivideCleanBenchmark SubdivideCleanBenchmark.h SubdivideCleanBenchmark.cpp ${CORRADE_UTILITY_LIBRARY} ${MAGNUM_PRIMITIVES_LIBRARY})
corrade_add_test(TipsifyTest TipsifyTest.h TipsifyTest.cpp ${MAGNUM_MESHTOOLS_LIBRARY}) corrade_add_test(TipsifyTest TipsifyTest.h TipsifyTest.cpp ${MAGNUM_MESHTOOLS_LIBRARY})

Loading…
Cancel
Save