Add 1.7.10 version
This commit is contained in:
@@ -6,11 +6,18 @@ import com.replaymod.replay.events.ReplayCloseEvent;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.util.ReportedException;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
|
||||
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.Mod;
|
||||
//$$ import cpw.mods.fml.common.event.FMLPreInitializationEvent;
|
||||
//$$ import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
//#endif
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
@@ -23,7 +30,9 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
version = "@MOD_VERSION@",
|
||||
acceptedMinecraftVersions = "@MC_VERSION@",
|
||||
acceptableRemoteVersions = "*",
|
||||
//#if MC>=10800
|
||||
clientSideOnly = true,
|
||||
//#endif
|
||||
useMetadata = true)
|
||||
public class ReplayModRender {
|
||||
public static final String MOD_ID = "replaymod-render";
|
||||
|
||||
@@ -9,7 +9,6 @@ import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.crash.CrashReportCategory;
|
||||
import net.minecraft.util.Util;
|
||||
import net.minecraftforge.fml.common.versioning.ComparableVersion;
|
||||
import org.apache.commons.exec.CommandLine;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
@@ -28,6 +27,12 @@ import java.util.Comparator;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.versioning.ComparableVersion;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.versioning.ComparableVersion;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||
import static org.apache.commons.lang3.Validate.isTrue;
|
||||
|
||||
|
||||
@@ -7,16 +7,22 @@ import com.replaymod.render.frame.OpenGlFrame;
|
||||
import com.replaymod.render.rendering.FrameCapturer;
|
||||
import com.replaymod.render.shader.Program;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.util.ReportedException;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||
//#else
|
||||
//$$ import com.replaymod.render.hooks.GLStateTracker.BooleanState;
|
||||
//$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*;
|
||||
//#endif
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.fog;
|
||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
|
||||
@@ -43,6 +49,11 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
||||
return renderInfo.getFrameSize();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getFramesDone() {
|
||||
return renderInfo.getFramesDone();
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getTotalFrames() {
|
||||
return renderInfo.getTotalFrames();
|
||||
@@ -76,9 +87,9 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
||||
linkState(1, "lightMapEnabled");
|
||||
linkState(2, "hurtTextureEnabled");
|
||||
final Program.Uniform uniform = shaderProgram.getUniformVariable("fogEnabled");
|
||||
previousFogState = fog(GlStateManager.fogState);
|
||||
previousFogState = fog();
|
||||
uniform.set(previousFogState.currentState);
|
||||
fog(GlStateManager.fogState, new BooleanState(previousFogState.capability) {
|
||||
fog(new BooleanState(previousFogState.capability) {
|
||||
@Override
|
||||
public void setState(boolean state) {
|
||||
super.setState(state);
|
||||
@@ -97,15 +108,15 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
||||
|
||||
private void linkState(int id, String var) {
|
||||
final Program.Uniform uniform = shaderProgram.getUniformVariable(var);
|
||||
previousStates[id] = GlStateManager.textureState[id].texture2DState;
|
||||
previousStates[id] = texture2DState(id);
|
||||
uniform.set(previousStates[id].currentState);
|
||||
GlStateManager.textureState[id].texture2DState = new BooleanState(previousStates[id].capability) {
|
||||
texture2DState(id, new BooleanState(previousStates[id].capability) {
|
||||
@Override
|
||||
public void setState(boolean state) {
|
||||
super.setState(state);
|
||||
uniform.set(state);
|
||||
}
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -133,10 +144,10 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
||||
left.close();
|
||||
right.close();
|
||||
shaderProgram.delete();
|
||||
for (int i = 0; i < 3; i++) {
|
||||
GlStateManager.textureState[i].texture2DState = previousStates[i];
|
||||
for (int i = 0; i < previousStates.length; i++) {
|
||||
texture2DState(i, previousStates[i]);
|
||||
}
|
||||
fog(GlStateManager.fogState, previousFogState);
|
||||
fog(previousFogState);
|
||||
}
|
||||
|
||||
private class CubicStereoFrameCapturer extends CubicPboOpenGlFrameCapturer {
|
||||
|
||||
@@ -15,7 +15,12 @@ import org.lwjgl.util.WritableDimension;
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
//#if MC>=10800
|
||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||
//#else
|
||||
//$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*;
|
||||
//#endif
|
||||
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ import org.lwjgl.util.ReadableDimension;
|
||||
public interface RenderInfo {
|
||||
ReadableDimension getFrameSize();
|
||||
|
||||
int getFramesDone();
|
||||
|
||||
int getTotalFrames();
|
||||
|
||||
float updateForNextFrame();
|
||||
|
||||
@@ -3,7 +3,12 @@ package com.replaymod.render.events;
|
||||
import com.replaymod.render.rendering.VideoRenderer;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||
//#endif
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public abstract class ReplayRenderEvent extends Event {
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
//#if MC>=10800
|
||||
package com.replaymod.render.hooks;
|
||||
|
||||
import com.replaymod.render.utils.JailingQueue;
|
||||
@@ -128,3 +129,4 @@ public class ChunkLoadingRenderGlobal {
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -2,11 +2,18 @@ package com.replaymod.render.hooks;
|
||||
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import com.replaymod.render.capturer.CaptureData;
|
||||
import com.replaymod.render.capturer.RenderInfo;
|
||||
import com.replaymod.render.capturer.WorldRenderer;
|
||||
import lombok.Getter;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
//#else
|
||||
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
|
||||
//$$ import cpw.mods.fml.common.FMLCommonHandler;
|
||||
//#endif
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -16,12 +23,16 @@ public class EntityRendererHandler implements WorldRenderer {
|
||||
@Getter
|
||||
protected final RenderSettings settings;
|
||||
|
||||
@Getter
|
||||
private final RenderInfo renderInfo;
|
||||
|
||||
public CaptureData data;
|
||||
|
||||
public boolean omnidirectional;
|
||||
|
||||
public EntityRendererHandler(RenderSettings settings) {
|
||||
public EntityRendererHandler(RenderSettings settings, RenderInfo renderInfo) {
|
||||
this.settings = settings;
|
||||
this.renderInfo = renderInfo;
|
||||
|
||||
((IEntityRenderer) mc.entityRenderer).replayModRender_setHandler(this);
|
||||
}
|
||||
@@ -41,7 +52,11 @@ public class EntityRendererHandler implements WorldRenderer {
|
||||
GlStateManager.enableAlpha();
|
||||
GlStateManager.alphaFunc(516, 0.5F);
|
||||
|
||||
//#if MC>=10800
|
||||
mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano);
|
||||
//#else
|
||||
//$$ mc.entityRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||
//#endif
|
||||
|
||||
FMLCommonHandler.instance().onRenderTickEnd(partialTicks);
|
||||
}
|
||||
|
||||
70
src/main/java/com/replaymod/render/hooks/GLStateTracker.java
Normal file
70
src/main/java/com/replaymod/render/hooks/GLStateTracker.java
Normal file
@@ -0,0 +1,70 @@
|
||||
//#if MC<=10710
|
||||
//$$ package com.replaymod.render.hooks;
|
||||
//$$
|
||||
//$$ import org.lwjgl.opengl.GL11;
|
||||
//$$ import org.lwjgl.opengl.GL13;
|
||||
//$$
|
||||
//$$ /**
|
||||
//$$ * Tracks OpenGL state for use in the ODS shader.
|
||||
//$$ * All methods should be called from the GL mixins only.
|
||||
//$$ */
|
||||
//$$ public class GLStateTracker {
|
||||
//$$ private static ThreadLocal<GLStateTracker> stateTracker = ThreadLocal.withInitial(GLStateTracker::new);
|
||||
//$$ public static GLStateTracker getInstance() {
|
||||
//$$ return stateTracker.get();
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ public int activeTexture;
|
||||
//$$ public BooleanState fog = new BooleanState(GL11.GL_FOG);
|
||||
//$$ public BooleanState[] texture = new BooleanState[32];
|
||||
//$$ {
|
||||
//$$ for (int i = 0; i < texture.length; i++) {
|
||||
//$$ texture[i] = new BooleanState(GL11.GL_TEXTURE_2D);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ public void updateActiveTexture(int magic) {
|
||||
//$$ this.activeTexture = magic - GL13.GL_TEXTURE0;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ public void updateEnabledState(int magic, boolean enabled) {
|
||||
//$$ switch (magic) {
|
||||
//$$ case GL11.GL_FOG: fog.setState(enabled); break;
|
||||
//$$ case GL11.GL_TEXTURE_2D: texture[activeTexture].setState(enabled); break;
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ public static class BooleanState {
|
||||
//$$ public int capability;
|
||||
//$$ public boolean currentState;
|
||||
//$$
|
||||
//$$ public BooleanState(int capability) {
|
||||
//$$ this.capability = capability;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ public void setState(boolean enabled) {
|
||||
//$$ this.currentState = enabled;
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ public boolean getState() {
|
||||
//$$ return currentState;
|
||||
//$$ }
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ // Called via ASM (see GLStateTrackerTransformer)
|
||||
//$$ @Deprecated
|
||||
//$$ @SuppressWarnings("unused")
|
||||
//$$ public static void hook_glEnable(int magic) {
|
||||
//$$ GL11.glEnable(magic);
|
||||
//$$ getInstance().updateEnabledState(magic, true);
|
||||
//$$ }
|
||||
//$$
|
||||
//$$ // Called via ASM (see GLStateTrackerTransformer)
|
||||
//$$ @Deprecated
|
||||
//$$ @SuppressWarnings("unused")
|
||||
//$$ public static void hook_glDisable(int magic) {
|
||||
//$$ GL11.glDisable(magic);
|
||||
//$$ getInstance().updateEnabledState(magic, false);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
@@ -5,38 +5,68 @@ package com.replaymod.render.mixin;
|
||||
//$$ import net.minecraft.client.Minecraft;
|
||||
//$$ import net.minecraft.client.particle.EffectRenderer;
|
||||
//$$ import net.minecraft.client.particle.EntityFX;
|
||||
//$$ import net.minecraft.client.renderer.WorldRenderer;
|
||||
//$$ import net.minecraft.entity.Entity;
|
||||
//$$ import org.spongepowered.asm.mixin.Mixin;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.At;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
//$$
|
||||
//#if MC>=10800
|
||||
//$$ import net.minecraft.client.renderer.WorldRenderer;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.Tessellator;
|
||||
//#endif
|
||||
//$$
|
||||
//$$ @Mixin(EffectRenderer.class)
|
||||
//$$ public abstract class MixinEffectRenderer {
|
||||
//#if MC>=10800
|
||||
//#if MC>=10809
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;func_180434_a(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//#endif
|
||||
//$$ private void renderNormalParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//$$ private void renderNormalParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/Tessellator;FFFFFF)V"))
|
||||
//$$ private void renderNormalParticle(EntityFX fx, Tessellator tesselator, float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ renderParticle(fx, tesselator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//#endif
|
||||
//$$
|
||||
//#if MC>=10800
|
||||
//#if MC>=10809
|
||||
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;func_180434_a(Lnet/minecraft/client/renderer/WorldRenderer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//#endif
|
||||
//$$ private void renderLitParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//$$ private void renderLitParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ renderParticle(fx, worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/EntityFX;renderParticle(Lnet/minecraft/client/renderer/Tessellator;FFFFFF)V"))
|
||||
//$$ private void renderLitParticle(EntityFX fx, Tessellator tessellator, float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ renderParticle(fx, tessellator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//$$ }
|
||||
//#endif
|
||||
//$$
|
||||
//$$ private void renderParticle(EntityFX fx, WorldRenderer worldRenderer, Entity view, float partialTicks,
|
||||
//$$ private void renderParticle(EntityFX fx,
|
||||
//#if MC>=10800
|
||||
//$$ WorldRenderer worldRenderer, Entity view,
|
||||
//#else
|
||||
//$$ Tessellator tessellator,
|
||||
//#endif
|
||||
//$$ float partialTicks,
|
||||
//$$ float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
//$$ EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
//$$ if (handler != null && handler.omnidirectional) {
|
||||
//#if MC<=10710
|
||||
//$$ Entity view = Minecraft.getMinecraft().renderViewEntity;
|
||||
//#endif
|
||||
//$$ // Align all particles towards the camera
|
||||
//$$ double dx = fx.prevPosX + (fx.posX - fx.prevPosX) * partialTicks - view.posX;
|
||||
//$$ double dy = fx.prevPosY + (fx.posY - fx.prevPosY) * partialTicks - view.posY;
|
||||
@@ -54,7 +84,11 @@ package com.replaymod.render.mixin;
|
||||
//#if MC>=10809
|
||||
//$$ fx.renderParticle(worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ fx.func_180434_a(worldRenderer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//#else
|
||||
//$$ fx.renderParticle(tessellator, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
//#endif
|
||||
//#endif
|
||||
//$$ }
|
||||
//$$ }
|
||||
|
||||
@@ -7,10 +7,10 @@ import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import com.replaymod.replay.camera.CameraEntity;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.EntityRenderer;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraft.client.renderer.RenderGlobal;
|
||||
import net.minecraft.client.settings.GameSettings;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.util.ReadableColor;
|
||||
@@ -28,6 +28,14 @@ import net.minecraft.util.math.RayTraceResult;
|
||||
//$$ import net.minecraft.util.MovingObjectPosition;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
//#else
|
||||
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
@Mixin(value = EntityRenderer.class)
|
||||
public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer, EntityRendererHandler.GluPerspective {
|
||||
@Shadow
|
||||
@@ -45,6 +53,17 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
return replayModRender_handler;
|
||||
}
|
||||
|
||||
//#if MC<=10710
|
||||
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE",target =
|
||||
//$$ "Lnet/minecraft/client/renderer/RenderGlobal;updateRenderers(Lnet/minecraft/entity/EntityLivingBase;Z)Z"))
|
||||
//$$ private boolean replayModRender_updateAllChunks(RenderGlobal self, EntityLivingBase view, boolean renderAllChunks) {
|
||||
//$$ if (replayModRender_handler != null) {
|
||||
//$$ renderAllChunks = true;
|
||||
//$$ }
|
||||
//$$ return self.updateRenderers(view, renderAllChunks);
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@Inject(method = "setupFog", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_onSetupFog(int fogDistanceFlag, float partialTicks, CallbackInfo ci) {
|
||||
if (replayModRender_handler == null) return;
|
||||
@@ -56,7 +75,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
@Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) {
|
||||
if (replayModRender_handler != null) {
|
||||
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
|
||||
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
RenderSettings settings = replayModRender_handler.getSettings();
|
||||
if (settings.isStabilizeYaw()) {
|
||||
entity.prevRotationYaw = entity.rotationYaw = 0;
|
||||
@@ -79,7 +98,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
@Inject(method = "setupCameraTransform", at = @At("HEAD"))
|
||||
private void replayModRender_beforeSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||
if (replayModRender_handler != null) {
|
||||
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
|
||||
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
orgYaw = entity.rotationYaw;
|
||||
orgPitch = entity.rotationPitch;
|
||||
orgPrevYaw = entity.prevRotationYaw;
|
||||
@@ -91,7 +110,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
@Inject(method = "setupCameraTransform", at = @At("RETURN"))
|
||||
private void replayModRender_afterSetupCameraTransform(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||
if (replayModRender_handler != null) {
|
||||
Entity entity = Minecraft.getMinecraft().getRenderViewEntity();
|
||||
Entity entity = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
entity.rotationYaw = orgYaw;
|
||||
entity.rotationPitch = orgPitch;
|
||||
entity.prevRotationYaw = orgPrevYaw;
|
||||
@@ -109,7 +128,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
ci.cancel();
|
||||
return; // No spectator hands during 360° view, we wouldn't even know where to put it
|
||||
}
|
||||
Entity currentEntity = Minecraft.getMinecraft().getRenderViewEntity();
|
||||
Entity currentEntity = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
if (currentEntity instanceof EntityPlayer && !(currentEntity instanceof CameraEntity)) {
|
||||
if (renderPass == 2) { // Need to update render pass
|
||||
renderPass = replayModRender_handler.data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE ? 1 : 0;
|
||||
@@ -127,7 +146,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
|
||||
private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ @Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/MovingObjectPosition;IF)V"))
|
||||
//#endif
|
||||
//$$ private void replayModRender_drawSelectionBox(RenderGlobal instance, EntityPlayer player, MovingObjectPosition rtr, int alwaysZero, float partialTicks) {
|
||||
//#endif
|
||||
if (replayModRender_handler == null) {
|
||||
@@ -137,7 +160,12 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
|
||||
private int orgRenderDistanceChunks;
|
||||
|
||||
//#if MC>=10800
|
||||
@Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0))
|
||||
//#else
|
||||
//$$ @Inject(method = "renderWorld", at = @At(value = "INVOKE", ordinal = 0, shift = At.Shift.AFTER,
|
||||
//$$ target = "Lnet/minecraft/client/renderer/culling/ClippingHelperImpl;getInstance()Lnet/minecraft/client/renderer/culling/ClippingHelper;"))
|
||||
//#endif
|
||||
private void replayModRender_beforeRenderSky(CallbackInfo ci) {
|
||||
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
||||
GameSettings settings = Minecraft.getMinecraft().gameSettings;
|
||||
@@ -146,15 +174,24 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(FI)V"))
|
||||
private void replayModRender_renderSky(RenderGlobal instance, float partialTicks, int renderPass) {
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/RenderGlobal;renderSky(F)V"))
|
||||
//$$ private void replayModRender_renderSky(RenderGlobal instance, float partialTicks) {
|
||||
//#endif
|
||||
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
||||
Minecraft.getMinecraft().gameSettings.renderDistanceChunks = orgRenderDistanceChunks;
|
||||
ReadableColor color = replayModRender_handler.getSettings().getChromaKeyingColor();
|
||||
GlStateManager.clearColor(color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, 1);
|
||||
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT);
|
||||
} else {
|
||||
//#if MC>=10800
|
||||
instance.renderSky(partialTicks, renderPass);
|
||||
//#else
|
||||
//$$ instance.renderSky(partialTicks);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -162,7 +199,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
* Stereoscopic Renderer
|
||||
*/
|
||||
|
||||
//#if MC>=10800
|
||||
@Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 0))
|
||||
//#else
|
||||
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 0, remap = false))
|
||||
//#endif
|
||||
private void replayModRender_setupStereoscopicProjection(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
@@ -173,7 +214,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
@Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;loadIdentity()V", shift = At.Shift.AFTER, ordinal = 1))
|
||||
//#else
|
||||
//$$ @Inject(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/opengl/GL11;glLoadIdentity()V", shift = At.Shift.AFTER, ordinal = 1, remap = false))
|
||||
//#endif
|
||||
private void replayModRender_setupStereoscopicModelView(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
@@ -193,15 +238,21 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
@Redirect(method = "renderWorldPass", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderHand", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||
//#endif
|
||||
private void replayModRender_gluPerspective$1(float fovY, float aspect, float zNear, float zFar) {
|
||||
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
@Redirect(method = "renderCloudsCheck", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||
private void replayModRender_gluPerspective$2(float fovY, float aspect, float zNear, float zFar) {
|
||||
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
||||
}
|
||||
//#endif
|
||||
|
||||
@Override
|
||||
public void replayModRender_gluPerspective(float fovY, float aspect, float zNear, float zFar) {
|
||||
|
||||
@@ -2,13 +2,22 @@ package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.culling.Frustum;
|
||||
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.CallbackInfoReturnable;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.client.renderer.culling.Frustum;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.culling.Frustrum;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
@Mixin(Frustum.class)
|
||||
//#else
|
||||
//$$ @Mixin(Frustrum.class)
|
||||
//#endif
|
||||
public abstract class MixinFrustum {
|
||||
@Inject(method = "isBoxInFrustum", at = @At("HEAD"), cancellable = true)
|
||||
public void isBoxInFrustum(double minX, double minY, double minZ, double maxX, double maxY, double maxZ, CallbackInfoReturnable<Boolean> ci) {
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
//#if MC<=10710
|
||||
//$$ package com.replaymod.render.mixin;
|
||||
//$$
|
||||
//$$ import com.replaymod.render.hooks.GLStateTracker;
|
||||
//$$ import net.minecraft.client.renderer.OpenGlHelper;
|
||||
//$$ 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(OpenGlHelper.class)
|
||||
//$$ public abstract class MixinOpenGlHelper {
|
||||
//$$ @Inject(method = "setActiveTexture", at = @At("RETURN"))
|
||||
//$$ private static void replayModRender_trackActiveTexture(int magic, CallbackInfo ci) {
|
||||
//$$ GLStateTracker.getInstance().updateActiveTexture(magic);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#endif
|
||||
@@ -1,3 +1,4 @@
|
||||
//#if MC>=10800
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
@@ -67,3 +68,4 @@ public abstract class MixinRenderGlobal {
|
||||
}
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -30,9 +30,9 @@ public class Pipelines {
|
||||
RenderSettings settings = renderInfo.getRenderSettings();
|
||||
FrameCapturer<OpenGlFrame> capturer;
|
||||
if (PixelBufferObject.SUPPORTED) {
|
||||
capturer = new SimplePboOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
||||
capturer = new SimplePboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||
} else {
|
||||
capturer = new SimpleOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
||||
capturer = new SimpleOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||
}
|
||||
return new Pipeline<>(capturer, new OpenGlToRGBProcessor(), consumer);
|
||||
}
|
||||
@@ -41,9 +41,9 @@ public class Pipelines {
|
||||
RenderSettings settings = renderInfo.getRenderSettings();
|
||||
FrameCapturer<StereoscopicOpenGlFrame> capturer;
|
||||
if (PixelBufferObject.SUPPORTED) {
|
||||
capturer = new StereoscopicPboOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
||||
capturer = new StereoscopicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||
} else {
|
||||
capturer = new StereoscopicOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo);
|
||||
capturer = new StereoscopicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo);
|
||||
}
|
||||
return new Pipeline<>(capturer, new StereoscopicToRGBProcessor(), consumer);
|
||||
}
|
||||
@@ -52,9 +52,9 @@ public class Pipelines {
|
||||
RenderSettings settings = renderInfo.getRenderSettings();
|
||||
FrameCapturer<CubicOpenGlFrame> capturer;
|
||||
if (PixelBufferObject.SUPPORTED) {
|
||||
capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
||||
capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||
} else {
|
||||
capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
||||
capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||
}
|
||||
return new Pipeline<>(capturer, new CubicToRGBProcessor(), consumer);
|
||||
}
|
||||
@@ -63,9 +63,9 @@ public class Pipelines {
|
||||
RenderSettings settings = renderInfo.getRenderSettings();
|
||||
FrameCapturer<CubicOpenGlFrame> capturer;
|
||||
if (PixelBufferObject.SUPPORTED) {
|
||||
capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
||||
capturer = new CubicPboOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||
} else {
|
||||
capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
||||
capturer = new CubicOpenGlFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||
}
|
||||
return new Pipeline<>(capturer, new EquirectangularToRGBProcessor(settings.getVideoWidth() / 4), consumer);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ public class Pipelines {
|
||||
public static Pipeline<ODSOpenGlFrame, RGBFrame> newODSPipeline(RenderInfo renderInfo, FrameConsumer<RGBFrame> consumer) {
|
||||
RenderSettings settings = renderInfo.getRenderSettings();
|
||||
FrameCapturer<ODSOpenGlFrame> capturer =
|
||||
new ODSFrameCapturer(new EntityRendererHandler(settings), renderInfo, settings.getVideoWidth() / 4);
|
||||
new ODSFrameCapturer(new EntityRendererHandler(settings, renderInfo), renderInfo, settings.getVideoWidth() / 4);
|
||||
return new Pipeline<>(capturer, new ODSToRGBProcessor(settings.getVideoWidth() / 4), consumer);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,6 @@ import com.replaymod.render.events.ReplayRenderEvent;
|
||||
import com.replaymod.render.frame.RGBFrame;
|
||||
import com.replaymod.render.gui.GuiRenderingDone;
|
||||
import com.replaymod.render.gui.GuiVideoRenderer;
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
import com.replaymod.render.metadata.MetadataInjector;
|
||||
import com.replaymod.render.utils.SoundHandler;
|
||||
import com.replaymod.replay.ReplayHandler;
|
||||
@@ -35,6 +34,13 @@ import net.minecraft.util.SoundCategory;
|
||||
//$$ import net.minecraft.client.audio.SoundCategory;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||
//#else
|
||||
//$$ import static com.replaymod.core.versions.MCVer.GlStateManager.*;
|
||||
//#endif
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collection;
|
||||
import java.util.EnumMap;
|
||||
@@ -46,7 +52,6 @@ import java.util.concurrent.FutureTask;
|
||||
import static com.google.common.collect.Iterables.getLast;
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||
import static net.minecraft.client.renderer.GlStateManager.*;
|
||||
import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
|
||||
@@ -69,7 +74,9 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
private TimelinePlayer timelinePlayer;
|
||||
private Future<Void> timelinePlayerFuture;
|
||||
//#if MC>=10800
|
||||
private ChunkLoadingRenderGlobal chunkLoadingRenderGlobal;
|
||||
//#endif
|
||||
|
||||
private int framesDone;
|
||||
private int totalFrames;
|
||||
@@ -251,7 +258,9 @@ public class VideoRenderer implements RenderInfo {
|
||||
//$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
chunkLoadingRenderGlobal = new ChunkLoadingRenderGlobal(mc.renderGlobal);
|
||||
//#endif
|
||||
|
||||
// Set up our own framebuffer to render the GUI to
|
||||
guiFramebuffer = new Framebuffer(displayWidth, displayHeight, true);
|
||||
@@ -277,9 +286,11 @@ public class VideoRenderer implements RenderInfo {
|
||||
//$$ mc.gameSettings.mapSoundLevels = originalSoundLevels;
|
||||
//#endif
|
||||
mc.displayGuiScreen(null);
|
||||
//#if MC>=10800
|
||||
if (chunkLoadingRenderGlobal != null) {
|
||||
chunkLoadingRenderGlobal.uninstall();
|
||||
}
|
||||
//#endif
|
||||
|
||||
new SoundHandler().playRenderSuccessSound();
|
||||
|
||||
@@ -303,11 +314,15 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
|
||||
mc.currentScreen = gui.toMinecraft();
|
||||
//#if MC>=10800
|
||||
try {
|
||||
mc.runTick();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
//#else
|
||||
//$$ mc.runTick();
|
||||
//#endif
|
||||
}
|
||||
|
||||
public void drawGui() {
|
||||
@@ -328,6 +343,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
ScaledResolution scaled = newScaledResolution(mc);
|
||||
gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||
|
||||
//#if MC>=10800
|
||||
try {
|
||||
gui.toMinecraft().handleInput();
|
||||
} catch (IOException e) {
|
||||
@@ -335,6 +351,9 @@ public class VideoRenderer implements RenderInfo {
|
||||
// It isn't actually thrown here, so we'll deal with it the easy way
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
//#else
|
||||
//$$ gui.toMinecraft().handleInput();
|
||||
//#endif
|
||||
|
||||
int mouseX = Mouse.getX() * scaled.getScaledWidth() / mc.displayWidth;
|
||||
int mouseY = scaled.getScaledHeight() - Mouse.getY() * scaled.getScaledHeight() / mc.displayHeight - 1;
|
||||
@@ -352,7 +371,11 @@ public class VideoRenderer implements RenderInfo {
|
||||
if (settings.isHighPerformance()) {
|
||||
Display.update();
|
||||
} else {
|
||||
//#if MC>=10800
|
||||
mc.updateDisplay();
|
||||
//#else
|
||||
//$$ mc.resetSize();
|
||||
//#endif
|
||||
}
|
||||
if (Mouse.isGrabbed()) {
|
||||
Mouse.setGrabbed(false);
|
||||
|
||||
Reference in New Issue
Block a user