From 61a81795e5afe551f5622f146ca52d5331069742 Mon Sep 17 00:00:00 2001 From: Jonathan Hamilton Date: Wed, 16 May 2018 17:50:39 -0700 Subject: [PATCH] Change the arbitrary mipmap detection to use the square of the error Hopefully this better matches the user's view of a texture - as large changes in colour should be weighted higher than lots of very small changes Note: This likely invalidates the current heuristic threshold default --- Source/Core/VideoCommon/TextureCacheBase.cpp | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp index 370bdd836b..1b385dcbfe 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/TextureCacheBase.cpp @@ -608,10 +608,13 @@ private: const auto* row2 = ptr2; for (u32 j = 0; j < shape.width; ++j, row1 += 4, row2 += 4) { - average_diff += std::abs(static_cast(row1[0]) - static_cast(row2[0])); - average_diff += std::abs(static_cast(row1[1]) - static_cast(row2[1])); - average_diff += std::abs(static_cast(row1[2]) - static_cast(row2[2])); - average_diff += std::abs(static_cast(row1[3]) - static_cast(row2[3])); + for (int channel = 0; channel < 4; channel++) + { + const float diff = + std::abs(static_cast(row1[channel]) - static_cast(row2[channel])); + const float diff_squared = diff * diff; + average_diff += diff_squared; + } } ptr1 += shape.row_length; ptr2 += shape.row_length;