minecraft-src/com/mojang/blaze3d/vertex/VertexSorting.java
2025-07-04 01:41:11 +03:00

42 lines
1.1 KiB
Java

package com.mojang.blaze3d.vertex;
import com.google.common.primitives.Floats;
import it.unimi.dsi.fastutil.ints.IntArrays;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import org.joml.Vector3f;
@Environment(EnvType.CLIENT)
public interface VertexSorting {
VertexSorting DISTANCE_TO_ORIGIN = byDistance(0.0F, 0.0F, 0.0F);
VertexSorting ORTHOGRAPHIC_Z = byDistance(vector3f -> -vector3f.z());
static VertexSorting byDistance(float x, float y, float z) {
return byDistance(new Vector3f(x, y, z));
}
static VertexSorting byDistance(Vector3f vector) {
return byDistance(vector::distanceSquared);
}
static VertexSorting byDistance(VertexSorting.DistanceFunction distanceFunction) {
return vector3fs -> {
float[] fs = new float[vector3fs.length];
int[] is = new int[vector3fs.length];
for (int i = 0; i < vector3fs.length; is[i] = i++) {
fs[i] = distanceFunction.apply(vector3fs[i]);
}
IntArrays.mergeSort(is, (ix, j) -> Floats.compare(fs[j], fs[ix]));
return is;
};
}
int[] sort(Vector3f[] vector3fs);
@Environment(EnvType.CLIENT)
public interface DistanceFunction {
float apply(Vector3f vector3f);
}
}