Add Optifine compatibility to rendering by disabling their separate chunk loading queue
Add compatibility to shaders that utilize the Shadow Map by manually setting displayListEntitiesDirty to false Call Shaders.beginRender in an Event Handler to avoid calling all of EntityRenderer#renderWorld
This commit is contained in:
@@ -1,52 +1,28 @@
|
||||
package com.replaymod.compat.shaders.mixin;
|
||||
|
||||
import com.replaymod.compat.shaders.ShaderReflection;
|
||||
import com.replaymod.replay.ReplayHandler;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.EntityRenderer;
|
||||
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.callback.CallbackInfo;
|
||||
|
||||
import java.lang.reflect.Field;
|
||||
|
||||
@Mixin(EntityRenderer.class)
|
||||
public abstract class MixinShaderEntityRenderer {
|
||||
|
||||
@Shadow
|
||||
public Minecraft mc;
|
||||
@Inject(method = "renderWorldPass", at = @At("HEAD"))
|
||||
private void replayModCompat_updateShaderFrameTimeCounter(CallbackInfo ignore) {
|
||||
if (ReplayModReplay.instance.getReplayHandler() == null) return;
|
||||
if (ShaderReflection.shaders_frameTimeCounter == null) return;
|
||||
|
||||
private static Field replayModCompat_frameTimeCounterField = null;
|
||||
|
||||
static {
|
||||
replayModCompat_initFrameTimeCounterField();
|
||||
}
|
||||
|
||||
private static void replayModCompat_initFrameTimeCounterField() {
|
||||
ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
|
||||
float timestamp = replayHandler.getReplaySender().currentTimeStamp() / 1000f % 3600f;
|
||||
try {
|
||||
replayModCompat_frameTimeCounterField = Class.forName("shadersmod.client.Shaders")
|
||||
.getDeclaredField("frameTimeCounter");
|
||||
replayModCompat_frameTimeCounterField.setAccessible(true);
|
||||
} catch (ClassNotFoundException ignore) {
|
||||
// no shaders mod installed
|
||||
} catch (NoSuchFieldException e) {
|
||||
// the field wasn't found. Has it been renamed?
|
||||
ShaderReflection.shaders_frameTimeCounter.set(null, timestamp);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;enableDepth()V"))
|
||||
private void replayModCompat_updateShaderFrameTimeCounter(CallbackInfo ignore) {
|
||||
if (replayModCompat_frameTimeCounterField != null) {
|
||||
ReplayHandler replayHandler = ReplayModReplay.instance.getReplayHandler();
|
||||
float timestamp = replayHandler.getReplaySender().currentTimeStamp() / 1000f % 3600f;
|
||||
try {
|
||||
replayModCompat_frameTimeCounterField.set(null, timestamp);
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user