Update to MC 1.14 / Fabric
This commit is contained in:
@@ -3,10 +3,9 @@ package com.replaymod.render;
|
||||
import com.replaymod.core.Module;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import com.replaymod.render.utils.RenderJob;
|
||||
import com.replaymod.replay.events.ReplayCloseEvent;
|
||||
import com.replaymod.replay.events.ReplayClosedCallback;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.crash.ReportedException;
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
@@ -41,12 +40,7 @@ public class ReplayModRender implements Module {
|
||||
|
||||
@Override
|
||||
public void initClient() {
|
||||
FML_BUS.register(this);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onReplayClose(ReplayCloseEvent.Post event) {
|
||||
renderQueue.clear();
|
||||
ReplayClosedCallback.EVENT.register(replayHandler -> renderQueue.clear());
|
||||
}
|
||||
|
||||
public File getVideoFolder() {
|
||||
|
||||
@@ -53,7 +53,7 @@ public class BlendMeshBuilder
|
||||
this.wellBehaved = wellBehaved;
|
||||
}
|
||||
|
||||
public void setOffset(Vector3f offset) {
|
||||
public void setReverseOffset(Vector3f offset) {
|
||||
this.offset = offset;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix3f;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Quaternion;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.GLAllocation;
|
||||
import net.minecraft.nbt.NBTTagCompound;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
@@ -16,6 +17,10 @@ import org.lwjgl.opengl.GL11;
|
||||
import java.io.IOException;
|
||||
import java.nio.FloatBuffer;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.util.math.Vec3d;
|
||||
//#endif
|
||||
|
||||
public class Util {
|
||||
public static BlenderFactory factory() {
|
||||
return BlendState.getState().getFactory();
|
||||
@@ -131,6 +136,22 @@ public class Util {
|
||||
q.w = -q.w;
|
||||
}
|
||||
|
||||
//#if MC>=10800
|
||||
public static Vector3f getCameraPos() {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
//#if MC>=11400
|
||||
//$$ Vec3d pos = mc.getEntityRenderManager().camera.getPos();
|
||||
//$$ return new Vector3f((float) pos.x, (float) pos.y, (float) pos.z);
|
||||
//#else
|
||||
return new Vector3f(
|
||||
(float) -mc.getRenderManager().viewerPosX,
|
||||
(float) -mc.getRenderManager().viewerPosY,
|
||||
(float) -mc.getRenderManager().viewerPosZ
|
||||
);
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
public static Vector3f rotate(Quaternion rot, Vector3f vec, Vector3f dest) {
|
||||
if (dest == null) dest = new Vector3f();
|
||||
Quaternion vecQ = new Quaternion(vec.x, vec.y, vec.z, 0);
|
||||
|
||||
@@ -11,10 +11,10 @@ import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.IdentityHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.replaymod.render.blend.Util.getCameraPos;
|
||||
import static com.replaymod.render.blend.Util.getGlModelViewMatrix;
|
||||
|
||||
public class EntityExporter implements Exporter {
|
||||
@@ -42,11 +42,7 @@ public class EntityExporter implements Exporter {
|
||||
// Entities are rendered relative to the viewer location.
|
||||
// We however want our Entities object to not move when the viewer does,
|
||||
// so we position it at 0/0/0 and instead have the entities themselves move more
|
||||
Matrix4f.translate(new Vector3f(
|
||||
(float) -mc.getRenderManager().viewerPosX,
|
||||
(float) -mc.getRenderManager().viewerPosY,
|
||||
(float) -mc.getRenderManager().viewerPosZ
|
||||
), modelView, modelView);
|
||||
Matrix4f.translate(getCameraPos(), modelView, modelView);
|
||||
renderState.push(entitiesObject, modelView);
|
||||
}
|
||||
|
||||
|
||||
@@ -8,9 +8,14 @@ import com.replaymod.render.blend.data.DObject;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.EnumFacing;
|
||||
import net.minecraftforge.client.model.pipeline.LightUtil;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.util.math.Vec3i;
|
||||
//#else
|
||||
import net.minecraftforge.client.model.pipeline.LightUtil;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
import com.replaymod.render.blend.mixin.ItemRendererAccessor;
|
||||
import net.minecraft.client.renderer.model.BakedQuad;
|
||||
@@ -122,7 +127,14 @@ public class ItemExporter implements Exporter {
|
||||
//#endif
|
||||
//#endif
|
||||
: 0xffffffff;
|
||||
//#if MC>=11400
|
||||
//$$ buffer.putVertexData(quad.getVertexData());
|
||||
//$$ buffer.setQuadColor(color);
|
||||
//$$ Vec3i vec3i_1 = quad.getFace().getVector();
|
||||
//$$ buffer.postNormal(vec3i_1.getX(), vec3i_1.getY(), vec3i_1.getZ());
|
||||
//#else
|
||||
LightUtil.renderQuadColor(buffer, quad, color);
|
||||
//#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -12,6 +12,10 @@ import de.johni0702.minecraft.gui.utils.lwjgl.vector.Matrix4f;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.vector.Vector3f;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.util.math.Vec3d;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import net.minecraft.client.particle.Particle;
|
||||
//#else
|
||||
@@ -27,6 +31,7 @@ import java.io.IOException;
|
||||
import java.util.IdentityHashMap;
|
||||
import java.util.Map;
|
||||
|
||||
import static com.replaymod.render.blend.Util.getCameraPos;
|
||||
import static com.replaymod.render.blend.Util.getGlModelViewMatrix;
|
||||
|
||||
public class ParticlesExporter implements Exporter {
|
||||
@@ -74,11 +79,7 @@ public class ParticlesExporter implements Exporter {
|
||||
// Particles are rendered relative to the viewer location.
|
||||
// We however want our Particles object to not move when the viewer does,
|
||||
// so we position it at 0/0/0 and instead have the particles themselves move more
|
||||
Matrix4f.translate(new Vector3f(
|
||||
(float) -mc.getRenderManager().viewerPosX,
|
||||
(float) -mc.getRenderManager().viewerPosY,
|
||||
(float) -mc.getRenderManager().viewerPosZ
|
||||
), modelView, modelView);
|
||||
Matrix4f.translate(getCameraPos(), modelView, modelView);
|
||||
renderState.push(lit ? litParticlesObject : particlesObject, modelView);
|
||||
}
|
||||
|
||||
@@ -158,7 +159,7 @@ public class ParticlesExporter implements Exporter {
|
||||
//#endif
|
||||
DMesh mesh = new DMesh();
|
||||
BlendMeshBuilder builder = new BlendMeshBuilder(mesh);
|
||||
builder.setOffset(offset);
|
||||
builder.setReverseOffset(offset);
|
||||
builder.setWellBehaved(true);
|
||||
//#if MC>=10809
|
||||
builder.begin(7, DefaultVertexFormats.PARTICLE_POSITION_TEX_COLOR_LMAP);
|
||||
@@ -166,7 +167,13 @@ public class ParticlesExporter implements Exporter {
|
||||
//$$ builder.startDrawingQuads();
|
||||
//#endif
|
||||
//#if MC>=10809
|
||||
particle.renderParticle(builder, MCVer.getMinecraft().getRenderViewEntity(), 0, 1, 1, 0, 0, 0);
|
||||
particle.renderParticle(builder,
|
||||
//#if MC>=11400
|
||||
//$$ MCVer.getMinecraft().gameRenderer.getCamera(),
|
||||
//#else
|
||||
MCVer.getMinecraft().getRenderViewEntity(),
|
||||
//#endif
|
||||
0, 1, 1, 0, 0, 0);
|
||||
//#else
|
||||
//$$ particle.func_180434_a(builder, Minecraft.getMinecraft().getRenderViewEntity(), 0, 1, 1, 0, 0, 0);
|
||||
//#endif
|
||||
|
||||
@@ -51,9 +51,15 @@ public class TileEntityExporter implements Exporter {
|
||||
// We however want our TileEntities object to not move when the viewer does,
|
||||
// so we position it at 0/0/0 and instead have the tile entities themselves move more
|
||||
Matrix4f.translate(new Vector3f(
|
||||
//#if MC>=11400
|
||||
//$$ (float) -mc.getEntityRenderManager().camera.getPos().x,
|
||||
//$$ (float) -mc.getEntityRenderManager().camera.getPos().y,
|
||||
//$$ (float) -mc.getEntityRenderManager().camera.getPos().z
|
||||
//#else
|
||||
(float) -mc.getRenderManager().viewerPosX,
|
||||
(float) -mc.getRenderManager().viewerPosY,
|
||||
(float) -mc.getRenderManager().viewerPosZ
|
||||
//#endif
|
||||
), modelView, modelView);
|
||||
renderState.push(tileEntitiesObject, modelView);
|
||||
}
|
||||
|
||||
@@ -5,13 +5,21 @@ import net.minecraft.client.renderer.chunk.RenderChunk;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Mixin(targets = "net/minecraft/client/render/WorldRenderer$ChunkInfo")
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
@Mixin(targets = "net/minecraft/client/renderer/WorldRenderer$ContainerLocalRenderInformation")
|
||||
//#else
|
||||
//$$ @Mixin(targets = "net/minecraft/client/renderer/RenderGlobal$ContainerLocalRenderInformation")
|
||||
//#endif
|
||||
//#endif
|
||||
public interface ContainerLocalRenderInformationAccessor {
|
||||
//#if MC>=11400
|
||||
//$$ @Accessor("renderer")
|
||||
//#else
|
||||
@Accessor
|
||||
//#endif
|
||||
RenderChunk getRenderChunk();
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -3,12 +3,17 @@ package com.replaymod.render.blend.mixin;
|
||||
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.blend.exporters.ParticlesExporter;
|
||||
import net.minecraft.entity.Entity;
|
||||
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;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//#else
|
||||
import net.minecraft.entity.Entity;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import net.minecraft.client.particle.ParticleManager;
|
||||
//#else
|
||||
@@ -23,7 +28,15 @@ import net.minecraft.client.particle.ParticleManager;
|
||||
public abstract class MixinEffectRenderer {
|
||||
|
||||
@Inject(method = "renderParticles", at = @At("HEAD"))
|
||||
public void preRender(Entity view, float renderPartialTicks, CallbackInfo ci) {
|
||||
private void preRender(
|
||||
//#if MC>=11400
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
Entity view,
|
||||
//#endif
|
||||
float renderPartialTicks,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ParticlesExporter.class).preParticlesRender(false);
|
||||
@@ -31,13 +44,22 @@ public abstract class MixinEffectRenderer {
|
||||
}
|
||||
|
||||
@Inject(method = "renderParticles", at = @At("RETURN"))
|
||||
public void postRender(Entity view, float renderPartialTicks, CallbackInfo ci) {
|
||||
private void postRender(
|
||||
//#if MC>=11400
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
Entity view,
|
||||
//#endif
|
||||
float renderPartialTicks,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(ParticlesExporter.class).postParticlesRender();
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC<11400
|
||||
@Inject(method = "renderLitParticles", at = @At("HEAD"))
|
||||
public void preLitRender(Entity view, float renderPartialTicks, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
@@ -53,5 +75,6 @@ public abstract class MixinEffectRenderer {
|
||||
blendState.get(ParticlesExporter.class).postParticlesRender();
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -5,12 +5,17 @@ import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.blend.exporters.EntityExporter;
|
||||
import com.replaymod.render.blend.exporters.TileEntityExporter;
|
||||
import net.minecraft.client.renderer.culling.ICamera;
|
||||
import net.minecraft.entity.Entity;
|
||||
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;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//#else
|
||||
import net.minecraft.entity.Entity;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
//#else
|
||||
@@ -33,7 +38,13 @@ public abstract class MixinRenderGlobal {
|
||||
//#else
|
||||
//$$ target = "Lnet/minecraft/client/renderer/entity/RenderManager;renderEntitySimple(Lnet/minecraft/entity/Entity;F)Z"))
|
||||
//#endif
|
||||
public void preEntityRender(Entity view, ICamera camera, float renderPartialTicks, CallbackInfo ci) {
|
||||
private void preEntityRender(
|
||||
//#if MC>=11400
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
Entity view,
|
||||
//#endif
|
||||
ICamera camera, float renderPartialTicks, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(EntityExporter.class).preEntitiesRender();
|
||||
@@ -48,7 +59,13 @@ public abstract class MixinRenderGlobal {
|
||||
//$$ target = "Lnet/minecraft/client/renderer/entity/RenderManager;renderEntitySimple(Lnet/minecraft/entity/Entity;F)Z",
|
||||
//#endif
|
||||
shift = At.Shift.AFTER))
|
||||
public void postEntityRender(Entity view, ICamera camera, float renderPartialTicks, CallbackInfo ci) {
|
||||
private void postEntityRender(
|
||||
//#if MC>=11400
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
Entity view,
|
||||
//#endif
|
||||
ICamera camera, float renderPartialTicks, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(EntityExporter.class).postEntitiesRender();
|
||||
@@ -63,7 +80,13 @@ public abstract class MixinRenderGlobal {
|
||||
//$$ target = "Lnet/minecraft/client/renderer/tileentity/TileEntityRendererDispatcher;renderTileEntity(Lnet/minecraft/tileentity/TileEntity;FI)V"
|
||||
//#endif
|
||||
))
|
||||
public void preTileEntityRender(Entity view, ICamera camera, float renderPartialTicks, CallbackInfo ci) {
|
||||
private void preTileEntityRender(
|
||||
//#if MC>=11400
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
Entity view,
|
||||
//#endif
|
||||
ICamera camera, float renderPartialTicks, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(TileEntityExporter.class).preTileEntitiesRender();
|
||||
@@ -79,7 +102,13 @@ public abstract class MixinRenderGlobal {
|
||||
//#endif
|
||||
shift = At.Shift.AFTER
|
||||
))
|
||||
public void postTileEntityRender(Entity view, ICamera camera, float renderPartialTicks, CallbackInfo ci) {
|
||||
private void postTileEntityRender(
|
||||
//#if MC>=11400
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
Entity view,
|
||||
//#endif
|
||||
ICamera camera, float renderPartialTicks, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
blendState.get(TileEntityExporter.class).postTileEntitiesRender();
|
||||
|
||||
@@ -28,6 +28,9 @@ import net.minecraft.client.renderer.model.IBakedModel;
|
||||
//$$ @Mixin(RenderItem.class)
|
||||
//#endif
|
||||
public abstract class MixinRenderItem {
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "renderItemModel", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
@Inject(method = "renderModel(Lnet/minecraft/client/renderer/model/IBakedModel;Lnet/minecraft/item/ItemStack;)V",
|
||||
at = @At("HEAD"))
|
||||
@@ -40,6 +43,7 @@ public abstract class MixinRenderItem {
|
||||
//$$ at = @At("HEAD"))
|
||||
//#endif
|
||||
//#endif
|
||||
//#endif
|
||||
private void onRenderModel(IBakedModel model, ItemStack stack, CallbackInfo ci) {
|
||||
BlendState blendState = BlendState.getState();
|
||||
if (blendState != null) {
|
||||
|
||||
@@ -19,11 +19,15 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public abstract class MixinRenderManager {
|
||||
|
||||
@Inject(
|
||||
//#if MC>=11400
|
||||
//$$ method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
method = "renderEntity",
|
||||
//#else
|
||||
//$$ method = "doRenderEntity",
|
||||
//#endif
|
||||
//#endif
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/renderer/entity/Render;doRender(Lnet/minecraft/entity/Entity;DDDFF)V"))
|
||||
public void preRender(Entity entity, double x, double y, double z, float yaw, float renderPartialTicks, boolean box,
|
||||
@@ -39,11 +43,15 @@ public abstract class MixinRenderManager {
|
||||
}
|
||||
|
||||
@Inject(
|
||||
//#if MC>=11400
|
||||
//$$ method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V",
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
method = "renderEntity",
|
||||
//#else
|
||||
//$$ method = "doRenderEntity",
|
||||
//#endif
|
||||
//#endif
|
||||
at = @At(value = "INVOKE",
|
||||
target = "Lnet/minecraft/client/renderer/entity/Render;doRender(Lnet/minecraft/entity/Entity;DDDFF)V",
|
||||
shift = At.Shift.AFTER))
|
||||
|
||||
@@ -14,8 +14,13 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public abstract class MixinTileEntityRendererDispatcher {
|
||||
|
||||
//#if MC>=11300
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V",
|
||||
//$$ at = @At("HEAD"))
|
||||
//#else
|
||||
@Inject(method = "render(Lnet/minecraft/tileentity/TileEntity;DDDFIZ)V",
|
||||
at = @At("HEAD"))
|
||||
//#endif
|
||||
public void preRender(TileEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) {
|
||||
float alpha = 1;
|
||||
//#else
|
||||
@@ -37,8 +42,13 @@ public abstract class MixinTileEntityRendererDispatcher {
|
||||
}
|
||||
|
||||
//#if MC>=11300
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "renderEntity(Lnet/minecraft/block/entity/BlockEntity;DDDFIZ)V",
|
||||
//$$ at = @At("RETURN"))
|
||||
//#else
|
||||
@Inject(method = "render(Lnet/minecraft/tileentity/TileEntity;DDDFIZ)V",
|
||||
at = @At("RETURN"))
|
||||
//#endif
|
||||
public void postRender(TileEntity tileEntity, double x, double y, double z, float renderPartialTicks, int destroyStage, boolean hasNoBlock, CallbackInfo ci) {
|
||||
//#else
|
||||
//#if MC>=11200
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.replaymod.render.capturer;
|
||||
|
||||
import com.replaymod.core.utils.EventRegistrations;
|
||||
import de.johni0702.minecraft.gui.utils.EventRegistrations;
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import com.replaymod.render.frame.CubicOpenGlFrame;
|
||||
import com.replaymod.render.frame.ODSOpenGlFrame;
|
||||
@@ -148,7 +148,11 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
||||
pushMatrix();
|
||||
frameBuffer().bindFramebuffer(true);
|
||||
|
||||
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
|
||||
//#if MC>=11400
|
||||
//$$ , false
|
||||
//#endif
|
||||
);
|
||||
enableTexture2D();
|
||||
|
||||
directionVariable.set(captureData.ordinal());
|
||||
|
||||
@@ -89,7 +89,11 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
pushMatrix();
|
||||
frameBuffer().bindFramebuffer(true);
|
||||
|
||||
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
|
||||
//#if MC>=11400
|
||||
//$$ , false
|
||||
//#endif
|
||||
);
|
||||
enableTexture2D();
|
||||
|
||||
worldRenderer.renderWorld(partialTicks, captureData);
|
||||
@@ -114,7 +118,11 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
//#if MC>=11300
|
||||
Framebuffer fb = mc.getFramebuffer();
|
||||
if (fb.framebufferWidth != width || fb.framebufferHeight != height) {
|
||||
fb.createFramebuffer(width, height);
|
||||
fb.createFramebuffer(width, height
|
||||
//#if MC>=11400
|
||||
//$$ , false
|
||||
//#endif
|
||||
);
|
||||
}
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor mainWindow = (MainWindowAccessor) (Object) mc.mainWindow;
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
package com.replaymod.render.events;
|
||||
|
||||
import com.replaymod.render.rendering.VideoRenderer;
|
||||
import net.fabricmc.fabric.api.event.Event;
|
||||
import net.fabricmc.fabric.api.event.EventFactory;
|
||||
|
||||
public interface ReplayRenderCallback {
|
||||
interface Pre {
|
||||
Event<Pre> EVENT = EventFactory.createArrayBacked(Pre.class,
|
||||
(listeners) -> (renderer) -> {
|
||||
for (Pre listener : listeners) {
|
||||
listener.beforeRendering(renderer);
|
||||
}
|
||||
});
|
||||
|
||||
void beforeRendering(VideoRenderer renderer);
|
||||
}
|
||||
|
||||
interface Post {
|
||||
Event<Post> EVENT = EventFactory.createArrayBacked(Post.class,
|
||||
(listeners) -> (renderer) -> {
|
||||
for (Post listener : listeners) {
|
||||
listener.afterRendering(renderer);
|
||||
}
|
||||
});
|
||||
|
||||
void afterRendering(VideoRenderer renderer);
|
||||
}
|
||||
}
|
||||
@@ -1,33 +0,0 @@
|
||||
package com.replaymod.render.events;
|
||||
|
||||
import com.replaymod.render.rendering.VideoRenderer;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
//#if MC>=10800
|
||||
//#if MC>=11300
|
||||
import net.minecraftforge.eventbus.api.Event;
|
||||
//#else
|
||||
//$$ import net.minecraftforge.fml.common.eventhandler.Event;
|
||||
//#endif
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.eventhandler.Event;
|
||||
//#endif
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public abstract class ReplayRenderEvent extends Event {
|
||||
@Getter
|
||||
private final VideoRenderer videoRenderer;
|
||||
|
||||
public static class Pre extends ReplayRenderEvent {
|
||||
public Pre(VideoRenderer videoRenderer) {
|
||||
super(videoRenderer);
|
||||
}
|
||||
}
|
||||
|
||||
public static class Post extends ReplayRenderEvent {
|
||||
public Post(VideoRenderer videoRenderer) {
|
||||
super(videoRenderer);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -37,6 +37,10 @@ import java.util.List;
|
||||
|
||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.text.TranslatableTextComponent;
|
||||
//#endif
|
||||
|
||||
public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> {
|
||||
private final GuiLabel title = new GuiLabel().setI18nText("replaymod.gui.renderqueue.title").setColor(Colors.BLACK);
|
||||
private final GuiVerticalList list = new GuiVerticalList().setDrawShadow(true).setDrawSlider(true);
|
||||
@@ -210,8 +214,16 @@ public class GuiRenderQueue extends AbstractGuiPopup<GuiRenderQueue> {
|
||||
videoRenderer.renderVideo();
|
||||
} catch (VideoWriter.NoFFmpegException e) {
|
||||
LOGGER.error("Rendering video:", e);
|
||||
GuiErrorScreen errorScreen = new GuiErrorScreen(I18n.format("replaymod.gui.rendering.error.title"),
|
||||
I18n.format("replaymod.gui.rendering.error.message"));
|
||||
GuiErrorScreen errorScreen = new GuiErrorScreen(
|
||||
//#if MC>=11400
|
||||
//$$ () -> {},
|
||||
//$$ new TranslatableTextComponent("replaymod.gui.rendering.error.title"),
|
||||
//$$ new TranslatableTextComponent("replaymod.gui.rendering.error.message")
|
||||
//#else
|
||||
I18n.format("replaymod.gui.rendering.error.title"),
|
||||
I18n.format("replaymod.gui.rendering.error.message")
|
||||
//#endif
|
||||
);
|
||||
getMinecraft().displayGuiScreen(errorScreen);
|
||||
return;
|
||||
} catch (VideoWriter.FFmpegStartupException e) {
|
||||
|
||||
@@ -51,6 +51,10 @@ import java.util.Map;
|
||||
import static com.replaymod.core.utils.Utils.error;
|
||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.text.TranslatableTextComponent;
|
||||
//#endif
|
||||
|
||||
public class GuiRenderSettings extends GuiScreen implements Closeable {
|
||||
public final GuiPanel contentPanel = new GuiPanel(this).setBackgroundColor(Colors.DARK_TRANSPARENT);
|
||||
public final GuiVerticalList settingsList = new GuiVerticalList(contentPanel).setDrawSlider(true);
|
||||
@@ -233,8 +237,16 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
||||
videoRenderer.renderVideo();
|
||||
} catch (VideoWriter.NoFFmpegException e) {
|
||||
LOGGER.error("Rendering video:", e);
|
||||
GuiErrorScreen errorScreen = new GuiErrorScreen(I18n.format("replaymod.gui.rendering.error.title"),
|
||||
I18n.format("replaymod.gui.rendering.error.message"));
|
||||
GuiErrorScreen errorScreen = new GuiErrorScreen(
|
||||
//#if MC>=11400
|
||||
//$$ () -> {},
|
||||
//$$ new TranslatableTextComponent("replaymod.gui.rendering.error.title"),
|
||||
//$$ new TranslatableTextComponent("replaymod.gui.rendering.error.message")
|
||||
//#else
|
||||
I18n.format("replaymod.gui.rendering.error.title"),
|
||||
I18n.format("replaymod.gui.rendering.error.message")
|
||||
//#endif
|
||||
);
|
||||
getMinecraft().displayGuiScreen(errorScreen);
|
||||
} catch (VideoWriter.FFmpegStartupException e) {
|
||||
GuiExportFailed.tryToRecover(e, newSettings -> {
|
||||
|
||||
@@ -75,7 +75,14 @@ public class ChunkLoadingRenderGlobal {
|
||||
workerJailingQueue = new JailingQueue<>(queueChunkUpdates);
|
||||
renderDispatcherAcc.setQueueChunkUpdates(workerJailingQueue);
|
||||
//#if MC>=10904
|
||||
ChunkRenderTask element = new ChunkRenderTask(null, null, 0);
|
||||
ChunkRenderTask element = new ChunkRenderTask(
|
||||
null,
|
||||
null,
|
||||
0
|
||||
//#if MC>=11400
|
||||
//$$ , null
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
//$$ ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null);
|
||||
//#endif
|
||||
|
||||
@@ -8,6 +8,7 @@ import com.replaymod.render.capturer.WorldRenderer;
|
||||
import lombok.Getter;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
//#if MC<11400
|
||||
//#if MC>=10800
|
||||
//#if MC>=11300
|
||||
import net.minecraftforge.fml.hooks.BasicEventHooks;
|
||||
@@ -19,6 +20,7 @@ import net.minecraftforge.fml.hooks.BasicEventHooks;
|
||||
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
|
||||
//$$ import cpw.mods.fml.common.FMLCommonHandler;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -49,11 +51,13 @@ public class EntityRendererHandler implements WorldRenderer {
|
||||
}
|
||||
|
||||
public void renderWorld(float partialTicks, long finishTimeNano) {
|
||||
//#if MC<11400
|
||||
//#if MC>=11300
|
||||
BasicEventHooks.onRenderTickStart(partialTicks);
|
||||
//#else
|
||||
//$$ FMLCommonHandler.instance().onRenderTickStart(partialTicks);
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
mc.entityRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||
@@ -71,11 +75,13 @@ public class EntityRendererHandler implements WorldRenderer {
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
//#if MC<11400
|
||||
//#if MC>=11300
|
||||
BasicEventHooks.onRenderTickEnd(partialTicks);
|
||||
//#else
|
||||
//$$ FMLCommonHandler.instance().onRenderTickEnd(partialTicks);
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
168
src/main/java/com/replaymod/render/mixin/MixinCamera.java
Normal file
168
src/main/java/com/replaymod/render/mixin/MixinCamera.java
Normal file
@@ -0,0 +1,168 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import com.replaymod.render.capturer.CubicOpenGlFrameCapturer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import com.replaymod.replay.camera.CameraEntity;
|
||||
import net.minecraft.entity.Entity;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
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;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//$$ import net.minecraft.world.BlockView;
|
||||
//#else
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Mixin(value = Camera.class)
|
||||
//#else
|
||||
@Mixin(value = GameRenderer.class)
|
||||
//#endif
|
||||
public abstract class MixinCamera {
|
||||
private EntityRendererHandler getHandler() {
|
||||
return ((EntityRendererHandler.IEntityRenderer) getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
}
|
||||
|
||||
private float orgYaw;
|
||||
private float orgPitch;
|
||||
private float orgPrevYaw;
|
||||
private float orgPrevPitch;
|
||||
private float orgRoll;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "update", at = @At("HEAD"))
|
||||
//#else
|
||||
@Inject(method = "setupCameraTransform", at = @At("HEAD"))
|
||||
//#endif
|
||||
private void replayModRender_beforeSetupCameraTransform(
|
||||
//#if MC>=11400
|
||||
//$$ BlockView blockView,
|
||||
//$$ Entity entity,
|
||||
//$$ boolean thirdPerson,
|
||||
//$$ boolean inverseView,
|
||||
//#endif
|
||||
float partialTicks,
|
||||
//#if MC<11300
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (getHandler() != null) {
|
||||
//#if MC<11400
|
||||
Entity entity = getRenderViewEntity(getMinecraft());
|
||||
//#endif
|
||||
orgYaw = entity.rotationYaw;
|
||||
orgPitch = entity.rotationPitch;
|
||||
orgPrevYaw = entity.prevRotationYaw;
|
||||
orgPrevPitch = entity.prevRotationPitch;
|
||||
orgRoll = entity instanceof CameraEntity ? ((CameraEntity) entity).roll : 0;
|
||||
}
|
||||
//#if MC<11400
|
||||
}
|
||||
|
||||
@Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) {
|
||||
//#endif
|
||||
if (getHandler() != null) {
|
||||
//#if MC<11400
|
||||
Entity entity = getRenderViewEntity(getMinecraft());
|
||||
//#endif
|
||||
RenderSettings settings = getHandler().getSettings();
|
||||
if (settings.isStabilizeYaw()) {
|
||||
entity.prevRotationYaw = entity.rotationYaw = 0;
|
||||
}
|
||||
if (settings.isStabilizePitch()) {
|
||||
entity.prevRotationPitch = entity.rotationPitch = 0;
|
||||
}
|
||||
if (settings.isStabilizeRoll() && entity instanceof CameraEntity) {
|
||||
((CameraEntity) entity).roll = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "update", at = @At("RETURN"))
|
||||
//#else
|
||||
@Inject(method = "setupCameraTransform", at = @At("RETURN"))
|
||||
//#endif
|
||||
private void replayModRender_afterSetupCameraTransform(
|
||||
//#if MC>=11400
|
||||
//$$ BlockView blockView,
|
||||
//$$ Entity entity,
|
||||
//$$ boolean thirdPerson,
|
||||
//$$ boolean inverseView,
|
||||
//#endif
|
||||
float partialTicks,
|
||||
//#if MC<11300
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (getHandler() != null) {
|
||||
//#if MC<11400
|
||||
Entity entity = getRenderViewEntity(getMinecraft());
|
||||
//#endif
|
||||
entity.rotationYaw = orgYaw;
|
||||
entity.rotationPitch = orgPitch;
|
||||
entity.prevRotationYaw = orgPrevYaw;
|
||||
entity.prevRotationPitch = orgPrevPitch;
|
||||
if (entity instanceof CameraEntity) {
|
||||
((CameraEntity) entity).roll = orgRoll;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "update", at = @At("HEAD"))
|
||||
//#else
|
||||
@Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
//#endif
|
||||
private void replayModRender_setupCubicFrameRotation(
|
||||
//#if MC>=11400
|
||||
//$$ BlockView blockView,
|
||||
//$$ Entity entity,
|
||||
//$$ boolean thirdPerson,
|
||||
//$$ boolean inverseView,
|
||||
//#endif
|
||||
float partialTicks,
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (getHandler() != null && getHandler().data instanceof CubicOpenGlFrameCapturer.Data) {
|
||||
switch ((CubicOpenGlFrameCapturer.Data) getHandler().data) {
|
||||
case FRONT:
|
||||
GL11.glRotatef(0, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case RIGHT:
|
||||
GL11.glRotatef(90, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case BACK:
|
||||
GL11.glRotatef(180, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case LEFT:
|
||||
GL11.glRotatef(-90, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case BOTTOM:
|
||||
GL11.glRotatef(90, 1.0F, 0.0F, 0.0F);
|
||||
break;
|
||||
case TOP:
|
||||
GL11.glRotatef(-90, 1.0F, 0.0F, 0.0F);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (getHandler() != null && getHandler().omnidirectional) {
|
||||
// Minecraft goes back a little so we have to revert that
|
||||
//#if MC>=11300
|
||||
GL11.glTranslatef(0.0F, 0.0F, -0.05F);
|
||||
//#else
|
||||
//$$ GL11.glTranslatef(0.0F, 0.0F, 0.1F);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,10 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import com.replaymod.render.capturer.CubicOpenGlFrameCapturer;
|
||||
import com.replaymod.render.capturer.StereoscopicOpenGlFrameCapturer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import com.replaymod.replay.camera.CameraEntity;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@@ -18,15 +14,22 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//$$ import net.minecraft.util.hit.HitResult;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.client.GameSettings;
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
import net.minecraft.client.renderer.Matrix4f;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
//#else
|
||||
//$$ import com.replaymod.replay.camera.CameraEntity;
|
||||
//$$ import net.minecraft.client.renderer.EntityRenderer;
|
||||
//$$ import net.minecraft.client.renderer.RenderGlobal;
|
||||
//$$ import net.minecraft.client.settings.GameSettings;
|
||||
//$$ import net.minecraft.entity.Entity;
|
||||
//$$ import org.lwjgl.util.glu.Project;
|
||||
//#endif
|
||||
|
||||
@@ -88,69 +91,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
private void replayModRender_resetRotationIfNeeded(float partialTicks, CallbackInfo ci) {
|
||||
if (replayModRender_handler != null) {
|
||||
Entity entity = getRenderViewEntity(MCVer.getMinecraft());
|
||||
RenderSettings settings = replayModRender_handler.getSettings();
|
||||
if (settings.isStabilizeYaw()) {
|
||||
entity.prevRotationYaw = entity.rotationYaw = 0;
|
||||
}
|
||||
if (settings.isStabilizePitch()) {
|
||||
entity.prevRotationPitch = entity.rotationPitch = 0;
|
||||
}
|
||||
if (settings.isStabilizeRoll() && entity instanceof CameraEntity) {
|
||||
((CameraEntity) entity).roll = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private float orgYaw;
|
||||
private float orgPitch;
|
||||
private float orgPrevYaw;
|
||||
private float orgPrevPitch;
|
||||
private float orgRoll;
|
||||
|
||||
@Inject(method = "setupCameraTransform", at = @At("HEAD"))
|
||||
private void replayModRender_beforeSetupCameraTransform(
|
||||
float partialTicks,
|
||||
//#if MC<11300
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (replayModRender_handler != null) {
|
||||
Entity entity = getRenderViewEntity(MCVer.getMinecraft());
|
||||
orgYaw = entity.rotationYaw;
|
||||
orgPitch = entity.rotationPitch;
|
||||
orgPrevYaw = entity.prevRotationYaw;
|
||||
orgPrevPitch = entity.prevRotationPitch;
|
||||
orgRoll = entity instanceof CameraEntity ? ((CameraEntity) entity).roll : 0;
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "setupCameraTransform", at = @At("RETURN"))
|
||||
private void replayModRender_afterSetupCameraTransform(
|
||||
float partialTicks,
|
||||
//#if MC<11300
|
||||
//$$ int renderPass,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
if (replayModRender_handler != null) {
|
||||
Entity entity = getRenderViewEntity(MCVer.getMinecraft());
|
||||
entity.rotationYaw = orgYaw;
|
||||
entity.rotationPitch = orgPitch;
|
||||
entity.prevRotationYaw = orgPrevYaw;
|
||||
entity.prevRotationPitch = orgPrevPitch;
|
||||
if (entity instanceof CameraEntity) {
|
||||
((CameraEntity) entity).roll = orgRoll;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "renderHand", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_renderSpectatorHand(
|
||||
//#if MC>=11400
|
||||
//$$ Camera camera,
|
||||
//#endif
|
||||
float partialTicks,
|
||||
//#if MC<11300
|
||||
//$$ int renderPass,
|
||||
@@ -183,6 +128,14 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
//$$ public abstract void renderHand(float partialTicks, int renderPass);
|
||||
//#endif
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;drawHighlightedBlockOutline(Lnet/minecraft/client/render/Camera;Lnet/minecraft/util/hit/HitResult;I)V"))
|
||||
//$$ private void replayModRender_drawSelectionBox(WorldRenderer instance, Camera camera, HitResult hitResult, int something) {
|
||||
//$$ if (replayModRender_handler == null) {
|
||||
//$$ instance.drawHighlightedBlockOutline(camera, hitResult, something);
|
||||
//$$ }
|
||||
//$$ }
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
@Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;drawSelectionBox(Lnet/minecraft/entity/player/EntityPlayer;Lnet/minecraft/util/math/RayTraceResult;IF)V"))
|
||||
private void replayModRender_drawSelectionBox(WorldRenderer instance, EntityPlayer player, RayTraceResult rtr, int alwaysZero, float partialTicks) {
|
||||
@@ -203,11 +156,16 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
instance.drawSelectionBox(player, rtr, alwaysZero, partialTicks);
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
private int orgRenderDistanceChunks;
|
||||
|
||||
//#if MC>=11300
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "renderCenter", at = @At(value = "JUMP", ordinal = 0))
|
||||
//#else
|
||||
@Inject(method = "updateCameraAndRender(FJ)V", at = @At(value = "JUMP", ordinal = 0))
|
||||
//#endif
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
//$$ @Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0))
|
||||
@@ -225,7 +183,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
}
|
||||
|
||||
//#if MC>=11300
|
||||
//#if MC>=11400
|
||||
//$$ @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;renderSky(F)V"))
|
||||
//#else
|
||||
@Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;renderSky(F)V"))
|
||||
//#endif
|
||||
private void replayModRender_renderSky(WorldRenderer instance, float partialTicks) {
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@@ -240,7 +202,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
MCVer.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);
|
||||
GlStateManager.clear(GL11.GL_COLOR_BUFFER_BIT
|
||||
//#if MC>=11400
|
||||
//$$ , false
|
||||
//#endif
|
||||
);
|
||||
} else {
|
||||
//#if MC>=11300
|
||||
instance.renderSky(partialTicks);
|
||||
@@ -310,7 +276,11 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Redirect(method = "renderCenter", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/util/math/Matrix4f;method_4929(DFFF)Lnet/minecraft/client/util/math/Matrix4f;"))
|
||||
//#else
|
||||
@Redirect(method = "updateCameraAndRender(FJ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)Lnet/minecraft/client/renderer/Matrix4f;"))
|
||||
//#endif
|
||||
private Matrix4f replayModRender_perspective$1(double fovY, float aspect, float zNear, float zFar) {
|
||||
return replayModRender_perspective((float) fovY, aspect, zNear, zFar);
|
||||
}
|
||||
@@ -357,38 +327,4 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
//$$ Project.gluPerspective(fovY, aspect, zNear, zFar);
|
||||
//$$ }
|
||||
//#endif
|
||||
|
||||
@Inject(method = "orientCamera", at = @At("HEAD"))
|
||||
private void replayModRender_setupCubicFrameRotation(float partialTicks, CallbackInfo ci) {
|
||||
if (replayModRender_getHandler() != null && replayModRender_getHandler().data instanceof CubicOpenGlFrameCapturer.Data) {
|
||||
switch ((CubicOpenGlFrameCapturer.Data) replayModRender_getHandler().data) {
|
||||
case FRONT:
|
||||
GL11.glRotatef(0, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case RIGHT:
|
||||
GL11.glRotatef(90, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case BACK:
|
||||
GL11.glRotatef(180, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case LEFT:
|
||||
GL11.glRotatef(-90, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case BOTTOM:
|
||||
GL11.glRotatef(90, 1.0F, 0.0F, 0.0F);
|
||||
break;
|
||||
case TOP:
|
||||
GL11.glRotatef(-90, 1.0F, 0.0F, 0.0F);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) {
|
||||
// Minecraft goes back a little so we have to revert that
|
||||
//#if MC>=11300
|
||||
GL11.glTranslatef(0.0F, 0.0F, -0.05F);
|
||||
//#else
|
||||
//$$ GL11.glTranslatef(0.0F, 0.0F, 0.1F);
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,10 +9,23 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//#endif
|
||||
|
||||
@Mixin(FogRenderer.class)
|
||||
public abstract class MixinFogRenderer {
|
||||
@Inject(method = "setupFog", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_onSetupFog(int fogDistanceFlag, float partialTicks, CallbackInfo ci) {
|
||||
private void replayModRender_onSetupFog(
|
||||
//#if MC>=11400
|
||||
//$$ Camera camera,
|
||||
//$$ int something,
|
||||
//#else
|
||||
int fogDistanceFlag,
|
||||
float partialTicks,
|
||||
//#endif
|
||||
CallbackInfo ci
|
||||
) {
|
||||
EntityRendererHandler handler =
|
||||
((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
if (handler == null) return;
|
||||
|
||||
@@ -5,19 +5,14 @@ import com.replaymod.render.hooks.FogStateCallback;
|
||||
import com.replaymod.render.hooks.Texture2DStateCallback;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
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;
|
||||
|
||||
@Mixin(GlStateManager.class)
|
||||
public class MixinGlStateManager {
|
||||
//#if MC>=11300
|
||||
@Accessor
|
||||
//#else
|
||||
//$$ @Accessor("activeTextureUnit")
|
||||
//#endif
|
||||
private static int getActiveTexture() { return 0; }
|
||||
public abstract class MixinGlStateManager {
|
||||
@Shadow private static int activeTexture;
|
||||
|
||||
@Inject(method = "enableFog", at = @At("HEAD"))
|
||||
private static void enableFog(CallbackInfo ci) {
|
||||
@@ -31,12 +26,12 @@ public class MixinGlStateManager {
|
||||
|
||||
@Inject(method = "enableTexture2D", at = @At("HEAD"))
|
||||
private static void enableTexture2D(CallbackInfo ci) {
|
||||
Texture2DStateCallback.EVENT.invoker().texture2DStateChanged(getActiveTexture(), true);
|
||||
Texture2DStateCallback.EVENT.invoker().texture2DStateChanged(MixinGlStateManager.activeTexture, true);
|
||||
}
|
||||
|
||||
@Inject(method = "disableTexture2D", at = @At("HEAD"))
|
||||
private static void disableTexture2D(CallbackInfo ci) {
|
||||
Texture2DStateCallback.EVENT.invoker().texture2DStateChanged(getActiveTexture(), false);
|
||||
Texture2DStateCallback.EVENT.invoker().texture2DStateChanged(MixinGlStateManager.activeTexture, false);
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@@ -8,22 +8,28 @@ import com.replaymod.render.blend.mixin.ParticleAccessor;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.particle.Particle;
|
||||
import net.minecraft.client.particle.ParticleManager;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.client.renderer.BufferBuilder;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
|
||||
//#if MC>=11200
|
||||
import net.minecraft.client.renderer.BufferBuilder;
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.VertexBuffer;
|
||||
import net.minecraft.entity.Entity;
|
||||
//#endif
|
||||
|
||||
@Mixin(ParticleManager.class)
|
||||
public abstract class MixinParticleManager {
|
||||
//#if MC>=11200
|
||||
//#if MC>=11400
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;buildGeometry(Lnet/minecraft/client/render/BufferBuilder;Lnet/minecraft/client/render/Camera;FFFFFF)V"))
|
||||
//$$ private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Camera view, float partialTicks,
|
||||
//#else
|
||||
@Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
private void renderNormalParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks,
|
||||
//#endif
|
||||
//#else
|
||||
//$$ @Redirect(method = "renderParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/VertexBuffer;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
//$$ private void renderNormalParticle(Particle particle, VertexBuffer vertexBuffer, Entity view, float partialTicks,
|
||||
@@ -32,6 +38,8 @@ public abstract class MixinParticleManager {
|
||||
renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
}
|
||||
|
||||
// Seems to be gone by 1.14
|
||||
//#if MC<11400
|
||||
//#if MC>=11200
|
||||
@Redirect(method = "renderLitParticles", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/particle/Particle;renderParticle(Lnet/minecraft/client/renderer/BufferBuilder;Lnet/minecraft/entity/Entity;FFFFFF)V"))
|
||||
private void renderLitParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks,
|
||||
@@ -42,22 +50,28 @@ public abstract class MixinParticleManager {
|
||||
float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
renderParticle(particle, vertexBuffer, view, partialTicks, rotX, rotXZ, rotZ, rotYZ, rotXY);
|
||||
}
|
||||
|
||||
//#if MC>=11200
|
||||
private void renderParticle(Particle particle, BufferBuilder vertexBuffer, Entity view, float partialTicks,
|
||||
//#else
|
||||
//$$ private void renderParticle(Particle particle, VertexBuffer vertexBuffer, Entity view, float partialTicks,
|
||||
//#endif
|
||||
float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
|
||||
private void renderParticle(Particle particle,
|
||||
BufferBuilder vertexBuffer,
|
||||
//#if MC>=11400
|
||||
//$$ Camera view,
|
||||
//#else
|
||||
Entity view,
|
||||
//#endif
|
||||
float partialTicks,
|
||||
float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
if (handler != null && handler.omnidirectional) {
|
||||
// Align all particles towards the camera
|
||||
ParticleAccessor acc = (ParticleAccessor) particle;
|
||||
double dx = acc.getPrevPosX() + (acc.getPosX() - acc.getPrevPosX()) * partialTicks - view.posX;
|
||||
double dy = acc.getPrevPosY() + (acc.getPosY() - acc.getPrevPosY()) * partialTicks - view.posY;
|
||||
double dz = acc.getPrevPosZ() + (acc.getPosZ() - acc.getPrevPosZ()) * partialTicks - view.posZ;
|
||||
double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
|
||||
double yaw = -Math.atan2(dx, dz);
|
||||
//#if MC>=11400
|
||||
//$$ Vec3d pos = view.getPos();
|
||||
//#else
|
||||
Vec3d pos = new Vec3d(view.posX, view.posY, view.posZ);
|
||||
//#endif
|
||||
Vec3d d = MCVer.getPosition(particle, partialTicks).subtract(pos);
|
||||
double pitch = -Math.atan2(d.y, Math.sqrt(d.x * d.x + d.z * d.z));
|
||||
double yaw = -Math.atan2(d.x, d.z);
|
||||
|
||||
rotX = (float) Math.cos(yaw);
|
||||
rotZ = (float) Math.sin(yaw);
|
||||
|
||||
@@ -11,7 +11,11 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(Render.class)
|
||||
public abstract class MixinRender {
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "renderLabel(Lnet/minecraft/entity/Entity;Ljava/lang/String;DDDI)V", at = @At("HEAD"), cancellable = true)
|
||||
//#else
|
||||
@Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true)
|
||||
//#endif
|
||||
private void replayModRender_areAllNamesHidden(Entity entityIn, String str, double x, double y, double z, int maxDistance, CallbackInfo ci) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
if (handler != null && !handler.getSettings().isRenderNameTags()) {
|
||||
|
||||
@@ -11,6 +11,10 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ import net.minecraft.client.render.Camera;
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
//#else
|
||||
@@ -40,12 +44,16 @@ public abstract class MixinRenderGlobal {
|
||||
|
||||
@Shadow
|
||||
public abstract void setupTerrain(
|
||||
//#if MC>=11400
|
||||
//$$ Camera viewEntity,
|
||||
//#else
|
||||
Entity viewEntity,
|
||||
//#if MC>=11300
|
||||
float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
ICamera camera,
|
||||
int frameCount,
|
||||
boolean playerSpectator
|
||||
@@ -53,12 +61,16 @@ public abstract class MixinRenderGlobal {
|
||||
|
||||
@Inject(method = "setupTerrain", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_setupTerrain(
|
||||
//#if MC>=11400
|
||||
//$$ Camera viewEntity,
|
||||
//#else
|
||||
Entity viewEntity,
|
||||
//#if MC>=11300
|
||||
float partialTicks,
|
||||
//#else
|
||||
//$$ double partialTicks,
|
||||
//#endif
|
||||
//#endif
|
||||
ICamera camera,
|
||||
int frameCount,
|
||||
boolean playerSpectator,
|
||||
@@ -68,11 +80,19 @@ public abstract class MixinRenderGlobal {
|
||||
replayModRender_passThroughSetupTerrain = true;
|
||||
|
||||
do {
|
||||
setupTerrain(viewEntity, partialTicks, camera, replayModRender_hook.nextFrameId(), playerSpectator);
|
||||
setupTerrain(
|
||||
viewEntity,
|
||||
//#if MC<11400
|
||||
partialTicks,
|
||||
//#endif
|
||||
camera,
|
||||
replayModRender_hook.nextFrameId(),
|
||||
playerSpectator
|
||||
);
|
||||
replayModRender_hook.updateChunks();
|
||||
} while (displayListEntitiesDirty);
|
||||
} while (this.displayListEntitiesDirty);
|
||||
|
||||
displayListEntitiesDirty = true;
|
||||
this.displayListEntitiesDirty = true;
|
||||
|
||||
replayModRender_passThroughSetupTerrain = false;
|
||||
ci.cancel();
|
||||
@@ -96,17 +116,20 @@ public abstract class MixinRenderGlobal {
|
||||
}
|
||||
}
|
||||
|
||||
// Prior to 1.9.4, MC always uses the same ChunkRenderDispatcher instance
|
||||
//#if MC>=10904
|
||||
@Inject(method = "setWorldAndLoadRenderers", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/chunk/ChunkRenderDispatcher;stopWorkerThreads()V"))
|
||||
private void stopWorkerThreadsAndChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
if (replayModRender_hook != null) {
|
||||
replayModRender_hook.updateRenderDispatcher(null);
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
@Inject(method = "loadRenderers", at = @At(value = "RETURN"))
|
||||
private void setupChunkLoadingRenderGlobal(CallbackInfo ci) {
|
||||
if (replayModRender_hook != null) {
|
||||
replayModRender_hook.updateRenderDispatcher(renderDispatcher);
|
||||
replayModRender_hook.updateRenderDispatcher(this.renderDispatcher);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -23,11 +23,15 @@ public abstract class MixinRenderManager {
|
||||
@Shadow
|
||||
private float playerViewY;
|
||||
|
||||
//#if MC>=11400
|
||||
//$$ @Inject(method = "render(Lnet/minecraft/entity/Entity;DDDFFZ)V", at = @At("HEAD"))
|
||||
//#else
|
||||
//#if MC>=11300
|
||||
@Inject(method = "renderEntity", at = @At("HEAD"))
|
||||
//#else
|
||||
//$$ @Inject(method = "doRenderEntity", at = @At("HEAD"))
|
||||
//#endif
|
||||
//#endif
|
||||
//#if MC>=10904
|
||||
private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfo ci) {
|
||||
//#else
|
||||
@@ -37,8 +41,8 @@ public abstract class MixinRenderManager {
|
||||
if (handler != null && handler.omnidirectional) {
|
||||
double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
|
||||
double yaw = -Math.atan2(dx, dz);
|
||||
playerViewX = (float) Math.toDegrees(pitch);
|
||||
playerViewY = (float) Math.toDegrees(yaw);
|
||||
this.playerViewX = (float) Math.toDegrees(pitch);
|
||||
this.playerViewY = (float) Math.toDegrees(yaw);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ import com.replaymod.render.ReplayModRender;
|
||||
import com.replaymod.render.VideoWriter;
|
||||
import com.replaymod.render.blend.BlendState;
|
||||
import com.replaymod.render.capturer.RenderInfo;
|
||||
import com.replaymod.render.events.ReplayRenderEvent;
|
||||
import com.replaymod.render.events.ReplayRenderCallback;
|
||||
import com.replaymod.render.frame.RGBFrame;
|
||||
import com.replaymod.render.gui.GuiRenderingDone;
|
||||
import com.replaymod.render.gui.GuiVideoRenderer;
|
||||
@@ -39,6 +39,7 @@ import org.lwjgl.glfw.GLFW;
|
||||
//$$ import net.minecraft.client.gui.ScaledResolution;
|
||||
//$$ import org.lwjgl.input.Mouse;
|
||||
//$$ import org.lwjgl.opengl.Display;
|
||||
//$$ import static com.replaymod.core.versions.MCVer.newScaledResolution;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10800
|
||||
@@ -58,7 +59,6 @@ import java.util.concurrent.Future;
|
||||
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 org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
@@ -124,7 +124,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
* @return {@code true} if rendering was successful, {@code false} if the user aborted rendering (or the window was closed)
|
||||
*/
|
||||
public boolean renderVideo() throws Throwable {
|
||||
FML_BUS.post(new ReplayRenderEvent.Pre(this));
|
||||
ReplayRenderCallback.Pre.EVENT.invoker().beforeRendering(this);
|
||||
|
||||
setup();
|
||||
|
||||
@@ -177,7 +177,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
finish();
|
||||
|
||||
FML_BUS.post(new ReplayRenderEvent.Post(this));
|
||||
ReplayRenderCallback.Post.EVENT.invoker().afterRendering(this);
|
||||
|
||||
if (failureCause != null) {
|
||||
throw failureCause;
|
||||
@@ -319,7 +319,11 @@ public class VideoRenderer implements RenderInfo {
|
||||
//#endif
|
||||
|
||||
// Set up our own framebuffer to render the GUI to
|
||||
guiFramebuffer = new Framebuffer(displayWidth, displayHeight, true);
|
||||
guiFramebuffer = new Framebuffer(displayWidth, displayHeight, true
|
||||
//#if MC>=11400
|
||||
//$$ , false
|
||||
//#endif
|
||||
);
|
||||
}
|
||||
|
||||
private void finish() {
|
||||
@@ -327,7 +331,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
timelinePlayerFuture.cancel(false);
|
||||
}
|
||||
// Tear down of the timeline player might only happen the next tick after it was cancelled
|
||||
timelinePlayer.onTick(new ReplayTimer.UpdatedEvent());
|
||||
timelinePlayer.onTick();
|
||||
|
||||
if (!OpenGlHelper.isFramebufferEnabled()) {
|
||||
//#if MC>=11300
|
||||
@@ -374,7 +378,11 @@ public class VideoRenderer implements RenderInfo {
|
||||
|
||||
// Finally, resize the Minecraft framebuffer to the actual width/height of the window
|
||||
//#if MC>=11300
|
||||
mc.getFramebuffer().createFramebuffer(displayWidth, displayHeight);
|
||||
mc.getFramebuffer().createFramebuffer(displayWidth, displayHeight
|
||||
//#if MC>=11400
|
||||
//$$ , false
|
||||
//#endif
|
||||
);
|
||||
//noinspection ConstantConditions
|
||||
MainWindowAccessor acc = (MainWindowAccessor) (Object) mc.mainWindow;
|
||||
acc.setFramebufferWidth(displayWidth);
|
||||
@@ -385,6 +393,9 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
|
||||
private void tick() {
|
||||
//#if MC>=11400
|
||||
//$$ ((MCVer.MinecraftMethodAccessor) mc).replayModExecuteTaskQueue();
|
||||
//#else
|
||||
Queue<FutureTask<?>> scheduledTasks = ((MinecraftAccessor) mc).getScheduledTasks();
|
||||
//noinspection SynchronizationOnLocalVariableOrMethodParameter
|
||||
synchronized (scheduledTasks) {
|
||||
@@ -392,6 +403,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
scheduledTasks.poll().run();
|
||||
}
|
||||
}
|
||||
//#endif
|
||||
|
||||
mc.currentScreen = gui.toMinecraft();
|
||||
//#if MC>=10800 && MC<11300
|
||||
@@ -411,19 +423,31 @@ public class VideoRenderer implements RenderInfo {
|
||||
if (!settings.isHighPerformance() && displaySizeChanged()) {
|
||||
updateDisplaySize();
|
||||
//#if MC>=11300
|
||||
guiFramebuffer.createBindFramebuffer(mc.mainWindow.getFramebufferWidth(), mc.mainWindow.getFramebufferHeight());
|
||||
guiFramebuffer.createBindFramebuffer(mc.mainWindow.getFramebufferWidth(), mc.mainWindow.getFramebufferHeight()
|
||||
//#if MC>=11400
|
||||
//$$ , false
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
//$$ guiFramebuffer.createBindFramebuffer(mc.displayWidth, mc.displayHeight);
|
||||
//#endif
|
||||
}
|
||||
|
||||
pushMatrix();
|
||||
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
clear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT
|
||||
//#if MC>=11400
|
||||
//$$ , false
|
||||
//#endif
|
||||
);
|
||||
enableTexture2D();
|
||||
guiFramebuffer.bindFramebuffer(true);
|
||||
|
||||
//#if MC>=11300
|
||||
mc.mainWindow.setupOverlayRendering();
|
||||
mc.mainWindow.setupOverlayRendering(
|
||||
//#if MC>=11400
|
||||
//$$ false
|
||||
//#endif
|
||||
);
|
||||
//#else
|
||||
//$$ mc.entityRenderer.setupOverlayRendering();
|
||||
//#endif
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.replaymod.render.utils;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.core.ReplayMod;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
|
||||
@@ -224,7 +224,7 @@ public class PixelBufferObject {
|
||||
super.finalize();
|
||||
if (handle != -1) {
|
||||
LogManager.getLogger().warn("PBO garbage collected before deleted!");
|
||||
MCVer.getMinecraft().addScheduledTask(this::delete);
|
||||
ReplayMod.instance.runLater(this::delete);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user