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

44 lines
1.4 KiB
Java

package com.mojang.blaze3d.platform;
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
import java.lang.invoke.MethodHandles.Lookup;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
import org.jetbrains.annotations.Nullable;
import org.lwjgl.system.Pointer;
@Environment(EnvType.CLIENT)
public class DebugMemoryUntracker {
@Nullable
private static final MethodHandle UNTRACK = GLX.make(() -> {
try {
Lookup lookup = MethodHandles.lookup();
Class<?> class_ = Class.forName("org.lwjgl.system.MemoryManage$DebugAllocator");
Method method = class_.getDeclaredMethod("untrack", long.class);
method.setAccessible(true);
Field field = Class.forName("org.lwjgl.system.MemoryUtil$LazyInit").getDeclaredField("ALLOCATOR");
field.setAccessible(true);
Object object = field.get(null);
return class_.isInstance(object) ? lookup.unreflect(method) : null;
} catch (NoSuchMethodException | NoSuchFieldException | IllegalAccessException | ClassNotFoundException var5) {
throw new RuntimeException(var5);
}
});
public static void untrack(long memAddr) {
if (UNTRACK != null) {
try {
UNTRACK.invoke(memAddr);
} catch (Throwable var3) {
throw new RuntimeException(var3);
}
}
}
public static void untrack(Pointer pointer) {
untrack(pointer.address());
}
}