aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/makamys/lodmod
diff options
context:
space:
mode:
authormakamys <makamys@outlook.com>2022-06-09 12:57:52 +0200
committermakamys <makamys@outlook.com>2022-06-09 12:57:52 +0200
commit5bea63de0d78487b91dd701a8f6931b9314f2be5 (patch)
tree9a23fc91c986d8763b31c48f670b812e9ce24c8a /src/main/java/makamys/lodmod
parent5820fe56fb4022ddda044a8fe502b59e18147836 (diff)
downloadNeodymium-5bea63de0d78487b91dd701a8f6931b9314f2be5.tar.gz
Neodymium-5bea63de0d78487b91dd701a8f6931b9314f2be5.tar.bz2
Neodymium-5bea63de0d78487b91dd701a8f6931b9314f2be5.zip
Rebrand pt. 1: Rename mod to Neodymium
Diffstat (limited to 'src/main/java/makamys/lodmod')
-rw-r--r--src/main/java/makamys/lodmod/LODMod.java239
-rw-r--r--src/main/java/makamys/lodmod/MixinConfigPlugin.java72
-rw-r--r--src/main/java/makamys/lodmod/ducks/IWorldRenderer.java13
-rw-r--r--src/main/java/makamys/lodmod/mixin/MixinChunkCache.java29
-rw-r--r--src/main/java/makamys/lodmod/mixin/MixinEntityRenderer.java35
-rw-r--r--src/main/java/makamys/lodmod/mixin/MixinRenderBlocks.java29
-rw-r--r--src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java40
-rw-r--r--src/main/java/makamys/lodmod/mixin/MixinRenderGlobal_OptiFine.java25
-rw-r--r--src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java181
-rw-r--r--src/main/java/makamys/lodmod/renderer/ChunkMesh.java455
-rw-r--r--src/main/java/makamys/lodmod/renderer/FarChunkCache.java12
-rw-r--r--src/main/java/makamys/lodmod/renderer/FarWorldRenderer.java14
-rw-r--r--src/main/java/makamys/lodmod/renderer/GPUMemoryManager.java215
-rw-r--r--src/main/java/makamys/lodmod/renderer/LODChunk.java184
-rw-r--r--src/main/java/makamys/lodmod/renderer/LODRegion.java195
-rw-r--r--src/main/java/makamys/lodmod/renderer/LODRenderer.java730
-rw-r--r--src/main/java/makamys/lodmod/renderer/Mesh.java44
-rw-r--r--src/main/java/makamys/lodmod/renderer/MeshQuad.java426
-rw-r--r--src/main/java/makamys/lodmod/renderer/SimpleChunkMesh.java350
-rw-r--r--src/main/java/makamys/lodmod/util/BufferWriter.java46
-rw-r--r--src/main/java/makamys/lodmod/util/GuiHelper.java61
-rw-r--r--src/main/java/makamys/lodmod/util/MCUtil.java20
-rw-r--r--src/main/java/makamys/lodmod/util/SpriteUtil.java55
-rw-r--r--src/main/java/makamys/lodmod/util/Util.java88
24 files changed, 0 insertions, 3558 deletions
diff --git a/src/main/java/makamys/lodmod/LODMod.java b/src/main/java/makamys/lodmod/LODMod.java
deleted file mode 100644
index 6b75d7d..0000000
--- a/src/main/java/makamys/lodmod/LODMod.java
+++ /dev/null
@@ -1,239 +0,0 @@
-package makamys.lodmod;
-
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.gui.FontRenderer;
-import net.minecraft.client.gui.ScaledResolution;
-import net.minecraft.client.renderer.entity.RenderManager;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.world.World;
-import net.minecraftforge.client.event.EntityViewRenderEvent;
-import net.minecraftforge.client.event.RenderGameOverlayEvent;
-import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
-import net.minecraftforge.common.MinecraftForge;
-import net.minecraftforge.common.config.Configuration;
-import net.minecraftforge.event.world.ChunkEvent;
-import net.minecraftforge.event.world.WorldEvent;
-
-import java.io.File;
-import java.lang.reflect.InvocationTargetException;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-import org.apache.logging.log4j.LogManager;
-import org.apache.logging.log4j.Logger;
-import org.lwjgl.input.Keyboard;
-import org.lwjgl.opengl.GL11;
-
-import cpw.mods.fml.common.FMLCommonHandler;
-import cpw.mods.fml.common.Mod;
-import cpw.mods.fml.common.Mod.EventHandler;
-import cpw.mods.fml.common.event.FMLInitializationEvent;
-import cpw.mods.fml.common.event.FMLPreInitializationEvent;
-import cpw.mods.fml.common.eventhandler.SubscribeEvent;
-import cpw.mods.fml.common.gameevent.TickEvent;
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import makamys.lodmod.renderer.LODRenderer;
-import makamys.lodmod.util.SpriteUtil;
-
-@Mod(modid = LODMod.MODID, version = LODMod.VERSION)
-public class LODMod
-{
- public static final String MODID = "lodmod";
- public static final String VERSION = "0.0";
-
- public static final Logger LOGGER = LogManager.getLogger("lodmod");
-
- public static LODRenderer renderer;
-
- public static boolean enabled;
- public static int chunkLoadsPerTick;
- public static List<Class> blockClassBlacklist;
- public static double fogStart;
- public static double fogEnd;
- public static double farPlaneDistanceMultiplier;
- public static float maxSimpleMeshHeight;
- public static boolean forceVanillaBiomeTemperature;
- public static boolean hideUnderVanillaChunks;
- public static boolean disableChunkMeshes;
- public static boolean disableSimpleMeshes;
- public static boolean saveMeshes;
- public static boolean optimizeChunkMeshes;
- public static int maxMeshesPerFrame;
- public static int sortFrequency;
- public static int gcRate;
- public static int VRAMSize;
- public static int debugPrefix;
-
- private File configFile;
-
- public static boolean fogEventWasPosted;
-
- public static boolean ofFastRender;
- public static boolean enableFog;
-
- @EventHandler
- public void preInit(FMLPreInitializationEvent event)
- {
- configFile = event.getSuggestedConfigurationFile();
- reloadConfig();
- }
-
- private void reloadConfig() {
- Configuration config = new Configuration(configFile);
-
- config.load();
- enabled = config.get("General", "enabled", true).getBoolean();
- chunkLoadsPerTick = config.get("General", "chunkLoadsPerTick", 64).getInt();
- blockClassBlacklist = Arrays.stream(config.get("General", "blockClassBlacklist", "net.minecraft.block.BlockRotatedPillar;biomesoplenty.common.blocks.BlockBOPLog;gregapi.block.multitileentity.MultiTileEntityBlock").getString().split(";"))
- .map(className -> {
- try {
- return Class.forName(className);
- } catch (ClassNotFoundException e) {
- return null;
- }
- })
- .filter(Objects::nonNull)
- .collect(Collectors.toList());
- fogStart = config.get("Fog", "fogStart", "0.4").getDouble();
- fogEnd = config.get("Fog", "fogEnd", "0.8").getDouble();
- farPlaneDistanceMultiplier = config.get("Fog", "farPlaneDistanceMultiplier", "1.0").getDouble();
-
- maxSimpleMeshHeight = (float)config.get("Debug", "maxSimpleMeshHeight", 1000.0).getDouble();
-
- forceVanillaBiomeTemperature = config.get("Simple mesh generation", "forceVanillaBiomeTemperature", true).getBoolean();
-
- hideUnderVanillaChunks = config.getBoolean("hideUnderVanillaChunks", "render", true, "");
- disableChunkMeshes = config.getBoolean("disableChunkMeshes", "render", true, "");
- disableSimpleMeshes = config.getBoolean("disableSimpleMeshes", "render", false, "");
- optimizeChunkMeshes = config.getBoolean("optimizeChunkMeshes", "render", true, "");
- saveMeshes = config.getBoolean("saveMeshes", "render", false, "");
- maxMeshesPerFrame = config.getInt("maxMeshesPerFrame", "render", -1, -1, Integer.MAX_VALUE, "");
- sortFrequency = config.getInt("sortFrequency", "render", 1, 1, Integer.MAX_VALUE, "");
- gcRate = config.getInt("gcRate", "render", 1, 1, Integer.MAX_VALUE, "Maximum number of meshes to relocate each frame.");
- VRAMSize = config.getInt("VRAMSize", "render", 1024, 1, Integer.MAX_VALUE, "VRAM buffer size (MB).");
- enableFog = config.getBoolean("enableFog", "render", true, "");
- debugPrefix = config.getInt("debugPrefix", "debug", Keyboard.KEY_F4, -1, Integer.MAX_VALUE, "This key has to be held down while pressing the debug keybinds. LWJGL keycode. Setting this to 0 will make the keybinds usable without holding anything else down. Setting this to -1 will disable debug keybinds entirely.");
-
- if(config.hasChanged()) {
- config.save();
- }
- }
-
- @EventHandler
- public void init(FMLInitializationEvent event)
- {
- FMLCommonHandler.instance().bus().register(this);
- MinecraftForge.EVENT_BUS.register(this);
- }
-
- private void onPlayerWorldChanged(World newWorld) {
- if(getRendererWorld() == null && newWorld != null) {
- reloadConfig();
- if(enabled) {
- SpriteUtil.init();
- }
- }
- if(renderer != null) {
- renderer.destroy();
- renderer = null;
- }
- if(enabled && newWorld != null) {
- renderer = new LODRenderer(newWorld);
- }
- }
-
- @SubscribeEvent
- @SideOnly(Side.CLIENT)
- public void onWorldUnload(WorldEvent.Unload event) {
- if(event.world == getRendererWorld()) {
- onPlayerWorldChanged(null);
- }
- }
-
- @SubscribeEvent
- public void onChunkLoad(ChunkEvent.Load event) {
- if(!event.world.isRemote) return;
-
- if(isActive()) {
- renderer.onChunkLoad(event);
- }
- }
-
- public static boolean isActive() {
- return renderer != null && renderer.hasInited && !renderer.destroyPending;
- }
-
- private World getRendererWorld() {
- return renderer != null ? renderer.world : null;
- }
-
- @SubscribeEvent
- public void onClientTick(TickEvent.ClientTickEvent event) {
- if(event.phase == TickEvent.Phase.START) {
- EntityPlayer player = Minecraft.getMinecraft().thePlayer;
- World world = player != null ? player.worldObj : null;
- if(world != getRendererWorld()) {
- onPlayerWorldChanged(world);
- }
-
- if(MixinConfigPlugin.isOptiFinePresent()) {
- try {
- ofFastRender = (boolean)Class.forName("Config").getMethod("isFastRender").invoke(null);
- } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException
- | SecurityException | ClassNotFoundException e) {
- // oops
- }
- }
- }
- }
-
- @SubscribeEvent
- public void onServerTick(TickEvent.ServerTickEvent event) {
- if(event.phase == TickEvent.Phase.START) {
- if(isActive()) {
- renderer.serverTick();
- }
- }
- }
-
- @SubscribeEvent
- public void onRenderTick(TickEvent.RenderTickEvent event) {
- if(event.phase == TickEvent.Phase.END) {
- if(isActive()) {
- renderer.onRenderTickEnd();
- }
- }
- }
-
- @SubscribeEvent
- public void onRenderOverlay(RenderGameOverlayEvent event) {
- FontRenderer fontRenderer = RenderManager.instance.getFontRenderer();
- if(isActive() && event.type == ElementType.TEXT && fontRenderer != null && Minecraft.getMinecraft().gameSettings.showDebugInfo)
- {
- Minecraft mc = Minecraft.getMinecraft();
- ScaledResolution scaledresolution = new ScaledResolution(mc, mc.displayWidth, mc.displayHeight);
- int w = scaledresolution.getScaledWidth();
- int h = scaledresolution.getScaledHeight();
-
- int yOffset = 0;
- for(String s : renderer.getDebugText()) {
- fontRenderer.drawStringWithShadow(s, w - fontRenderer.getStringWidth(s) - 10, 80 + yOffset, 0xFFFFFF);
- yOffset += 10;
- }
- }
- }
-
-
- @SubscribeEvent
- public void onRenderFog(EntityViewRenderEvent.RenderFogEvent event) {
- fogEventWasPosted = true;
- }
-
- public static boolean shouldRenderVanillaWorld() {
- return !isActive() || (isActive() && renderer.renderWorld && !renderer.rendererActive);
- }
-
-}
diff --git a/src/main/java/makamys/lodmod/MixinConfigPlugin.java b/src/main/java/makamys/lodmod/MixinConfigPlugin.java
deleted file mode 100644
index be8ac7c..0000000
--- a/src/main/java/makamys/lodmod/MixinConfigPlugin.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package makamys.lodmod;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
-
-import org.spongepowered.asm.lib.tree.ClassNode;
-import org.spongepowered.asm.mixin.extensibility.IMixinConfigPlugin;
-import org.spongepowered.asm.mixin.extensibility.IMixinInfo;
-
-public class MixinConfigPlugin implements IMixinConfigPlugin {
-
- private static boolean isOptiFinePresent = MixinConfigPlugin.class.getResource("/optifine/OptiFineTweaker.class") != null;
-
- @Override
- public void onLoad(String mixinPackage) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public String getRefMapperConfig() {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public boolean shouldApplyMixin(String targetClassName, String mixinClassName) {
- return true;
- }
-
- @Override
- public void acceptTargets(Set<String> myTargets, Set<String> otherTargets) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public List<String> getMixins() {
- List<String> mixins = new ArrayList<>();
- mixins.addAll(Arrays.asList("MixinChunkCache",
- "MixinEntityRenderer",
- "MixinRenderGlobal",
- "MixinWorldRenderer",
- "MixinRenderBlocks"));
-
- if (isOptiFinePresent()) {
- System.out.println("Detected OptiFine");
- mixins.add("MixinRenderGlobal_OptiFine");
- }
-
- return mixins;
- }
-
- @Override
- public void preApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
- // TODO Auto-generated method stub
-
- }
-
- @Override
- public void postApply(String targetClassName, ClassNode targetClass, String mixinClassName, IMixinInfo mixinInfo) {
- // TODO Auto-generated method stub
-
- }
-
- public static boolean isOptiFinePresent() {
- return isOptiFinePresent;
- }
-
-}
diff --git a/src/main/java/makamys/lodmod/ducks/IWorldRenderer.java b/src/main/java/makamys/lodmod/ducks/IWorldRenderer.java
deleted file mode 100644
index 6527ba7..0000000
--- a/src/main/java/makamys/lodmod/ducks/IWorldRenderer.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package makamys.lodmod.ducks;
-
-import java.util.List;
-
-import org.spongepowered.asm.mixin.Mixin;
-
-import makamys.lodmod.renderer.ChunkMesh;
-import net.minecraft.client.renderer.WorldRenderer;
-
-public interface IWorldRenderer {
- public List<ChunkMesh> getChunkMeshes();
- public boolean isDrawn();
-}
diff --git a/src/main/java/makamys/lodmod/mixin/MixinChunkCache.java b/src/main/java/makamys/lodmod/mixin/MixinChunkCache.java
deleted file mode 100644
index e989ddf..0000000
--- a/src/main/java/makamys/lodmod/mixin/MixinChunkCache.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package makamys.lodmod.mixin;
-
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
-
-import makamys.lodmod.LODMod;
-import makamys.lodmod.renderer.FarChunkCache;
-import makamys.lodmod.renderer.LODRenderer;
-import net.minecraft.world.ChunkCache;
-import net.minecraft.world.World;
-import net.minecraft.world.chunk.Chunk;
-
-@Mixin(ChunkCache.class)
-abstract class MixinChunkCache {
-
- @Redirect(method = "<init>*", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;getChunkFromChunkCoords(II)Lnet/minecraft/world/chunk/Chunk;"))
- private Chunk redirectGetChunkFromChunkCoords(World world, int p1, int p2) {
- Chunk chunk = world.getChunkFromChunkCoords(p1, p2);
- if(LODMod.isActive() && FarChunkCache.class.isInstance(this.getClass()) && chunk.isEmpty()) {
- Chunk myChunk = LODMod.renderer.getChunkFromChunkCoords(p1, p2);
- if(myChunk != null) {
- chunk = myChunk;
- }
- }
- return chunk;
- }
-
-}
diff --git a/src/main/java/makamys/lodmod/mixin/MixinEntityRenderer.java b/src/main/java/makamys/lodmod/mixin/MixinEntityRenderer.java
deleted file mode 100644
index 423fcd4..0000000
--- a/src/main/java/makamys/lodmod/mixin/MixinEntityRenderer.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package makamys.lodmod.mixin;
-
-import org.lwjgl.opengl.GL11;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.Redirect;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-
-import makamys.lodmod.LODMod;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.EntityRenderer;
-import net.minecraft.entity.EntityLivingBase;
-
-@Mixin(EntityRenderer.class)
-abstract class MixinEntityRenderer {
-
- @Shadow
- private float farPlaneDistance;
-
- @Inject(method = "setupCameraTransform", at = @At(value = "FIELD", target = "Lnet/minecraft/client/renderer/EntityRenderer;farPlaneDistance:F", shift = At.Shift.AFTER, ordinal = 1))
- private void onConstructed(CallbackInfo ci) {
- if(LODMod.isActive()) {
- farPlaneDistance *= LODMod.renderer.getFarPlaneDistanceMultiplier();
- }
- }
-
- @Inject(method = "setupFog", at = @At(value = "RETURN"))
- private void afterSetupFog(int mode, float alpha, CallbackInfo ci) {
- if(LODMod.isActive()) {
- LODMod.renderer.afterSetupFog(mode, alpha, farPlaneDistance);
- }
- }
-}
diff --git a/src/main/java/makamys/lodmod/mixin/MixinRenderBlocks.java b/src/main/java/makamys/lodmod/mixin/MixinRenderBlocks.java
deleted file mode 100644
index 2812eff..0000000
--- a/src/main/java/makamys/lodmod/mixin/MixinRenderBlocks.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package makamys.lodmod.mixin;
-
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
-
-import cpw.mods.fml.relauncher.Side;
-import cpw.mods.fml.relauncher.SideOnly;
-import makamys.lodmod.LODMod;
-import makamys.lodmod.renderer.FarChunkCache;
-import net.minecraft.block.Block;
-import net.minecraft.client.renderer.RenderBlocks;
-import net.minecraft.world.IBlockAccess;
-import net.minecraft.world.World;
-import net.minecraft.world.chunk.Chunk;
-
-@Mixin(RenderBlocks.class)
-abstract class MixinRenderBlocks {
-
- @Redirect(method = "renderBlockLiquid", at = @At(value = "INVOKE", target = "Lnet/minecraft/block/Block;shouldSideBeRendered(Lnet/minecraft/world/IBlockAccess;IIII)Z"))
- public boolean shouldSideBeRendered(Block block, IBlockAccess ba, int x, int y, int z, int w) {
- if(LODMod.isActive()) {
- return LODMod.renderer.shouldSideBeRendered(block, ba, x, y, z, w);
- } else {
- return block.shouldSideBeRendered(ba, x, y, z, w);
- }
- }
-
-}
diff --git a/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java b/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java
deleted file mode 100644
index 18f2177..0000000
--- a/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package makamys.lodmod.mixin;
-
-import java.nio.IntBuffer;
-
-import org.lwjgl.opengl.GL11;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.ModifyVariable;
-import org.spongepowered.asm.mixin.injection.Redirect;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
-
-import makamys.lodmod.LODMod;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.RenderGlobal;
-import net.minecraft.client.renderer.WorldRenderer;
-import net.minecraft.entity.Entity;
-
-@Mixin(RenderGlobal.class)
-abstract class MixinRenderGlobal {
-
- @Shadow
- private WorldRenderer[] sortedWorldRenderers;
-
- @Redirect(method = "renderSortedRenderers", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderAllRenderLists(ID)V"))
- private void redirectRenderAllRenderLists(RenderGlobal thiz, int p1, double p2) {
- if(LODMod.shouldRenderVanillaWorld()) {
- thiz.renderAllRenderLists(p1, p2);
- }
- }
-
- @Inject(method = "renderSortedRenderers", at = @At(value = "HEAD"))
- public void preRenderSortedRenderers(int startRenderer, int numRenderers, int renderPass, double partialTickTime, CallbackInfoReturnable cir) {
- if(LODMod.isActive()) {
- LODMod.renderer.preRenderSortedRenderers(renderPass, partialTickTime, sortedWorldRenderers);
- }
- }
-}
diff --git a/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal_OptiFine.java b/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal_OptiFine.java
deleted file mode 100644
index 521bf1a..0000000
--- a/src/main/java/makamys/lodmod/mixin/MixinRenderGlobal_OptiFine.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package makamys.lodmod.mixin;
-
-import java.nio.IntBuffer;
-
-import org.lwjgl.opengl.GL11;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Redirect;
-
-import makamys.lodmod.LODMod;
-import net.minecraft.client.renderer.RenderBlocks;
-import net.minecraft.client.renderer.RenderGlobal;
-
-@Mixin(RenderGlobal.class)
-abstract class MixinRenderGlobal_OptiFine {
-
- // for OptiFine's Fast Render option
- @Redirect(method = "renderSortedRenderersFast", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glCallLists(Ljava/nio/IntBuffer;)V"), remap=false)
- private void redirectRenderAllRenderLists(IntBuffer buffer) {
- if(LODMod.shouldRenderVanillaWorld()) {
- GL11.glCallLists(buffer);
- }
- }
-
-}
diff --git a/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java b/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java
deleted file mode 100644
index 5753798..0000000
--- a/src/main/java/makamys/lodmod/mixin/MixinWorldRenderer.java
+++ /dev/null
@@ -1,181 +0,0 @@
-package makamys.lodmod.mixin;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.lwjgl.opengl.GL11;
-import org.spongepowered.asm.mixin.Mixin;
-import org.spongepowered.asm.mixin.Shadow;
-import org.spongepowered.asm.mixin.injection.At;
-import org.spongepowered.asm.mixin.injection.Inject;
-import org.spongepowered.asm.mixin.injection.Redirect;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
-
-import makamys.lodmod.LODMod;
-import makamys.lodmod.ducks.IWorldRenderer;
-import makamys.lodmod.renderer.ChunkMesh;
-import makamys.lodmod.renderer.FarChunkCache;
-import makamys.lodmod.renderer.FarWorldRenderer;
-import makamys.lodmod.renderer.LODRenderer;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.WorldRenderer;
-import net.minecraft.client.renderer.entity.RenderItem;
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.util.AxisAlignedBB;
-import net.minecraft.world.ChunkCache;
-import net.minecraft.world.World;
-
-@Mixin(WorldRenderer.class)
-abstract class MixinWorldRenderer implements IWorldRenderer {
-
- @Shadow
- public int posX;
- @Shadow
- public int posY;
- @Shadow
- public int posZ;
-
- @Shadow
- private boolean isInFrustum;
- @Shadow
- public boolean[] skipRenderPass;
- @Shadow
- private int glRenderList;
-
- @Shadow
- public boolean needsUpdate;
-
- boolean savedDrawnStatus;
-
- public List<ChunkMesh> chunkMeshes;
-
- @Redirect(method = "setPosition", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/entity/RenderItem;renderAABB(Lnet/minecraft/util/AxisAlignedBB;)V"))
- private void redirectRenderAABB(AxisAlignedBB p1) {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- RenderItem.renderAABB(p1);
- }
- }
-
- @Redirect(method = "updateRenderer", at = @At(value = "NEW", target = "Lnet/minecraft/world/ChunkCache;"))
- private ChunkCache redirectConstructChunkCache(World p1, int p2, int p3, int p4, int p5, int p6, int p7, int p8) {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- return new ChunkCache(p1, p2, p3, p4, p5, p6, p7, p8);
- } else {
- return new FarChunkCache(p1, p2, p3, p4, p5, p6, p7, p8);
- }
- }
-
- @Inject(method = "updateRenderer", at = @At(value = "HEAD"))
- private void preUpdateRenderer(CallbackInfo ci) {
- saveDrawnStatus();
-
- if(LODMod.isActive()) {
- if(needsUpdate) {
- if(chunkMeshes != null) {
- chunkMeshes.clear();
- } else {
- chunkMeshes = new ArrayList<>();
- }
- } else {
- chunkMeshes = null;
- }
- }
- }
-
- @Inject(method = "updateRenderer", at = @At(value = "RETURN"))
- private void postUpdateRenderer(CallbackInfo ci) {
- notifyIfDrawnStatusChanged();
-
- if(LODMod.isActive()) {
- if(chunkMeshes != null) {
- LODMod.renderer.onWorldRendererPost(WorldRenderer.class.cast(this));
- chunkMeshes.clear();
- }
- }
- }
-
- @Inject(method = "postRenderBlocks", at = @At(value = "HEAD"))
- private void prePostRenderBlocks(int pass, EntityLivingBase entity, CallbackInfo ci) {
- if(LODMod.isActive() && !LODMod.disableChunkMeshes) {
- if(chunkMeshes != null) {
- chunkMeshes.add(ChunkMesh.fromTessellator(pass, WorldRenderer.class.cast(this), Tessellator.instance));
- }
- }
- }
-
- @Redirect(method = "postRenderBlocks", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Tessellator;draw()I"))
- private int redirectPostRenderBlocksDraw() {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- return Tessellator.instance.draw();
- } else {
- Tessellator.instance.reset();
- return 0;
- }
- }
-
- // There's probably a nicer way to do this
-
- @Redirect(method = "postRenderBlocks", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glPopMatrix()V"))
- private void redirectPostRenderBlocksGL1() {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- GL11.glPopMatrix();
- }
- }
-
- @Redirect(method = "postRenderBlocks", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glEndList()V"))
- private void redirectPostRenderBlocksGL2() {
- if(!FarWorldRenderer.class.isInstance(this.getClass())) {
- GL11.glEndList();
- }
- }
-
- // XXX this is inconsistent, Forge callbacks are preserved in postRenderBlocks but not preRenderBlocks
-
- @Inject(method = "preRenderBlocks", at = @At(value = "HEAD"))
- private void preRenderBlocksInjector(CallbackInfo ci) {
- if(FarWorldRenderer.class.isInstance(this.getClass())) {
- Tessellator.instance.setTranslation((double)(-this.posX), (double)(-this.posY), (double)(-this.posZ));
- ci.cancel();
- }
- }
-
- @Inject(method = "setDontDraw", at = @At(value = "HEAD"))
- private void preSetDontDraw(CallbackInfo ci) {
- if(LODMod.isActive()) {
- LODMod.renderer.onWorldRendererChanged(WorldRenderer.class.cast(this), LODRenderer.WorldRendererChange.DELETED);
- }
- }
-
- @Override
- public List<ChunkMesh> getChunkMeshes() {
- return chunkMeshes;
- }
-
- @Inject(method = "updateInFrustum", at = @At(value = "HEAD"))
- private void preUpdateInFrustum(CallbackInfo ci) {
- saveDrawnStatus();
- }
-
- @Inject(method = "updateInFrustum", at = @At(value = "RETURN"))
- private void postUpdateInFrustum(CallbackInfo ci) {
- notifyIfDrawnStatusChanged();
- }
-
- private void saveDrawnStatus() {
- savedDrawnStatus = isDrawn();
- }
-
- private void notifyIfDrawnStatusChanged() {
- boolean drawn = isDrawn();
- if(LODMod.isActive() && drawn != savedDrawnStatus) {
- LODMod.renderer.onWorldRendererChanged(WorldRenderer.class.cast(this), drawn ? LODRenderer.WorldRendererChange.VISIBLE : LODRenderer.WorldRendererChange.INVISIBLE);
- }
- }
-
- @Override
- public boolean isDrawn() {
- return isInFrustum && (!skipRenderPass[0] || !skipRenderPass[1]);
- }
-}
diff --git a/src/main/java/makamys/lodmod/renderer/ChunkMesh.java b/src/main/java/makamys/lodmod/renderer/ChunkMesh.java
deleted file mode 100644
index f07a908..0000000
--- a/src/main/java/makamys/lodmod/renderer/ChunkMesh.java
+++ /dev/null
@@ -1,455 +0,0 @@
-package makamys.lodmod.renderer;
-
-import java.io.ByteArrayOutputStream;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.FloatBuffer;
-import java.nio.IntBuffer;
-import java.nio.ShortBuffer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import org.lwjgl.BufferUtils;
-
-import makamys.lodmod.LODMod;
-import makamys.lodmod.MixinConfigPlugin;
-import makamys.lodmod.ducks.IWorldRenderer;
-import makamys.lodmod.util.BufferWriter;
-import net.minecraft.client.Minecraft;
-import net.minecraft.client.renderer.Tessellator;
-import net.minecraft.client.renderer.WorldRenderer;
-import net.minecraft.client.renderer.texture.TextureAtlasSprite;
-import net.minecraft.client.renderer.texture.TextureMap;
-import net.minecraft.entity.Entity;
-import net.minecraft.nbt.NBTBase;
-import net.minecraft.nbt.NBTTagByteArray;
-import net.minecraft.tileentity.TileEntity;
-
-public class ChunkMesh extends Mesh {
-
- Flags flags;
-
- // TODO move this somewhere else
- List<String> nameList = (List<String>) ((TextureMap)Minecraft.getMinecraft().getTextureManager().getTexture(TextureMap.locationBlocksTexture)).mapUploadedSprites.keySet().stream().collect(Collectors.toList());
-
- public static int usedRAM = 0;
- public static int instances = 0;
-
- public ChunkMesh(int x, int y, int z, Flags flags, int quadCount, ByteBuffer buffer, int pass) {
- this.x = x;
- this.y = y;
- this.z = z;
- this.flags = flags;
- this.quadCount = quadCount;
- this.pass = pass;
-
- this.buffer = buffer;
- usedRAM += buffer.limit();
- instances++;