44 lines
		
	
	
	
		
			1.4 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			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());
 | |
| 	}
 | |
| }
 |