Fix Iris shader animation time on 1.21

This commit is contained in:
Jonas Herzig
2024-07-10 19:07:19 +02:00
parent ca6ae4b983
commit 1836b7fb18
4 changed files with 36 additions and 0 deletions

View File

@@ -41,6 +41,8 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe
private final long startTime;
private long fakeFinishTimeNano;
public EntityRendererHandler(RenderSettings settings, RenderInfo renderInfo) {
this.settings = settings;
this.renderInfo = renderInfo;
@@ -71,6 +73,7 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe
}
public void renderWorld(float partialTicks, long finishTimeNano) {
fakeFinishTimeNano = finishTimeNano;
//#if MC>=11400
PreRenderCallback.EVENT.invoker().preRender();
//#else
@@ -142,6 +145,10 @@ public class EntityRendererHandler extends EventRegistrations implements WorldRe
return this.renderInfo;
}
public long getFakeFinishTimeNano() {
return fakeFinishTimeNano;
}
public interface IEntityRenderer {
void replayModRender_setHandler(EntityRendererHandler handler);
EntityRendererHandler replayModRender_getHandler();

View File

@@ -14,6 +14,9 @@
"Mixin_ChromaKeyColorSky",
"Mixin_ChromaKeyDisableFog",
"Mixin_ChromaKeyForceSky",
//#if MC>=12100
//$$ "Mixin_FakeSystemTimeUniforms_Iris",
//#endif
"Mixin_ForceChunkLoading",
"Mixin_HideNameTags",
"Mixin_HideNameTags_LivingEntity",

View File

@@ -0,0 +1,25 @@
package com.replaymod.render.mixin;
import com.replaymod.render.hooks.EntityRendererHandler;
import net.irisshaders.iris.uniforms.SystemTimeUniforms;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.GameRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Pseudo;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.ModifyVariable;
@Pseudo
@Mixin(value = SystemTimeUniforms.Timer.class, remap = false)
public class Mixin_FakeSystemTimeUniforms_Iris {
@ModifyVariable(method = "beginFrame", at = @At("HEAD"), argsOnly = true)
private long useReplayTimeDuringRender(long frameStartTimeNs) {
GameRenderer gameRenderer = MinecraftClient.getInstance().gameRenderer;
EntityRendererHandler entityRendererHandler =
((EntityRendererHandler.IEntityRenderer) gameRenderer).replayModRender_getHandler();
if (entityRendererHandler != null) {
frameStartTimeNs = entityRendererHandler.getFakeFinishTimeNano();
}
return frameStartTimeNs;
}
}