From 96e7c5885bf8a8a9e9fba8c4cc27609131c9daec Mon Sep 17 00:00:00 2001 From: Electroblob77 <35599699+Electroblob77@users.noreply.github.com> Date: Mon, 13 Apr 2020 18:59:07 +0100 Subject: [PATCH] Try to optimise arcane lock rendering, fixes #399 --- .../client/renderer/RenderArcaneLock.java | 65 +++++++++++-------- 1 file changed, 37 insertions(+), 28 deletions(-) diff --git a/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneLock.java b/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneLock.java index a9f36d1e..e35bdbcc 100644 --- a/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneLock.java +++ b/src/main/java/electroblob/wizardry/client/renderer/RenderArcaneLock.java @@ -20,9 +20,6 @@ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; import org.lwjgl.opengl.GL11; -import java.util.ArrayList; -import java.util.List; - @Mod.EventBusSubscriber(Side.CLIENT) public class RenderArcaneLock { @@ -39,36 +36,44 @@ public class RenderArcaneLock { EntityPlayer player = Minecraft.getMinecraft().player; World world = Minecraft.getMinecraft().world; - - GlStateManager.pushMatrix(); - GlStateManager.enableBlend(); - boolean lighting = GL11.glIsEnabled(GL11.GL_LIGHTING); - GlStateManager.disableLighting(); - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240, 240); - GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - Vec3d origin = player.getPositionEyes(event.getPartialTicks()); - GlStateManager.translate(-origin.x, -origin.y + player.getEyeHeight(), -origin.z); - - GlStateManager.color(1, 1, 1, 1); - - Minecraft.getMinecraft().renderEngine.bindTexture(textures[(player.ticksExisted % (textures.length * 2))/2]); - Tessellator tessellator = Tessellator.getInstance(); BufferBuilder buffer = tessellator.getBuffer(); - buffer.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX); - // Someone managed to get a CME here so let's just copy the list to be safe + boolean flag = false; + boolean lighting = false; + + // Someone managed to get a CME here so let's iterate manually to be safe (don't copy the list, it's expensive!) // It's only cosmetic so if a tileentity somehow gets removed while we're rendering them it's not a big deal - List tileentities = new ArrayList<>(world.loadedTileEntityList); + for(int i=0; i