diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/AbstractDhTintGetter.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/AbstractDhTintGetter.java
index 806e21b7a..3e7afa27d 100644
--- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/AbstractDhTintGetter.java
+++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/block/AbstractDhTintGetter.java
@@ -7,7 +7,6 @@ import com.seibel.distanthorizons.core.pos.blockPos.DhBlockPosMutable;
import com.seibel.distanthorizons.core.util.ColorUtil;
import com.seibel.distanthorizons.core.util.FullDataPointUtil;
import net.minecraft.core.BlockPos;
-import net.minecraft.core.Holder;
import net.minecraft.world.level.BlockAndTintGetter;
import net.minecraft.world.level.ColorResolver;
import net.minecraft.world.level.biome.Biome;
diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java
index a1eb31463..16a40130c 100644
--- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java
+++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/minecraft/MinecraftRenderWrapper.java
@@ -25,7 +25,6 @@ import java.util.concurrent.ConcurrentHashMap;
import com.mojang.blaze3d.pipeline.RenderTarget;
import com.mojang.blaze3d.platform.NativeImage;
-import com.seibel.distanthorizons.common.wrappers.WrapperFactory;
import com.seibel.distanthorizons.common.wrappers.misc.LightMapWrapper;
import com.seibel.distanthorizons.core.dependencyInjection.ModAccessorInjector;
@@ -72,7 +71,7 @@ import net.minecraft.world.phys.Vec3;
import org.apache.logging.log4j.Logger;
import org.joml.Vector4f;
-#if MC_VER >= MC_1_21_5 && MC_VER < MC_1_21_9
+#if MC_VER >= MC_1_21_5
import com.mojang.blaze3d.opengl.GlTexture;
#else
#endif
@@ -344,7 +343,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
{
#if MC_VER < MC_1_21_5
return this.getRenderTarget().getDepthTextureId();
- #elif MC_VER < MC_1_21_9
+ #else
try
{
GlTexture glTexture = (GlTexture) this.getRenderTarget().getDepthTexture();
@@ -367,25 +366,6 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
}
return 0;
}
- #else
- try
- {
- throw new UnsupportedOperationException("Fabric get texture ID not implemented yet");
-
- //GpuTexture depthTex = this.getRenderTarget().getDepthTexture();
- //int id = ((GlTexture)depthTex.getClass().getMethod("getRealTexture").invoke(depthTex)).glId();
- //return id;
- }
- catch (Exception e)
- {
- // only log this error once per session
- if (!this.depthTextureCastFailLogged)
- {
- this.depthTextureCastFailLogged = true;
- LOGGER.error("Unable to cast render Target depth texture to GlTexture. MC or a rendering mod may have changed the object type.", e);
- }
- return 0;
- }
#endif
}
@Override
@@ -393,7 +373,7 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
{
#if MC_VER < MC_1_21_5
return this.getRenderTarget().getColorTextureId();
- #elif MC_VER < MC_1_21_9
+ #else
try
{
GlTexture glTexture = (GlTexture) this.getRenderTarget().getColorTexture();
@@ -415,25 +395,6 @@ public class MinecraftRenderWrapper implements IMinecraftRenderWrapper
}
return 0;
}
- #else
- try
- {
- throw new UnsupportedOperationException("Fabric get texture ID not implemented yet");
-
- //GpuTexture colorTex = this.getRenderTarget().getColorTexture();
- //int id = ((GlTexture)colorTex.getClass().getMethod("getRealTexture").invoke(colorTex)).glId();
- //return id;
- }
- catch (Exception e)
- {
- // only log this error once per session
- if (!this.colorTextureCastFailLogged)
- {
- this.colorTextureCastFailLogged = true;
- LOGGER.error("Unable to cast render Target color texture to GlTexture. MC or a rendering mod may have changed the object type.", e);
- }
- return 0;
- }
#endif
}
diff --git a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java
index 0d5e4cca3..5c1736462 100644
--- a/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java
+++ b/common/src/main/java/com/seibel/distanthorizons/common/wrappers/world/ClientLevelWrapper.java
@@ -92,6 +92,24 @@ public class ClientLevelWrapper implements IClientLevelWrapper
// instance methods //
//==================//
+ /**
+ * can be used when speed is important and the same level is likely to be passed in,
+ * IE rendering.
+ */
+ @Nullable
+ public static IClientLevelWrapper getWrapperIfDifferent(@Nullable IClientLevelWrapper levelWrapper, @NotNull ClientLevel level)
+ {
+ ClientLevelWrapper clientLevelWrapper = (ClientLevelWrapper)levelWrapper;
+ if (clientLevelWrapper == null
+ || clientLevelWrapper.level != level)
+ {
+ return getWrapper(level);
+ }
+
+ return clientLevelWrapper;
+ }
+
+ @Nullable
public static IClientLevelWrapper getWrapper(@NotNull ClientLevel level) { return getWrapper(level, false); }
@Nullable
diff --git a/coreSubProjects b/coreSubProjects
index 009cfdce9..57aec6092 160000
--- a/coreSubProjects
+++ b/coreSubProjects
@@ -1 +1 @@
-Subproject commit 009cfdce93fff97ebdd60f9af6442f79a55f2545
+Subproject commit 57aec6092c163713c6dbd70bdd4305eb3a516850
diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java
index 6c10fdbd2..d5fd618c8 100644
--- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java
+++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/FabricClientProxy.java
@@ -104,13 +104,6 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
LOGGER.info("Registering Fabric Client Events");
- #if MC_VER < MC_1_21_9
- // old versions still run like normal
- #else
- if (true)
- throw new UnsupportedOperationException("DH doesn't support 1.21.9 yet because the Fabric Rendering API is missing required events. Please wait for the Fabric team to update their API.");
- #endif
-
//========================//
// register mod accessors //
@@ -230,91 +223,77 @@ public class FabricClientProxy implements AbstractModInitializer.IEventProxy
#if MC_VER < MC_1_21_9
WorldRenderEvents.AFTER_SETUP.register((renderContext) ->
{
- Mat4f projectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
+ ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
- Mat4f modelViewMatrix;
#if MC_VER < MC_1_20_6
- modelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
#else
- modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
#endif
+ #if MC_VER < MC_1_21_1
+ ClientApi.RENDER_STATE.frameTime = renderContext.tickDelta();
+ #else
+ ClientApi.RENDER_STATE.frameTime = renderContext.tickCounter().getGameTimeDeltaTicks();
+ #endif
- //LOGGER.info("\n\n" +
- // "Level Render\n" +
- // "Mc MVM: \n" + modelViewMatrix.toString() + "\n" +
- // "Mc Proj: \n" + projectionMatrix.toString()
- //);
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, renderContext.world());
- this.clientApi.renderLods(ClientLevelWrapper.getWrapper(renderContext.world()),
- modelViewMatrix,
- projectionMatrix,
- #if MC_VER < MC_1_21_1
- renderContext.tickDelta()
- #else
- renderContext.tickCounter().getGameTimeDeltaTicks()
- #endif
- );
+ this.clientApi.renderLods();
});
WorldRenderEvents.AFTER_ENTITIES.register((renderContext) ->
{
- Mat4f projectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
+ ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
- Mat4f modelViewMatrix;
#if MC_VER < MC_1_20_6
- modelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
#else
- modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
#endif
- this.clientApi.renderFadeOpaque(
- modelViewMatrix,
- projectionMatrix,
- #if MC_VER < MC_1_21_1
- renderContext.tickDelta(),
- #else
- renderContext.tickCounter().getGameTimeDeltaTicks(),
- #endif
- ClientLevelWrapper.getWrapper(renderContext.world())
- );
+ #if MC_VER < MC_1_21_1
+ ClientApi.RENDER_STATE.frameTime = renderContext.tickDelta();
+ #else
+ ClientApi.RENDER_STATE.frameTime = renderContext.tickCounter().getGameTimeDeltaTicks();
+ #endif
+
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, renderContext.world());
+
+
+ this.clientApi.renderFadeOpaque();
});
- // TODO add to forge and neo
WorldRenderEvents.AFTER_TRANSLUCENT.register((renderContext) ->
{
- Mat4f projectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
+ ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(renderContext.projectionMatrix());
- Mat4f modelViewMatrix;
#if MC_VER < MC_1_20_6
- modelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.matrixStack().last().pose());
#else
- modelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(renderContext.positionMatrix());
#endif
+ #if MC_VER < MC_1_21_1
+ ClientApi.RENDER_STATE.frameTime = renderContext.tickDelta();
+ #else
+ ClientApi.RENDER_STATE.frameTime = renderContext.tickCounter().getGameTimeDeltaTicks();
+ #endif
+
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, renderContext.world());
+
+
+
#if MC_VER < MC_1_21_6
// rendered in MixinLevelRenderer
#else
- ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(renderContext.world()),
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime
- );
+ ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper();
#endif
- this.clientApi.renderFade(
- modelViewMatrix,
- projectionMatrix,
- #if MC_VER < MC_1_21_1
- renderContext.tickDelta(),
- #else
- renderContext.tickCounter().getGameTimeDeltaTicks(),
- #endif
- ClientLevelWrapper.getWrapper(renderContext.world())
- );
+ this.clientApi.renderFade();
});
#endif
diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinChunkSectionsToRender.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinChunkSectionsToRender.java
new file mode 100644
index 000000000..cefa53e84
--- /dev/null
+++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinChunkSectionsToRender.java
@@ -0,0 +1,71 @@
+/*
+ * This file is part of the Distant Horizons mod
+ * licensed under the GNU LGPL v3 License.
+ *
+ * Copyright (C) 2020 James Seibel
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, version 3.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program. If not, see .
+ */
+
+package com.seibel.distanthorizons.fabric.mixins.client;
+
+#if MC_VER < MC_1_21_9
+import net.minecraft.world.entity.Entity;
+import org.spongepowered.asm.mixin.Mixin;
+
+@Mixin(Entity.class)
+public class MixinChunkSectionsToRender
+{ /* rendering before was handled via Fabric API events */ }
+#else
+
+import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
+import com.seibel.distanthorizons.core.api.internal.ClientApi;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.renderer.chunk.ChunkSectionLayerGroup;
+import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(ChunkSectionsToRender.class)
+public class MixinChunkSectionsToRender
+{
+
+
+ // needs to fire at HEAD otherwise it will be canceled by Sodium
+ @Inject(at = @At("HEAD"), method = "renderGroup")
+ private void renderGroup(ChunkSectionLayerGroup chunkSectionLayerGroup, CallbackInfo ci)
+ {
+ if (!ClientApi.RENDER_STATE.canRender()) // TODO is this needed?
+ {
+ return;
+ }
+
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, Minecraft.getInstance().levelRenderer.level);
+
+
+ if (chunkSectionLayerGroup == ChunkSectionLayerGroup.OPAQUE)
+ {
+ ClientApi.INSTANCE.renderFadeOpaque();
+ }
+ else if (chunkSectionLayerGroup == ChunkSectionLayerGroup.TRANSLUCENT)
+ {
+ ClientApi.INSTANCE.renderDeferredLodsForShaders();
+ }
+
+ }
+}
+
+#endif
+
diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinDebugScreenOverlay.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinDebugScreenOverlay.java
index 34b98e69d..8693548e7 100644
--- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinDebugScreenOverlay.java
+++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinDebugScreenOverlay.java
@@ -12,12 +12,15 @@ import java.util.List;
@Mixin(DebugScreenOverlay.class)
public class MixinDebugScreenOverlay
{
-
+ #if MC_VER < MC_1_21_9
@Inject(method = "getSystemInformation", at = @At("RETURN"))
private void addCustomF3(CallbackInfoReturnable> cir)
{
List messages = cir.getReturnValue();
F3Screen.addStringToDisplay(messages);
}
+ #else
+ // handled by DhDebugScreenEntry for MC versions after 1.21.9
+ #endif
}
diff --git a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java
index dc392f810..2baad0235 100644
--- a/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java
+++ b/fabric/src/main/java/com/seibel/distanthorizons/fabric/mixins/client/MixinLevelRenderer.java
@@ -31,8 +31,19 @@ import com.mojang.blaze3d.vertex.PoseStack;
import org.joml.Matrix4f;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
#else
+import com.mojang.blaze3d.buffers.GpuBufferSlice;
+import com.mojang.blaze3d.framegraph.FrameGraphBuilder;
+import com.mojang.blaze3d.resource.GraphicsResourceAllocator;
+import net.minecraft.client.Camera;
+import net.minecraft.client.DeltaTracker;
import net.minecraft.client.renderer.chunk.ChunkSectionsToRender;
+import net.minecraft.client.renderer.culling.Frustum;
+import net.minecraft.client.renderer.state.LevelRenderState;
+import net.minecraft.util.profiling.ProfilerFiller;
+import org.joml.Matrix4f;
import org.joml.Matrix4fc;
+import org.joml.Vector4f;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
#endif
@@ -41,11 +52,9 @@ import com.seibel.distanthorizons.common.wrappers.McObjectConverter;
import com.seibel.distanthorizons.common.wrappers.world.ClientLevelWrapper;
import com.seibel.distanthorizons.core.api.internal.ClientApi;
import com.seibel.distanthorizons.coreapi.ModInfo;
-import com.seibel.distanthorizons.fabric.FabricClientProxy;
import com.seibel.distanthorizons.core.util.math.Mat4f;
import com.seibel.distanthorizons.core.logging.DhLoggerBuilder;
import net.minecraft.client.Minecraft;
-import com.seibel.distanthorizons.core.config.Config;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.client.renderer.LevelRenderer;
import org.spongepowered.asm.mixin.Mixin;
@@ -57,6 +66,7 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.apache.logging.log4j.Logger;
+
@Mixin(LevelRenderer.class)
public class MixinLevelRenderer
{
@@ -92,9 +102,16 @@ public class MixinLevelRenderer
method = "Lnet/minecraft/client/renderer/LevelRenderer;renderSectionLayer(Lnet/minecraft/client/renderer/RenderType;DDDLorg/joml/Matrix4f;Lorg/joml/Matrix4f;)V",
cancellable = true)
private void renderChunkLayer(RenderType renderType, double x, double y, double z, Matrix4f projectionMatrix, Matrix4f frustumMatrix, CallbackInfo callback)
- #else
+ #elif MC_VER < MC_1_21_9
@Inject(at = @At("HEAD"), method = "prepareChunkRenders", cancellable = true)
private void prepareChunkRenders(Matrix4fc projectionMatrix, double d, double e, double f, CallbackInfoReturnable callback)
+ #else
+ @Inject(at = @At("HEAD"), method = "renderLevel")
+ private void renderLevel(
+ GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker,
+ boolean renderBlockOutline, Camera camera,
+ Matrix4f positionMatrix, Matrix4f projectionMatrix, Matrix4f idkMatrix, GpuBufferSlice gpuBufferSlice,
+ Vector4f skyColor, boolean thinFog, CallbackInfo callback)
#endif
{
#if MC_VER == MC_1_16_5
@@ -110,11 +127,14 @@ public class MixinLevelRenderer
// get the matrices directly from MC
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
- #else
- // MC combined the model view and projection matricies
+ #elif MC_VER < MC_1_21_9
+ // MC combined the model view and projection matricies
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(projectionMatrix);
ClientApi.RENDER_STATE.mcProjectionMatrix = new Mat4f();
ClientApi.RENDER_STATE.mcProjectionMatrix.setIdentity();
+ #else
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(positionMatrix);
+ ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
#endif
// TODO move this into a common place
@@ -126,28 +146,61 @@ public class MixinLevelRenderer
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
#endif
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
- //LOGGER.info("\n\n" +
- // "Level Mixin\n" +
- // "Mc MVM: \n" + mcModelViewMatrix.toString() + "\n" +
- // "Mc Proj: \n" + mcProjectionMatrix.toString()
- //);
#if MC_VER < MC_1_21_6
if (renderType.equals(RenderType.translucent()))
{
- ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime
- );
+ ClientApi.INSTANCE.renderDeferredLodsForShaders();
}
+ #elif MC_VER < MC_1_21_9
+ // rendering handled via Fabric Api render event
#else
- // rendering handled via Fabric Api render event
+ // handled here and in MixinChunkSectionsToRender
#endif
}
+ #if MC_VER < MC_1_21_6
+ // rendering handled via Fabric Api render event
+ #else
+ @Inject(at = @At("HEAD"), method = "prepareChunkRenders")
+ private void prepareChunkRenders(Matrix4fc modelViewMatrix, double d, double e, double f, CallbackInfoReturnable callback)
+ {
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
+
+ // only crash during development
+ if (ModInfo.IS_DEV_BUILD)
+ {
+ ClientApi.RENDER_STATE.canRenderOrThrow();
+ }
+
+ ClientApi.INSTANCE.renderLods();
+
+ }
+
+ @Inject(at = @At("RETURN"), method = "renderLevel")
+ private void postRenderLevel(GraphicsResourceAllocator graphicsResourceAllocator, DeltaTracker deltaTracker, boolean bl, Camera camera, Matrix4f matrix4f, Matrix4f matrix4f2, Matrix4f matrix4f3, GpuBufferSlice gpuBufferSlice, Vector4f vector4f, boolean bl2, CallbackInfo ci)
+ {
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
+ ClientApi.RENDER_STATE.frameTime = deltaTracker.getGameTimeDeltaTicks();
+
+ // only crash during development
+ if (ModInfo.IS_DEV_BUILD)
+ {
+ ClientApi.RENDER_STATE.canRenderOrThrow();
+ }
+
+ ClientApi.INSTANCE.renderFade();
+
+ }
+
+ #endif
+
+
+
}
diff --git a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json
index c4796b42d..dca9096a5 100644
--- a/fabric/src/main/resources/DistantHorizons.fabric.mixins.json
+++ b/fabric/src/main/resources/DistantHorizons.fabric.mixins.json
@@ -17,6 +17,7 @@
"client.MixinDebugScreenOverlay",
"client.MixinFogRenderer",
"client.MixinLevelRenderer",
+ "client.MixinChunkSectionsToRender",
"client.MixinLightTexture",
"client.MixinMinecraft",
"client.MixinOptionsScreen",
diff --git a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java
index f48cc2d67..b9cef5dc3 100644
--- a/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java
+++ b/forge/src/main/java/com/seibel/distanthorizons/forge/mixins/client/MixinLevelRenderer.java
@@ -129,34 +129,35 @@ public class MixinLevelRenderer
// get the matrices from the OpenGL fixed pipeline
float[] mcProjMatrixRaw = new float[16];
GL15.glGetFloatv(GL15.GL_PROJECTION_MATRIX, mcProjMatrixRaw);
- Mat4f mcProjectionMatrix = new Mat4f(mcProjMatrixRaw);
- mcProjectionMatrix.transpose();
+ ClientApi.RENDER_STATE.mcProjectionMatrix = new Mat4f(mcProjMatrixRaw);
+ ClientApi.RENDER_STATE.mcProjectionMatrix.transpose();
- Mat4f mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose());
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(matrixStackIn.last().pose());
#else
// get the matrices directly from MC
- Mat4f mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
- Mat4f mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
+ ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrixStack.last().pose());
+ ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
#endif
- float frameTime;
#if MC_VER < MC_1_21_1
- frameTime = Minecraft.getInstance().getFrameTime();
+ ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getFrameTime();
#else
- frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
+ ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().getTimer().getRealtimeDeltaTicks();
#endif
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
+
// only render before solid blocks
if (renderType.equals(RenderType.solid()))
{
- ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime);
+ ClientApi.INSTANCE.renderLods();
}
else if (renderType.equals(RenderType.translucent()))
{
- ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level), mcModelViewMatrix, mcProjectionMatrix, frameTime);
+ ClientApi.INSTANCE.renderDeferredLodsForShaders();
}
// render fade
@@ -165,21 +166,11 @@ public class MixinLevelRenderer
// we need to trigger for the renderType after those passes are done
if (renderType.equals(RenderType.cutout()))
{
- ClientApi.INSTANCE.renderFadeOpaque(
- mcModelViewMatrix,
- mcProjectionMatrix,
- frameTime,
- ClientLevelWrapper.getWrapper(this.level)
- );
+ ClientApi.INSTANCE.renderFadeOpaque();
}
else if (renderType.equals(RenderType.tripwire()))
{
- ClientApi.INSTANCE.renderFade(
- mcModelViewMatrix,
- mcProjectionMatrix,
- frameTime,
- ClientLevelWrapper.getWrapper(this.level)
- );
+ ClientApi.INSTANCE.renderFade();
}
}
diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeClientProxy.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeClientProxy.java
index 39608b9be..b1fb05bc0 100644
--- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeClientProxy.java
+++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/NeoforgeClientProxy.java
@@ -251,17 +251,12 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
public void afterLevelEntityRenderEvent(RenderLevelStageEvent.AfterEntities event)
{
#if MC_VER < MC_1_21_9
- IClientLevelWrapper levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel)event.getLevel());
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, (ClientLevel)event.getLevel());
#else
- IClientLevelWrapper levelWrapper = ClientLevelWrapper.getWrapper(event.getLevelRenderer().level);
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, event.getLevelRenderer().level);
#endif
- ClientApi.INSTANCE.renderFade(
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime,
- levelWrapper
- );
+ ClientApi.INSTANCE.renderFade();
}
@@ -269,26 +264,21 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
public void afterLevelTranslucentRenderEvent(RenderLevelStageEvent.AfterTranslucentBlocks event)
{
#if MC_VER < MC_1_21_9
- IClientLevelWrapper levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel)event.getLevel());
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, (ClientLevel)event.getLevel());
#else
- IClientLevelWrapper levelWrapper = ClientLevelWrapper.getWrapper(event.getLevelRenderer().level);
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, event.getLevelRenderer().level);
#endif
- ClientApi.INSTANCE.renderDeferredLodsForShaders(
- levelWrapper,
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime
- );
+ ClientApi.INSTANCE.renderDeferredLodsForShaders();
}
@SubscribeEvent
public void afterLevelRenderEvent(RenderLevelStageEvent.AfterLevel event)
{
#if MC_VER < MC_1_21_9
- IClientLevelWrapper levelWrapper = ClientLevelWrapper.getWrapper((ClientLevel)event.getLevel());
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, (ClientLevel)event.getLevel());
#else
- IClientLevelWrapper levelWrapper = ClientLevelWrapper.getWrapper(event.getLevelRenderer().level);
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, event.getLevelRenderer().level);
#endif
@@ -305,24 +295,11 @@ public class NeoforgeClientProxy implements AbstractModInitializer.IEventProxy
}
- ClientApi.INSTANCE.renderFadeOpaque(
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime,
- levelWrapper
- );
+ ClientApi.INSTANCE.renderFadeOpaque();
}
#endif
- //================//
- // helper methods //
- //================//
-
- private static LevelAccessor GetEventLevel(LevelEvent e) { return e.getLevel(); }
-
-
-
}
diff --git a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java
index d501bc024..c3a4395d9 100644
--- a/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java
+++ b/neoforge/src/main/java/com/seibel/distanthorizons/neoforge/mixins/client/MixinLevelRenderer.java
@@ -66,15 +66,6 @@ import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
-/**
- * This class is used to mix in DH's rendering code
- * before Minecraft starts rendering blocks.
- * If this wasn't done, and we used Forge's
- * render last event, the LODs would render on top
- * of the normal terrain.
- *
- * This is also the mixin for rendering the clouds
- */
@Mixin(LevelRenderer.class)
public class MixinLevelRenderer
{
@@ -90,17 +81,17 @@ public class MixinLevelRenderer
#if MC_VER < MC_1_21_6
- @Inject(at = @At("HEAD"), method = "renderSectionLayer", cancellable = true)
+ @Inject(at = @At("HEAD"), method = "renderSectionLayer")
private void renderChunkLayer(RenderType renderType, double x, double y, double z, Matrix4f modelViewMatrix, Matrix4f projectionMatrix, CallbackInfo callback)
#elif MC_VER < MC_1_21_9
- @Inject(at = @At("HEAD"), method = "renderLevel", cancellable = true)
+ @Inject(at = @At("HEAD"), method = "renderLevel")
private void onRenderLevel(
GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker,
boolean renderBlockOutline, Camera camera,
Matrix4f positionMatrix, Matrix4f projectionMatrix, GpuBufferSlice gpuBufferSlice,
Vector4f skyColor, boolean thinFog, CallbackInfo callback)
#else
- @Inject(at = @At("HEAD"), method = "renderLevel", cancellable = true)
+ @Inject(at = @At("HEAD"), method = "renderLevel")
private void renderLevel(
GraphicsResourceAllocator resourceAllocator, DeltaTracker deltaTracker,
boolean renderBlockOutline, Camera camera,
@@ -116,12 +107,6 @@ public class MixinLevelRenderer
ClientApi.RENDER_STATE.mcProjectionMatrix = McObjectConverter.Convert(projectionMatrix);
#endif
- //LOGGER.info("\n\n" +
- // "Level Mixin\n" +
- // "Mc MVM: \n" + ClientApi.RENDER_STATE.mcModelViewMatrix.toString() + "\n" +
- // "Mc Proj: \n" + ClientApi.RENDER_STATE.mcProjectionMatrix.toString()
- //);
-
#if MC_VER < MC_1_21_1
@@ -132,6 +117,8 @@ public class MixinLevelRenderer
ClientApi.RENDER_STATE.frameTime = Minecraft.getInstance().deltaTracker.getRealtimeDeltaTicks();
#endif
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
+
#if MC_VER < MC_1_21_6
@@ -144,17 +131,11 @@ public class MixinLevelRenderer
// render LODs
if (renderType.equals(RenderType.solid()))
{
- ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level),
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime);
+ ClientApi.INSTANCE.renderLods();
}
else if (renderType.equals(RenderType.translucent()))
{
- ClientApi.INSTANCE.renderDeferredLodsForShaders(ClientLevelWrapper.getWrapper(this.level),
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime);
+ ClientApi.INSTANCE.renderDeferredLodsForShaders();
}
// render fade
@@ -163,21 +144,11 @@ public class MixinLevelRenderer
// we need to trigger for the renderType after those passes are done
if (renderType.equals(RenderType.cutout()))
{
- ClientApi.INSTANCE.renderFadeOpaque(
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime,
- ClientLevelWrapper.getWrapper(this.level)
- );
+ ClientApi.INSTANCE.renderFadeOpaque();
}
else if (renderType.equals(RenderType.tripwire()))
{
- ClientApi.INSTANCE.renderFade(
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime,
- ClientLevelWrapper.getWrapper(this.level)
- );
+ ClientApi.INSTANCE.renderFade();
}
#endif
}
@@ -188,21 +159,19 @@ public class MixinLevelRenderer
// formerly handled in renderChunkLayer()
#else
- @Inject(at = @At("HEAD"), method = "prepareChunkRenders", cancellable = true)
+ @Inject(at = @At("HEAD"), method = "prepareChunkRenders")
private void renderChunkLayer(Matrix4fc modelViewMatrix, double d, double e, double f, CallbackInfoReturnable callback)
{
ClientApi.RENDER_STATE.mcModelViewMatrix = McObjectConverter.Convert(modelViewMatrix);
-
+ ClientApi.RENDER_STATE.clientLevelWrapper = ClientLevelWrapper.getWrapperIfDifferent(ClientApi.RENDER_STATE.clientLevelWrapper, this.level);
+
// only crash during development
if (ModInfo.IS_DEV_BUILD)
{
ClientApi.RENDER_STATE.canRenderOrThrow();
}
- ClientApi.INSTANCE.renderLods(ClientLevelWrapper.getWrapper(this.level),
- ClientApi.RENDER_STATE.mcModelViewMatrix,
- ClientApi.RENDER_STATE.mcProjectionMatrix,
- ClientApi.RENDER_STATE.frameTime);
+ ClientApi.INSTANCE.renderLods();
}
#endif
diff --git a/versionProperties/1.21.9.properties b/versionProperties/1.21.9.properties
index 9e5af2beb..cf250a53f 100644
--- a/versionProperties/1.21.9.properties
+++ b/versionProperties/1.21.9.properties
@@ -12,8 +12,8 @@ netty_version=4.1.97.Final
# Fabric loader
fabric_loader_version=0.17.2
-fabric_api_version=0.133.14+1.21.9
- modmenu_version=15.0.0
+fabric_api_version=0.134.0+1.21.9
+ modmenu_version=16.0.0-rc.1
starlight_version_fabric=
phosphor_version_fabric=
lithium_version=