From 42d7ed58aa27cbfffc59902c8aa346f792a372be Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Thu, 8 Jan 2026 19:26:56 -0800 Subject: [PATCH] 2.0.0 Alpha1 Fixes (#1240) --- .../rendering/celeritas/world/WorldSlice.java | 9 +++++---- .../net/coderbot/iris/gl/shader/StandardMacros.java | 11 +++++++++++ .../net/coderbot/iris/pipeline/PipelineManager.java | 9 +++++++++ .../iris/pipeline/transform/ShaderTransformer.java | 10 +++++----- .../early/celeritas/terrain/MixinRenderGlobal.java | 8 ++++++++ 5 files changed, 38 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/gtnewhorizons/angelica/rendering/celeritas/world/WorldSlice.java b/src/main/java/com/gtnewhorizons/angelica/rendering/celeritas/world/WorldSlice.java index b6c5599e7..1dc46e63e 100644 --- a/src/main/java/com/gtnewhorizons/angelica/rendering/celeritas/world/WorldSlice.java +++ b/src/main/java/com/gtnewhorizons/angelica/rendering/celeritas/world/WorldSlice.java @@ -258,13 +258,14 @@ public class WorldSlice implements IBlockAccessExtended, FLBlockAccess { @Override public BiomeGenBase getBiomeGenForCoords(int x, int z) { - if (!blockBoxContains(this.volume, x, volume.minY, z)) { - return BiomeGenBase.plains; - } - final int relX = x - this.baseX; final int relZ = z - this.baseZ; + final int sectionGridBlocks = SECTION_LENGTH << 4; + if (relX < 0 || relX >= sectionGridBlocks || relZ < 0 || relZ >= sectionGridBlocks) { + return BiomeGenBase.plains; + } + final BiomeGenBase biome = this.biomeData[getLocalSectionIndex(relX >> 4, 0, relZ >> 4)] [(x & 15) | (z & 15) << 4]; return biome == null ? BiomeGenBase.plains : biome; diff --git a/src/main/java/net/coderbot/iris/gl/shader/StandardMacros.java b/src/main/java/net/coderbot/iris/gl/shader/StandardMacros.java index 0fbc6da36..45f5f7a04 100644 --- a/src/main/java/net/coderbot/iris/gl/shader/StandardMacros.java +++ b/src/main/java/net/coderbot/iris/gl/shader/StandardMacros.java @@ -10,6 +10,7 @@ import net.coderbot.iris.shaderpack.StringPair; import net.coderbot.iris.texture.format.TextureFormat; import net.coderbot.iris.texture.format.TextureFormatLoader; import net.coderbot.iris.uniforms.VanillaBiomeList; +import net.minecraft.world.biome.BiomeGenBase; import org.lwjgl.LWJGLUtil; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL20; @@ -318,6 +319,10 @@ public class StandardMacros { } } + // Modern biome name aliases - map modern names to 1.7.10 equivalents(ish) + addModernBiomeAlias(defines, "SWAMP", BiomeGenBase.swampland); + addModernBiomeAlias(defines, "SWAMP_HILLS", BiomeGenBase.swampland); // No hills variant in 1.7.10 + // Modern biomes that don't exist in 1.7.10 - add dummy IDs that will never match // This allows shader expressions to parse without errors while always evaluating to false/0 // Using negative IDs to avoid conflicts with actual biome IDs @@ -331,4 +336,10 @@ public class StandardMacros { return defines; } + + private static void addModernBiomeAlias(Map defines, String modernName, BiomeGenBase biome) { + if (biome != null) { + defines.put("BIOME_" + modernName, String.valueOf(biome.biomeID)); + } + } } diff --git a/src/main/java/net/coderbot/iris/pipeline/PipelineManager.java b/src/main/java/net/coderbot/iris/pipeline/PipelineManager.java index 1e3a68f94..c6d4048ae 100644 --- a/src/main/java/net/coderbot/iris/pipeline/PipelineManager.java +++ b/src/main/java/net/coderbot/iris/pipeline/PipelineManager.java @@ -19,6 +19,7 @@ public class PipelineManager { private final Function pipelineFactory; private final Map pipelinesPerDimension = new HashMap<>(); private WorldRenderingPipeline pipeline = new FixedFunctionWorldRenderingPipeline(); + private DimensionId lastPreparedDimension = null; @Getter private int versionCounterForSodiumShaderReload = 0; @@ -27,6 +28,13 @@ public class PipelineManager { } public WorldRenderingPipeline preparePipeline(DimensionId currentDimension) { + // Detect dimension change and do full teardown/recreation + if (lastPreparedDimension != null && lastPreparedDimension != currentDimension) { + Iris.logger.info("Dimension changed from {} to {}, reloading pipeline", lastPreparedDimension, currentDimension); + destroyPipeline(); + } + lastPreparedDimension = currentDimension; + if (!pipelinesPerDimension.containsKey(currentDimension)) { SystemTimeUniforms.COUNTER.reset(); SystemTimeUniforms.TIMER.reset(); @@ -71,6 +79,7 @@ public class PipelineManager { pipelinesPerDimension.clear(); pipeline = null; + lastPreparedDimension = null; versionCounterForSodiumShaderReload++; } diff --git a/src/main/java/net/coderbot/iris/pipeline/transform/ShaderTransformer.java b/src/main/java/net/coderbot/iris/pipeline/transform/ShaderTransformer.java index d8710f5fd..12e43d730 100644 --- a/src/main/java/net/coderbot/iris/pipeline/transform/ShaderTransformer.java +++ b/src/main/java/net/coderbot/iris/pipeline/transform/ShaderTransformer.java @@ -348,16 +348,16 @@ public class ShaderTransformer { .build(); final String chunkVertexHeader = org.embeddedt.embeddium.impl.gl.shader.ShaderParser.parseShader( - ShaderLoader.getShaderSource("sodium:include/chunk_vertex.glsl"), - ShaderLoader::getShaderSource, - constants); + ShaderLoader.getShaderSource("sodium:include/chunk_vertex.glsl"), ShaderLoader::getShaderSource, constants) + .replace("_get_relative_chunk_coord(pos) * vec3(16.0)", "vec3(_get_relative_chunk_coord(pos)) * 16.0"); + return "\n\n" + chunkVertexHeader + "\n\n"; } public static String getFormattedShader(ParseTree tree, String string) { - StringBuilder sb = new StringBuilder(string + "\n"); - String[] tabHolder = {""}; + final StringBuilder sb = new StringBuilder(string + "\n"); + final String[] tabHolder = {""}; getFormattedShader(tree, sb, tabHolder); return sb.toString(); } diff --git a/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/celeritas/terrain/MixinRenderGlobal.java b/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/celeritas/terrain/MixinRenderGlobal.java index 6d77108c8..13c2fa03b 100644 --- a/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/celeritas/terrain/MixinRenderGlobal.java +++ b/src/mixin/java/com/gtnewhorizons/angelica/mixins/early/celeritas/terrain/MixinRenderGlobal.java @@ -5,6 +5,7 @@ import com.gtnewhorizons.angelica.compat.mojang.GameModeUtil; import com.gtnewhorizons.angelica.glsm.GLStateManager; import com.gtnewhorizons.angelica.mixins.interfaces.IRenderGlobalExt; import com.gtnewhorizons.angelica.rendering.AngelicaRenderQueue; +import com.gtnewhorizons.angelica.rendering.RenderingState; import com.gtnewhorizons.angelica.rendering.celeritas.BlockRenderLayer; import com.gtnewhorizons.angelica.rendering.celeritas.CeleritasWorldRenderer; import net.coderbot.iris.Iris; @@ -54,6 +55,7 @@ public class MixinRenderGlobal implements IRenderGlobalExt { @Unique private CeleritasWorldRenderer celeritas$renderer; @Unique private int celeritas$frame; + @Unique private float celeritas$lastFov; @Unique private boolean angelica$isSpectatorMode() { @@ -183,6 +185,12 @@ public class MixinRenderGlobal implements IRenderGlobalExt { final double camY = viewEntity.posY + viewEntity.getEyeHeight(); final double camZ = viewEntity.posZ; + final float currentFov = RenderingState.INSTANCE.getFov(); + if (currentFov != this.celeritas$lastFov) { + this.celeritas$renderer.scheduleTerrainUpdate(); + this.celeritas$lastFov = currentFov; + } + final SimpleWorldRenderer.CameraState cameraState = new SimpleWorldRenderer.CameraState( camX, camY, camZ, viewEntity.rotationPitch, viewEntity.rotationYaw, fogDistance