mirror of
https://github.com/PaperMC/Paper.git
synced 2024-12-27 06:50:12 +01:00
Optimise color distance check in MapPalette by removing floating point math
This commit is contained in:
parent
30b4dedabb
commit
14832a70e9
1 changed files with 11 additions and 6 deletions
|
@ -29,14 +29,19 @@ public final class MapPalette {
|
|||
}
|
||||
|
||||
private static double getDistance(@NotNull Color c1, @NotNull Color c2) {
|
||||
double rmean = (c1.getRed() + c2.getRed()) / 2.0;
|
||||
double r = c1.getRed() - c2.getRed();
|
||||
double g = c1.getGreen() - c2.getGreen();
|
||||
// Paper start - Optimize color distance calculation by removing floating point math
|
||||
int rsum = c1.getRed() + c2.getRed(); // Use sum instead of mean for no division
|
||||
int r = c1.getRed() - c2.getRed();
|
||||
int g = c1.getGreen() - c2.getGreen();
|
||||
int b = c1.getBlue() - c2.getBlue();
|
||||
double weightR = 2 + rmean / 256.0;
|
||||
double weightG = 4.0;
|
||||
double weightB = 2 + (255 - rmean) / 256.0;
|
||||
// All weights are 512x their original to avoid floating point division
|
||||
int weightR = 1024 + rsum;
|
||||
int weightG = 2048;
|
||||
int weightB = 1024 + (255*2 - rsum);
|
||||
|
||||
// Division by 256 here is unnecessary as this won't change the result of the sort
|
||||
return weightR * r * r + weightG * g * g + weightB * b * b;
|
||||
// Paper end
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
|
Loading…
Reference in a new issue