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
This commit is contained in:
Jonathan Hamilton 2018-05-16 17:50:39 -07:00
parent 8be5cdfcad
commit 61a81795e5
1 changed files with 7 additions and 4 deletions

View File

@ -608,10 +608,13 @@ private:
const auto* row2 = ptr2; const auto* row2 = ptr2;
for (u32 j = 0; j < shape.width; ++j, row1 += 4, row2 += 4) for (u32 j = 0; j < shape.width; ++j, row1 += 4, row2 += 4)
{ {
average_diff += std::abs(static_cast<float>(row1[0]) - static_cast<float>(row2[0])); for (int channel = 0; channel < 4; channel++)
average_diff += std::abs(static_cast<float>(row1[1]) - static_cast<float>(row2[1])); {
average_diff += std::abs(static_cast<float>(row1[2]) - static_cast<float>(row2[2])); const float diff =
average_diff += std::abs(static_cast<float>(row1[3]) - static_cast<float>(row2[3])); std::abs(static_cast<float>(row1[channel]) - static_cast<float>(row2[channel]));
const float diff_squared = diff * diff;
average_diff += diff_squared;
}
} }
ptr1 += shape.row_length; ptr1 += shape.row_length;
ptr2 += shape.row_length; ptr2 += shape.row_length;