Finally free

- Free from mojmath, have to flip many matrix field accesses.
- Free the memory allocated in model cache.
  - Shout out to pepper's DebugMemoryBlock telling me *exactly* where a
    leak was from.
- Instancing and batching seem to mostly work, indirect appears to be
  rendering instances in the wrong places, though they are culled from
  their real location.
This commit is contained in:
Jozufozu 2023-11-23 23:09:46 -08:00
parent 7b0b1883ed
commit 5e42ecc1c6
2 changed files with 28 additions and 27 deletions

View file

@ -11,27 +11,27 @@ import org.lwjgl.system.MemoryUtil;
public final class MatrixUtil { public final class MatrixUtil {
public static float transformPositionX(Matrix4f matrix, float x, float y, float z) { public static float transformPositionX(Matrix4f matrix, float x, float y, float z) {
return fma(matrix.m00(), x, fma(matrix.m01(), y, fma(matrix.m02(), z, matrix.m03()))); return fma(matrix.m00(), x, fma(matrix.m10(), y, fma(matrix.m20(), z, matrix.m30())));
} }
public static float transformPositionY(Matrix4f matrix, float x, float y, float z) { public static float transformPositionY(Matrix4f matrix, float x, float y, float z) {
return fma(matrix.m10(), x, fma(matrix.m11(), y, fma(matrix.m12(), z, matrix.m13()))); return fma(matrix.m01(), x, fma(matrix.m11(), y, fma(matrix.m21(), z, matrix.m31())));
} }
public static float transformPositionZ(Matrix4f matrix, float x, float y, float z) { public static float transformPositionZ(Matrix4f matrix, float x, float y, float z) {
return fma(matrix.m20(), x, fma(matrix.m21(), y, fma(matrix.m22(), z, matrix.m23()))); return fma(matrix.m02(), x, fma(matrix.m12(), y, fma(matrix.m22(), z, matrix.m32())));
} }
public static float transformNormalX(Matrix3f matrix, float x, float y, float z) { public static float transformNormalX(Matrix3f matrix, float x, float y, float z) {
return fma(matrix.m00(), x, fma(matrix.m01(), y, matrix.m02() * z)); return fma(matrix.m00(), x, fma(matrix.m10(), y, matrix.m20() * z));
} }
public static float transformNormalY(Matrix3f matrix, float x, float y, float z) { public static float transformNormalY(Matrix3f matrix, float x, float y, float z) {
return fma(matrix.m10(), x, fma(matrix.m11(), y, matrix.m12() * z)); return fma(matrix.m01(), x, fma(matrix.m11(), y, matrix.m21() * z));
} }
public static float transformNormalZ(Matrix3f matrix, float x, float y, float z) { public static float transformNormalZ(Matrix3f matrix, float x, float y, float z) {
return fma(matrix.m20(), x, fma(matrix.m21(), y, matrix.m22() * z)); return fma(matrix.m02(), x, fma(matrix.m12(), y, matrix.m22() * z));
} }
public static void write(Matrix4f matrix, ByteBuffer buf) { public static void write(Matrix4f matrix, ByteBuffer buf) {
@ -40,20 +40,20 @@ public final class MatrixUtil {
public static void writeUnsafe(Matrix4f matrix, long ptr) { public static void writeUnsafe(Matrix4f matrix, long ptr) {
MemoryUtil.memPutFloat(ptr, matrix.m00()); MemoryUtil.memPutFloat(ptr, matrix.m00());
MemoryUtil.memPutFloat(ptr + 4, matrix.m10()); MemoryUtil.memPutFloat(ptr + 4, matrix.m01());
MemoryUtil.memPutFloat(ptr + 8, matrix.m20()); MemoryUtil.memPutFloat(ptr + 8, matrix.m02());
MemoryUtil.memPutFloat(ptr + 12, matrix.m30()); MemoryUtil.memPutFloat(ptr + 12, matrix.m03());
MemoryUtil.memPutFloat(ptr + 16, matrix.m01()); MemoryUtil.memPutFloat(ptr + 16, matrix.m10());
MemoryUtil.memPutFloat(ptr + 20, matrix.m11()); MemoryUtil.memPutFloat(ptr + 20, matrix.m11());
MemoryUtil.memPutFloat(ptr + 24, matrix.m21()); MemoryUtil.memPutFloat(ptr + 24, matrix.m12());
MemoryUtil.memPutFloat(ptr + 28, matrix.m31()); MemoryUtil.memPutFloat(ptr + 28, matrix.m13());
MemoryUtil.memPutFloat(ptr + 32, matrix.m02()); MemoryUtil.memPutFloat(ptr + 32, matrix.m20());
MemoryUtil.memPutFloat(ptr + 36, matrix.m12()); MemoryUtil.memPutFloat(ptr + 36, matrix.m21());
MemoryUtil.memPutFloat(ptr + 40, matrix.m22()); MemoryUtil.memPutFloat(ptr + 40, matrix.m22());
MemoryUtil.memPutFloat(ptr + 44, matrix.m32()); MemoryUtil.memPutFloat(ptr + 44, matrix.m23());
MemoryUtil.memPutFloat(ptr + 48, matrix.m03()); MemoryUtil.memPutFloat(ptr + 48, matrix.m30());
MemoryUtil.memPutFloat(ptr + 52, matrix.m13()); MemoryUtil.memPutFloat(ptr + 52, matrix.m31());
MemoryUtil.memPutFloat(ptr + 56, matrix.m23()); MemoryUtil.memPutFloat(ptr + 56, matrix.m32());
MemoryUtil.memPutFloat(ptr + 60, matrix.m33()); MemoryUtil.memPutFloat(ptr + 60, matrix.m33());
} }
@ -63,13 +63,13 @@ public final class MatrixUtil {
public static void writeUnsafe(Matrix3f matrix, long ptr) { public static void writeUnsafe(Matrix3f matrix, long ptr) {
MemoryUtil.memPutFloat(ptr, matrix.m00()); MemoryUtil.memPutFloat(ptr, matrix.m00());
MemoryUtil.memPutFloat(ptr + 4, matrix.m10()); MemoryUtil.memPutFloat(ptr + 4, matrix.m01());
MemoryUtil.memPutFloat(ptr + 8, matrix.m20()); MemoryUtil.memPutFloat(ptr + 8, matrix.m02());
MemoryUtil.memPutFloat(ptr + 12, matrix.m01()); MemoryUtil.memPutFloat(ptr + 12, matrix.m10());
MemoryUtil.memPutFloat(ptr + 16, matrix.m11()); MemoryUtil.memPutFloat(ptr + 16, matrix.m11());
MemoryUtil.memPutFloat(ptr + 20, matrix.m21()); MemoryUtil.memPutFloat(ptr + 20, matrix.m12());
MemoryUtil.memPutFloat(ptr + 24, matrix.m02()); MemoryUtil.memPutFloat(ptr + 24, matrix.m20());
MemoryUtil.memPutFloat(ptr + 28, matrix.m12()); MemoryUtil.memPutFloat(ptr + 28, matrix.m21());
MemoryUtil.memPutFloat(ptr + 32, matrix.m22()); MemoryUtil.memPutFloat(ptr + 32, matrix.m22());
} }
@ -96,9 +96,9 @@ public final class MatrixUtil {
* @return The greatest scale factor across all axes. * @return The greatest scale factor across all axes.
*/ */
public static float extractScale(Matrix4f matrix) { public static float extractScale(Matrix4f matrix) {
float scaleSqrX = matrix.m00() * matrix.m00() + matrix.m01() * matrix.m01() + matrix.m02() * matrix.m02(); float scaleSqrX = matrix.m00() * matrix.m00() + matrix.m10() * matrix.m10() + matrix.m20() * matrix.m20();
float scaleSqrY = matrix.m10() * matrix.m10() + matrix.m11() * matrix.m11() + matrix.m12() * matrix.m12(); float scaleSqrY = matrix.m01() * matrix.m01() + matrix.m11() * matrix.m11() + matrix.m21() * matrix.m21();
float scaleSqrZ = matrix.m20() * matrix.m20() + matrix.m21() * matrix.m21() + matrix.m22() * matrix.m22(); float scaleSqrZ = matrix.m02() * matrix.m02() + matrix.m12() * matrix.m12() + matrix.m22() * matrix.m22();
return Math.sqrt(Math.max(Math.max(scaleSqrX, scaleSqrY), scaleSqrZ)); return Math.sqrt(Math.max(Math.max(scaleSqrX, scaleSqrY), scaleSqrZ));
} }
} }

View file

@ -26,6 +26,7 @@ public class ModelCache<T> {
} }
public void clear() { public void clear() {
map.values().forEach(Model::delete);
map.clear(); map.clear();
} }