Bläddra i källkod

Updated meshoptimizer.

Бранимир Караџић 4 år sedan
förälder
incheckning
4ada836d3d
1 ändrade filer med 11 tillägg och 5 borttagningar
  1. 11 5
      3rdparty/meshoptimizer/src/simplifier.cpp

+ 11 - 5
3rdparty/meshoptimizer/src/simplifier.cpp

@@ -118,8 +118,13 @@ struct PositionHasher
 	{
 		const unsigned int* key = reinterpret_cast<const unsigned int*>(vertex_positions + index * vertex_stride_float);
 
+		// scramble bits to make sure that integer coordinates have entropy in lower bits
+		unsigned int x = key[0] ^ (key[0] >> 17);
+		unsigned int y = key[1] ^ (key[1] >> 17);
+		unsigned int z = key[2] ^ (key[2] >> 17);
+
 		// Optimized Spatial Hashing for Collision Detection of Deformable Objects
-		return (key[0] * 73856093) ^ (key[1] * 19349663) ^ (key[2] * 83492791);
+		return (x * 73856093) ^ (y * 19349663) ^ (z * 83492791);
 	}
 
 	bool equal(unsigned int lhs, unsigned int rhs) const
@@ -1038,7 +1043,7 @@ struct IdHasher
 
 struct TriangleHasher
 {
-	unsigned int* indices;
+	const unsigned int* indices;
 
 	size_t hash(unsigned int i) const
 	{
@@ -1253,9 +1258,10 @@ static float interpolate(float y, float x0, float y0, float x1, float y1, float
 } // namespace meshopt
 
 #ifndef NDEBUG
-unsigned char* meshopt_simplifyDebugKind = 0;
-unsigned int* meshopt_simplifyDebugLoop = 0;
-unsigned int* meshopt_simplifyDebugLoopBack = 0;
+// Note: this is only exposed for debug visualization purposes; do *not* use these in debug builds
+MESHOPTIMIZER_API unsigned char* meshopt_simplifyDebugKind = 0;
+MESHOPTIMIZER_API unsigned int* meshopt_simplifyDebugLoop = 0;
+MESHOPTIMIZER_API unsigned int* meshopt_simplifyDebugLoopBack = 0;
 #endif
 
 size_t meshopt_simplify(unsigned int* destination, const unsigned int* indices, size_t index_count, const float* vertex_positions_data, size_t vertex_count, size_t vertex_positions_stride, size_t target_index_count, float target_error, float* out_result_error)