Get render module compiling on 1.13
This commit is contained in:
@@ -8,6 +8,7 @@ import com.replaymod.core.handler.MainMenuHandler;
|
||||
import com.replaymod.core.utils.OpenGLUtils;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.recording.ReplayModRecording;
|
||||
import com.replaymod.render.ReplayModRender;
|
||||
import com.replaymod.replay.ReplayModReplay;
|
||||
import com.replaymod.replaystudio.util.I18n;
|
||||
import de.johni0702.minecraft.gui.container.GuiScreen;
|
||||
@@ -163,6 +164,7 @@ public class ReplayMod implements Module {
|
||||
modules.add(this);
|
||||
modules.add(new ReplayModRecording(this));
|
||||
modules.add(new ReplayModReplay(this));
|
||||
modules.add(new ReplayModRender(this));
|
||||
|
||||
//#if MC>=11300
|
||||
settingsRegistry.register();
|
||||
|
||||
@@ -345,8 +345,7 @@ public class MCVer {
|
||||
return world.playerEntities;
|
||||
}
|
||||
|
||||
/* FIXME
|
||||
public static BooleanState fog() {
|
||||
public static GlStateManager.BooleanState fog() {
|
||||
//#if MC>=11300
|
||||
return GlStateManager.FOG.fog;
|
||||
//#else
|
||||
@@ -362,7 +361,7 @@ public class MCVer {
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static void fog(BooleanState fog) {
|
||||
public static void fog(GlStateManager.BooleanState fog) {
|
||||
//#if MC>=11300
|
||||
GlStateManager.FOG.fog = fog;
|
||||
//#else
|
||||
@@ -378,7 +377,7 @@ public class MCVer {
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static BooleanState texture2DState(int index) {
|
||||
public static GlStateManager.BooleanState texture2DState(int index) {
|
||||
//#if MC>=11300
|
||||
return GlStateManager.TEXTURES[index].texture2DState;
|
||||
//#else
|
||||
@@ -390,7 +389,7 @@ public class MCVer {
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static void texture2DState(int index, BooleanState texture2DState) {
|
||||
public static void texture2DState(int index, GlStateManager.BooleanState texture2DState) {
|
||||
//#if MC>=11300
|
||||
GlStateManager.TEXTURES[index].texture2DState = texture2DState;
|
||||
//#else
|
||||
@@ -401,7 +400,6 @@ public class MCVer {
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
*/
|
||||
|
||||
public static void ServerList_saveSingleServer(ServerData serverData) {
|
||||
//#if MC>=10904
|
||||
@@ -612,6 +610,14 @@ public class MCVer {
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static long milliTime() {
|
||||
//#if MC>=11300
|
||||
return Util.milliTime();
|
||||
//#else
|
||||
//$$ return Minecraft.getSystemTime();
|
||||
//#endif
|
||||
}
|
||||
|
||||
public static File Minecraft_mcDataDir(Minecraft mc) {
|
||||
//#if MC>=11300
|
||||
return mc.gameDir;
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package com.replaymod.render;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.Getter;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.util.Util;
|
||||
import org.lwjgl.util.ReadableColor;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Arrays;
|
||||
@@ -15,11 +15,15 @@ import java.util.Optional;
|
||||
|
||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||
|
||||
//#if MC>=11300
|
||||
import org.apache.maven.artifact.versioning.ComparableVersion;
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.versioning.ComparableVersion;
|
||||
//$$ import net.minecraftforge.fml.common.versioning.ComparableVersion;
|
||||
//#else
|
||||
//$$ import cpw.mods.fml.common.versioning.ComparableVersion;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
@Data
|
||||
public class RenderSettings {
|
||||
@@ -170,7 +174,7 @@ public class RenderSettings {
|
||||
switch (Util.getOSType()) {
|
||||
case WINDOWS:
|
||||
// Allow windows users to unpack the ffmpeg archive into a sub-folder of their .minecraft folder
|
||||
File inDotMinecraft = new File(Minecraft.getMinecraft().mcDataDir, "ffmpeg/bin/ffmpeg.exe");
|
||||
File inDotMinecraft = new File(MCVer.mcDataDir(MCVer.getMinecraft()), "ffmpeg/bin/ffmpeg.exe");
|
||||
if (inDotMinecraft.exists()) {
|
||||
LOGGER.debug("FFmpeg found in .minecraft/ffmpeg");
|
||||
return inDotMinecraft.getAbsolutePath();
|
||||
|
||||
@@ -1,65 +1,57 @@
|
||||
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 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.LogManager;
|
||||
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;
|
||||
//#if MC>=11300
|
||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||
//#else
|
||||
//$$ import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
||||
//#endif
|
||||
//#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;
|
||||
import java.nio.file.Path;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
@Mod(modid = ReplayModRender.MOD_ID,
|
||||
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";
|
||||
|
||||
@Mod.Instance(MOD_ID)
|
||||
public class ReplayModRender implements Module {
|
||||
{ instance = this; }
|
||||
public static ReplayModRender instance;
|
||||
|
||||
private ReplayMod core;
|
||||
|
||||
public static Logger LOGGER;
|
||||
public static Logger LOGGER = LogManager.getLogger();
|
||||
|
||||
private Configuration configuration;
|
||||
private final List<RenderJob> renderQueue = new ArrayList<>();
|
||||
|
||||
public ReplayModRender(ReplayMod core) {
|
||||
this.core = core;
|
||||
|
||||
core.getSettingsRegistry().register(Setting.class);
|
||||
}
|
||||
|
||||
public ReplayMod getCore() {
|
||||
return core;
|
||||
}
|
||||
|
||||
@Mod.EventHandler
|
||||
public void preInit(FMLPreInitializationEvent event) {
|
||||
LOGGER = event.getModLog();
|
||||
core = ReplayMod.instance;
|
||||
configuration = new Configuration(event.getSuggestedConfigurationFile());
|
||||
|
||||
@Override
|
||||
public void initClient() {
|
||||
FML_BUS.register(this);
|
||||
|
||||
core.getSettingsRegistry().register(Setting.class);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
@@ -69,17 +61,17 @@ public class ReplayModRender {
|
||||
|
||||
public File getVideoFolder() {
|
||||
String path = core.getSettingsRegistry().get(Setting.RENDER_PATH);
|
||||
File folder = new File(path.startsWith("./") ? core.getMinecraft().mcDataDir : null, path);
|
||||
File folder = new File(path.startsWith("./") ? mcDataDir(core.getMinecraft()) : null, path);
|
||||
try {
|
||||
FileUtils.forceMkdir(folder);
|
||||
} catch (IOException e) {
|
||||
throw new ReportedException(CrashReport.makeCrashReport(e, "Cannot create video folder."));
|
||||
throw newReportedException(CrashReport.makeCrashReport(e, "Cannot create video folder."));
|
||||
}
|
||||
return folder;
|
||||
}
|
||||
|
||||
public Configuration getConfiguration() {
|
||||
return configuration;
|
||||
public Path getRenderSettingsPath() {
|
||||
return mcDataDir(core.getMinecraft()).toPath().resolve("config/replaymod-rendersettings.json");
|
||||
}
|
||||
|
||||
public List<RenderJob> getRenderQueue() {
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
package com.replaymod.render;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.frame.RGBFrame;
|
||||
import com.replaymod.render.rendering.FrameConsumer;
|
||||
import com.replaymod.render.rendering.VideoRenderer;
|
||||
import com.replaymod.render.utils.ByteBufferPool;
|
||||
import com.replaymod.render.utils.StreamPipe;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.crash.CrashReportCategory;
|
||||
import org.apache.commons.exec.CommandLine;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.io.output.TeeOutputStream;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.File;
|
||||
@@ -68,7 +68,7 @@ public class VideoWriter implements FrameConsumer<RGBFrame> {
|
||||
} catch (IOException e) {
|
||||
throw new NoFFmpegException(e);
|
||||
}
|
||||
File exportLogFile = new File(Minecraft.getMinecraft().mcDataDir, "export.log");
|
||||
File exportLogFile = new File(MCVer.mcDataDir(MCVer.getMinecraft()), "export.log");
|
||||
OutputStream exportLogOut = new TeeOutputStream(new FileOutputStream(exportLogFile), ffmpegLog);
|
||||
new StreamPipe(process.getInputStream(), exportLogOut).start();
|
||||
new StreamPipe(process.getErrorStream(), exportLogOut).start();
|
||||
@@ -124,9 +124,9 @@ public class VideoWriter implements FrameConsumer<RGBFrame> {
|
||||
}
|
||||
CrashReport report = CrashReport.makeCrashReport(t, "Exporting frame");
|
||||
CrashReportCategory exportDetails = report.makeCategory("Export details");
|
||||
exportDetails.addCrashSection("Export command", settings.getExportCommand());
|
||||
exportDetails.addCrashSection("Export args", commandArgs);
|
||||
Minecraft.getMinecraft().crashed(report);
|
||||
MCVer.addDetail(exportDetails, "Export command", settings::getExportCommand);
|
||||
MCVer.addDetail(exportDetails, "Export args", commandArgs::toString);
|
||||
MCVer.getMinecraft().crashed(report);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
package com.replaymod.render.capturer;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import com.replaymod.render.frame.CubicOpenGlFrame;
|
||||
import com.replaymod.render.frame.ODSOpenGlFrame;
|
||||
import com.replaymod.render.frame.OpenGlFrame;
|
||||
import com.replaymod.render.rendering.FrameCapturer;
|
||||
import com.replaymod.render.shader.Program;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import net.minecraft.client.Minecraft;
|
||||
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;
|
||||
@@ -38,7 +38,7 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
||||
private final BooleanState[] previousStates = new BooleanState[3];
|
||||
private final BooleanState previousFogState;
|
||||
|
||||
private final Minecraft mc = Minecraft.getMinecraft();
|
||||
private final Minecraft mc = MCVer.getMinecraft();
|
||||
|
||||
public ODSFrameCapturer(WorldRenderer worldRenderer, final RenderInfo renderInfo, int frameSize) {
|
||||
RenderInfo fakeInfo = new RenderInfo() {
|
||||
@@ -98,7 +98,7 @@ public class ODSFrameCapturer implements FrameCapturer<ODSOpenGlFrame> {
|
||||
});
|
||||
shaderProgram.stopUsing();
|
||||
} catch (Exception e) {
|
||||
throw new ReportedException(CrashReport.makeCrashReport(e, "Creating ODS shaders"));
|
||||
throw newReportedException(CrashReport.makeCrashReport(e, "Creating ODS shaders"));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
package com.replaymod.render.capturer;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.frame.OpenGlFrame;
|
||||
import com.replaymod.render.rendering.Frame;
|
||||
import com.replaymod.render.rendering.FrameCapturer;
|
||||
import com.replaymod.render.utils.ByteBufferPool;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.WritableDimension;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.shader.Framebuffer;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.util.Dimension;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
import org.lwjgl.util.WritableDimension;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
@@ -30,7 +31,7 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
protected int framesDone;
|
||||
private Framebuffer frameBuffer;
|
||||
|
||||
private final Minecraft mc = Minecraft.getMinecraft();
|
||||
private final Minecraft mc = MCVer.getMinecraft();
|
||||
|
||||
public OpenGlFrameCapturer(WorldRenderer worldRenderer, RenderInfo renderInfo) {
|
||||
this.worldRenderer = worldRenderer;
|
||||
@@ -64,7 +65,7 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
|
||||
protected Framebuffer frameBuffer() {
|
||||
if (frameBuffer == null) {
|
||||
frameBuffer = Minecraft.getMinecraft().getFramebuffer();
|
||||
frameBuffer = mc.getFramebuffer();
|
||||
}
|
||||
return frameBuffer;
|
||||
}
|
||||
@@ -113,13 +114,17 @@ public abstract class OpenGlFrameCapturer<F extends Frame, D extends CaptureData
|
||||
}
|
||||
|
||||
protected void resize(int width, int height) {
|
||||
if (width != mc.displayWidth || height != mc.displayHeight) {
|
||||
setWindowSize(width, height);
|
||||
//#if MC>=11300
|
||||
Framebuffer fb = mc.getFramebuffer();
|
||||
if (fb.framebufferWidth != width || fb.framebufferHeight != height) {
|
||||
fb.createFramebuffer(width, height);
|
||||
}
|
||||
}
|
||||
|
||||
private void setWindowSize(int width, int height) {
|
||||
mc.resize(width, height);
|
||||
//#else
|
||||
//$$ if (width != mc.displayWidth || height != mc.displayHeight) {
|
||||
//$$ setWindowSize(width, height);
|
||||
//$$ mc.resize(width, height);
|
||||
//$$ }
|
||||
//#endif
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.replaymod.render.capturer;
|
||||
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
|
||||
public interface RenderInfo {
|
||||
ReadableDimension getFrameSize();
|
||||
|
||||
@@ -3,9 +3,9 @@ package com.replaymod.render.capturer;
|
||||
import com.replaymod.render.frame.OpenGlFrame;
|
||||
import com.replaymod.render.utils.ByteBufferPool;
|
||||
import com.replaymod.render.utils.PixelBufferObject;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
@@ -5,7 +5,11 @@ import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraftforge.fml.common.eventhandler.Event;
|
||||
//#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
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.replaymod.render.frame;
|
||||
|
||||
import com.replaymod.render.rendering.Frame;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package com.replaymod.render.frame;
|
||||
|
||||
import com.replaymod.render.rendering.Frame;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
|
||||
@@ -13,11 +13,12 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.crash.CrashReportCategory;
|
||||
import net.minecraft.util.ReportedException;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.addDetail;
|
||||
import static com.replaymod.core.versions.MCVer.newReportedException;
|
||||
import static com.replaymod.render.ReplayModRender.LOGGER;
|
||||
|
||||
public class GuiExportFailed extends GuiScreen {
|
||||
@@ -31,9 +32,9 @@ public class GuiExportFailed extends GuiScreen {
|
||||
// If they haven't, then this is probably a faulty ffmpeg installation and there's nothing we can do
|
||||
CrashReport crashReport = CrashReport.makeCrashReport(e, "Exporting video");
|
||||
CrashReportCategory details = crashReport.makeCategory("Export details");
|
||||
details.addCrashSection("Settings", settings);
|
||||
details.addCrashSection("FFmpeg log", e.getLog());
|
||||
throw new ReportedException(crashReport);
|
||||
addDetail(details, "Settings", settings::toString);
|
||||
addDetail(details, "FFmpeg log", e::getLog);
|
||||
throw newReportedException(crashReport);
|
||||
} else {
|
||||
// If they have, ask them whether it was intentional
|
||||
GuiExportFailed gui = new GuiExportFailed(e, doRestart);
|
||||
|
||||
@@ -27,10 +27,10 @@ import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
import de.johni0702.minecraft.gui.popup.AbstractGuiPopup;
|
||||
import de.johni0702.minecraft.gui.popup.GuiYesNoPopup;
|
||||
import de.johni0702.minecraft.gui.utils.Colors;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import net.minecraft.client.gui.GuiErrorScreen;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import org.lwjgl.util.Dimension;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
@@ -28,18 +28,21 @@ import de.johni0702.minecraft.gui.popup.GuiFileChooserPopup;
|
||||
import de.johni0702.minecraft.gui.utils.Colors;
|
||||
import de.johni0702.minecraft.gui.utils.Consumer;
|
||||
import de.johni0702.minecraft.gui.utils.Utils;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Color;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableColor;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import net.minecraft.client.gui.GuiErrorScreen;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraftforge.common.config.Configuration;
|
||||
import net.minecraftforge.common.config.Property;
|
||||
import org.lwjgl.util.Color;
|
||||
import org.lwjgl.util.Dimension;
|
||||
import org.lwjgl.util.ReadableColor;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
@@ -294,7 +297,14 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
||||
this.replayHandler = replayHandler;
|
||||
this.timeline = timeline;
|
||||
|
||||
String json = getConfigProperty(ReplayModRender.instance.getConfiguration()).getString();
|
||||
Path path = ReplayModRender.instance.getRenderSettingsPath();
|
||||
String json = "{}";
|
||||
try {
|
||||
json = new String(Files.readAllBytes(path), StandardCharsets.UTF_8);
|
||||
} catch (FileNotFoundException ignored) {
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Reading render settings:", e);
|
||||
}
|
||||
RenderSettings settings = new GsonBuilder()
|
||||
.registerTypeAdapter(RenderSettings.class, (InstanceCreator<RenderSettings>) type -> getDefaultRenderSettings())
|
||||
.registerTypeAdapter(ReadableColor.class, new Gson().getAdapter(Color.class))
|
||||
@@ -506,14 +516,12 @@ public class GuiRenderSettings extends GuiScreen implements Closeable {
|
||||
public void close() {
|
||||
RenderSettings settings = save(true);
|
||||
String json = new Gson().toJson(settings);
|
||||
Configuration config = ReplayModRender.instance.getConfiguration();
|
||||
getConfigProperty(config).set(json);
|
||||
config.save();
|
||||
}
|
||||
|
||||
protected Property getConfigProperty(Configuration configuration) {
|
||||
return configuration.get("rendersettings", "settings", "{}",
|
||||
"Last state of the render settings GUI. Internal use only.");
|
||||
Path path = ReplayModRender.instance.getRenderSettingsPath();
|
||||
try {
|
||||
Files.write(path, json.getBytes(StandardCharsets.UTF_8));
|
||||
} catch (IOException e) {
|
||||
LOGGER.error("Saving render settings:", e);
|
||||
}
|
||||
}
|
||||
|
||||
public ReplayHandler getReplayHandler() {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.replaymod.render.gui;
|
||||
|
||||
import com.replaymod.core.SettingsRegistry;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import com.replaymod.render.ReplayModRender;
|
||||
import com.replaymod.render.Setting;
|
||||
@@ -13,13 +14,8 @@ import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
import de.johni0702.minecraft.gui.layout.VerticalLayout;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.minecraft.util.Util;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.lwjgl.Sys;
|
||||
|
||||
import java.awt.*;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class GuiRenderingDone extends GuiScreen {
|
||||
@@ -34,30 +30,7 @@ public class GuiRenderingDone extends GuiScreen {
|
||||
public final GuiButton openFolder = new GuiButton().onClick(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
File folder = videoFile.getParentFile();
|
||||
String path = folder.getAbsolutePath();
|
||||
|
||||
// First try OS specific methods
|
||||
try {
|
||||
switch (Util.getOSType()) {
|
||||
case WINDOWS:
|
||||
Runtime.getRuntime().exec(String.format("cmd.exe /C start \"Open file\" \"%s\"", path));
|
||||
return;
|
||||
case OSX:
|
||||
Runtime.getRuntime().exec(new String[]{"/usr/bin/open", path});
|
||||
return;
|
||||
}
|
||||
} catch (IOException e) {
|
||||
LogManager.getLogger().error("Cannot open file", e);
|
||||
}
|
||||
|
||||
// Otherwise try the java way
|
||||
try {
|
||||
Desktop.getDesktop().browse(folder.toURI());
|
||||
} catch (Throwable throwable) {
|
||||
// And if all fails, lwjgl
|
||||
Sys.openURL("file://" + path);
|
||||
}
|
||||
MCVer.openFile(videoFile.getParentFile());
|
||||
}
|
||||
}).setSize(200, 20).setI18nLabel("replaymod.gui.openfolder");
|
||||
|
||||
|
||||
@@ -14,12 +14,13 @@ import de.johni0702.minecraft.gui.element.advanced.GuiProgressBar;
|
||||
import de.johni0702.minecraft.gui.function.Tickable;
|
||||
import de.johni0702.minecraft.gui.layout.CustomLayout;
|
||||
import de.johni0702.minecraft.gui.layout.HorizontalLayout;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadablePoint;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import net.minecraft.client.renderer.texture.NativeImage;
|
||||
import net.minecraft.client.resources.I18n;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import org.lwjgl.util.Dimension;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
import org.lwjgl.util.ReadablePoint;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
@@ -228,7 +229,11 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable {
|
||||
final int videoHeight = videoSize.getHeight();
|
||||
|
||||
if (previewTexture == null) {
|
||||
previewTexture = new DynamicTexture(videoWidth, videoHeight);
|
||||
//#if MC>=11300
|
||||
previewTexture = new DynamicTexture(videoWidth, videoHeight, true);
|
||||
//#else
|
||||
//$$ previewTexture = new DynamicTexture(videoWidth, videoHeight);
|
||||
//#endif
|
||||
}
|
||||
|
||||
if (previewTextureDirty) {
|
||||
@@ -262,13 +267,24 @@ public class GuiVideoRenderer extends GuiScreen implements Tickable {
|
||||
ByteBuffer buffer = frame.getByteBuffer();
|
||||
buffer.mark();
|
||||
synchronized (this) {
|
||||
int[] data = previewTexture.getTextureData();
|
||||
// Optifine changes the texture data array to be three times as long (for use by shaders),
|
||||
// we only want to initialize the first third which is why we use the length of the buffer instead
|
||||
// of the length of the data array
|
||||
for (int i = 0; buffer.remaining() > 0; i++) {
|
||||
data[i] = 0xff << 24 | (buffer.get() & 0xff) << 16 | (buffer.get() & 0xff) << 8 | (buffer.get() & 0xff);
|
||||
//#if MC>=11300
|
||||
NativeImage data = previewTexture.getTextureData();
|
||||
assert data != null;
|
||||
for (int x = 0; x < data.getWidth(); x++) {
|
||||
for (int y = 0; y < data.getHeight(); y++) {
|
||||
int value = 0xff << 24 | (buffer.get() & 0xff) << 16 | (buffer.get() & 0xff) << 8 | (buffer.get() & 0xff);
|
||||
data.setPixelRGBA(x, y, value);
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//$$ int[] data = previewTexture.getTextureData();
|
||||
//$$ // Optifine changes the texture data array to be three times as long (for use by shaders),
|
||||
//$$ // we only want to initialize the first third which is why we use the length of the buffer instead
|
||||
//$$ // of the length of the data array
|
||||
//$$ for (int i = 0; buffer.remaining() > 0; i++) {
|
||||
//$$ data[i] = 0xff << 24 | (buffer.get() & 0xff) << 16 | (buffer.get() & 0xff) << 8 | (buffer.get() & 0xff);
|
||||
//$$ }
|
||||
//#endif
|
||||
previewTextureDirty = true;
|
||||
}
|
||||
buffer.reset();
|
||||
|
||||
@@ -3,8 +3,6 @@ package com.replaymod.render.hooks;
|
||||
|
||||
import com.replaymod.render.utils.JailingQueue;
|
||||
import net.minecraft.client.renderer.RegionRenderCacheBuilder;
|
||||
import net.minecraft.client.renderer.RenderGlobal;
|
||||
import net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator;
|
||||
import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher;
|
||||
import net.minecraft.client.renderer.chunk.ChunkRenderWorker;
|
||||
import net.minecraft.client.renderer.chunk.RenderChunk;
|
||||
@@ -12,6 +10,14 @@ import net.minecraft.client.renderer.chunk.RenderChunk;
|
||||
import java.lang.reflect.Field;
|
||||
import java.util.Iterator;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.client.renderer.chunk.ChunkRenderTask;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.RenderGlobal;
|
||||
//$$ import net.minecraft.client.renderer.chunk.ChunkCompileTaskGenerator;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import java.util.concurrent.PriorityBlockingQueue;
|
||||
//#else
|
||||
@@ -22,14 +28,28 @@ import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
public class ChunkLoadingRenderGlobal {
|
||||
|
||||
private final RenderGlobal hooked;
|
||||
//#if MC>=11300
|
||||
private final WorldRenderer hooked;
|
||||
//#else
|
||||
//$$ private final RenderGlobal hooked;
|
||||
//#endif
|
||||
private ChunkRenderDispatcher renderDispatcher;
|
||||
private JailingQueue<ChunkCompileTaskGenerator> workerJailingQueue;
|
||||
//#if MC>=11300
|
||||
private JailingQueue<ChunkRenderTask> workerJailingQueue;
|
||||
//#else
|
||||
//$$ private JailingQueue<ChunkCompileTaskGenerator> workerJailingQueue;
|
||||
//#endif
|
||||
private CustomChunkRenderWorker renderWorker;
|
||||
private int frame;
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public ChunkLoadingRenderGlobal(RenderGlobal renderGlobal) {
|
||||
public ChunkLoadingRenderGlobal(
|
||||
//#if MC>=11300
|
||||
WorldRenderer renderGlobal
|
||||
//#else
|
||||
//$$ RenderGlobal renderGlobal
|
||||
//#endif
|
||||
) {
|
||||
this.hooked = renderGlobal;
|
||||
|
||||
setup(renderGlobal.renderDispatcher);
|
||||
@@ -51,14 +71,22 @@ public class ChunkLoadingRenderGlobal {
|
||||
|
||||
int workerThreads = renderDispatcher.listThreadedWorkers.size();
|
||||
//#if MC>=10904
|
||||
PriorityBlockingQueue<ChunkCompileTaskGenerator> queueChunkUpdates = renderDispatcher.queueChunkUpdates;
|
||||
//#if MC>=11300
|
||||
PriorityBlockingQueue<ChunkRenderTask> queueChunkUpdates = renderDispatcher.queueChunkUpdates;
|
||||
//#else
|
||||
//$$ PriorityBlockingQueue<ChunkCompileTaskGenerator> queueChunkUpdates = renderDispatcher.queueChunkUpdates;
|
||||
//#endif
|
||||
//#else
|
||||
//$$ BlockingQueue<ChunkCompileTaskGenerator> queueChunkUpdates = renderDispatcher.queueChunkUpdates;
|
||||
//#endif
|
||||
workerJailingQueue = new JailingQueue<>(queueChunkUpdates);
|
||||
renderDispatcher.queueChunkUpdates = workerJailingQueue;
|
||||
//#if MC>=10904
|
||||
ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null, 0);
|
||||
//#if MC>=11300
|
||||
ChunkRenderTask element = new ChunkRenderTask(null, null, 0);
|
||||
//#else
|
||||
//$$ ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null, 0);
|
||||
//#endif
|
||||
//#else
|
||||
//$$ ChunkCompileTaskGenerator element = new ChunkCompileTaskGenerator(null, null);
|
||||
//#endif
|
||||
@@ -75,7 +103,11 @@ public class ChunkLoadingRenderGlobal {
|
||||
renderDispatcher.queueChunkUpdates = queueChunkUpdates;
|
||||
|
||||
try {
|
||||
Field hookField = RenderGlobal.class.getField("replayModRender_hook");
|
||||
//#if MC>=11300
|
||||
Field hookField = WorldRenderer.class.getField("replayModRender_hook");
|
||||
//#else
|
||||
//$$ Field hookField = RenderGlobal.class.getField("replayModRender_hook");
|
||||
//#endif
|
||||
hookField.set(hooked, this);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
throw new Error(e);
|
||||
@@ -119,7 +151,11 @@ public class ChunkLoadingRenderGlobal {
|
||||
workerJailingQueue.freeAll();
|
||||
|
||||
try {
|
||||
Field hookField = RenderGlobal.class.getField("replayModRender_hook");
|
||||
//#if MC>=11300
|
||||
Field hookField = WorldRenderer.class.getField("replayModRender_hook");
|
||||
//#else
|
||||
//$$ Field hookField = RenderGlobal.class.getField("replayModRender_hook");
|
||||
//#endif
|
||||
hookField.set(hooked, null);
|
||||
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||
throw new Error(e);
|
||||
@@ -139,7 +175,13 @@ public class ChunkLoadingRenderGlobal {
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void processTask(ChunkCompileTaskGenerator p_178474_1_) throws InterruptedException {
|
||||
protected void processTask(
|
||||
//#if MC>=11300
|
||||
ChunkRenderTask p_178474_1_
|
||||
//#else
|
||||
//$$ ChunkCompileTaskGenerator p_178474_1_
|
||||
//#endif
|
||||
) throws InterruptedException {
|
||||
super.processTask(p_178474_1_);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.replaymod.render.hooks;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import com.replaymod.render.capturer.CaptureData;
|
||||
import com.replaymod.render.capturer.RenderInfo;
|
||||
@@ -8,8 +9,12 @@ import lombok.Getter;
|
||||
import net.minecraft.client.Minecraft;
|
||||
|
||||
//#if MC>=10800
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
//#if MC>=11300
|
||||
import net.minecraftforge.fml.hooks.BasicEventHooks;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.GlStateManager;
|
||||
//$$ import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
//#endif
|
||||
//#else
|
||||
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
|
||||
//$$ import cpw.mods.fml.common.FMLCommonHandler;
|
||||
@@ -18,7 +23,7 @@ import net.minecraftforge.fml.common.FMLCommonHandler;
|
||||
import java.io.IOException;
|
||||
|
||||
public class EntityRendererHandler implements WorldRenderer {
|
||||
public final Minecraft mc = Minecraft.getMinecraft();
|
||||
public final Minecraft mc = MCVer.getMinecraft();
|
||||
|
||||
@Getter
|
||||
protected final RenderSettings settings;
|
||||
@@ -44,21 +49,33 @@ public class EntityRendererHandler implements WorldRenderer {
|
||||
}
|
||||
|
||||
public void renderWorld(float partialTicks, long finishTimeNano) {
|
||||
FMLCommonHandler.instance().onRenderTickStart(partialTicks);
|
||||
|
||||
mc.entityRenderer.updateLightmap(partialTicks);
|
||||
|
||||
GlStateManager.enableDepth();
|
||||
GlStateManager.enableAlpha();
|
||||
GlStateManager.alphaFunc(516, 0.5F);
|
||||
//#if MC>=11300
|
||||
BasicEventHooks.onRenderTickStart(partialTicks);
|
||||
//#else
|
||||
//$$ FMLCommonHandler.instance().onRenderTickStart(partialTicks);
|
||||
//#endif
|
||||
|
||||
//#if MC>=11300
|
||||
mc.entityRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||
//#else
|
||||
//$$ mc.entityRenderer.updateLightmap(partialTicks);
|
||||
//$$
|
||||
//$$ GlStateManager.enableDepth();
|
||||
//$$ GlStateManager.enableAlpha();
|
||||
//$$ GlStateManager.alphaFunc(516, 0.5F);
|
||||
//$$
|
||||
//#if MC>=10800
|
||||
mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano);
|
||||
//$$ mc.entityRenderer.renderWorldPass(2, partialTicks, finishTimeNano);
|
||||
//#else
|
||||
//$$ mc.entityRenderer.renderWorld(partialTicks, finishTimeNano);
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
FMLCommonHandler.instance().onRenderTickEnd(partialTicks);
|
||||
//#if MC>=11300
|
||||
BasicEventHooks.onRenderTickEnd(partialTicks);
|
||||
//#else
|
||||
//$$ FMLCommonHandler.instance().onRenderTickEnd(partialTicks);
|
||||
//#endif
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -5,9 +5,9 @@ import com.coremedia.iso.boxes.*;
|
||||
import com.google.common.primitives.Bytes;
|
||||
import com.googlecode.mp4parser.BasicContainer;
|
||||
import com.replaymod.render.RenderSettings;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.lwjgl.util.Dimension;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileOutputStream;
|
||||
|
||||
@@ -1,20 +1,17 @@
|
||||
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.client.renderer.EntityRenderer;
|
||||
import net.minecraft.client.renderer.RenderGlobal;
|
||||
import net.minecraft.client.settings.GameSettings;
|
||||
import net.minecraft.client.renderer.Matrix4f;
|
||||
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;
|
||||
import org.lwjgl.util.glu.Project;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -22,6 +19,16 @@ import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.client.renderer.GameRenderer;
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
import net.minecraft.client.GameSettings;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.EntityRenderer;
|
||||
//$$ import net.minecraft.client.renderer.RenderGlobal;
|
||||
//$$ import net.minecraft.client.settings.GameSettings;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
//#else
|
||||
@@ -31,12 +38,17 @@ import net.minecraft.util.math.RayTraceResult;
|
||||
//#if MC>=10800
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
//#else
|
||||
//$$ import net.minecraft.entity.EntityLivingBase;
|
||||
//$$ import com.replaymod.core.versions.MCVer.GlStateManager;
|
||||
//#endif
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.*;
|
||||
|
||||
@Mixin(value = EntityRenderer.class)
|
||||
//#if MC>=11300
|
||||
@Mixin(value = GameRenderer.class)
|
||||
//#else
|
||||
//$$ @Mixin(value = EntityRenderer.class)
|
||||
//#endif
|
||||
public abstract class MixinEntityRenderer implements EntityRendererHandler.IEntityRenderer, EntityRendererHandler.GluPerspective {
|
||||
@Shadow
|
||||
public Minecraft mc;
|
||||
@@ -75,7 +87,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 = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
Entity entity = getRenderViewEntity(MCVer.getMinecraft());
|
||||
RenderSettings settings = replayModRender_handler.getSettings();
|
||||
if (settings.isStabilizeYaw()) {
|
||||
entity.prevRotationYaw = entity.rotationYaw = 0;
|
||||
@@ -98,7 +110,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 = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
Entity entity = getRenderViewEntity(MCVer.getMinecraft());
|
||||
orgYaw = entity.rotationYaw;
|
||||
orgPitch = entity.rotationPitch;
|
||||
orgPrevYaw = entity.prevRotationYaw;
|
||||
@@ -110,7 +122,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 = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
Entity entity = getRenderViewEntity(MCVer.getMinecraft());
|
||||
entity.rotationYaw = orgYaw;
|
||||
entity.rotationPitch = orgPitch;
|
||||
entity.prevRotationYaw = orgPrevYaw;
|
||||
@@ -128,7 +140,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 = getRenderViewEntity(Minecraft.getMinecraft());
|
||||
Entity currentEntity = getRenderViewEntity(MCVer.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;
|
||||
@@ -142,9 +154,13 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
@Shadow
|
||||
public abstract void renderHand(float partialTicks, int renderPass);
|
||||
|
||||
//#if MC>=11300
|
||||
@Redirect(method = "updateCameraAndRender", 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) {
|
||||
//#else
|
||||
//#if MC>=10904
|
||||
@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) {
|
||||
//$$ @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"))
|
||||
@@ -152,6 +168,7 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
//$$ @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
|
||||
//#endif
|
||||
if (replayModRender_handler == null) {
|
||||
instance.drawSelectionBox(player, rtr, alwaysZero, partialTicks);
|
||||
@@ -160,38 +177,51 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
|
||||
private int orgRenderDistanceChunks;
|
||||
|
||||
//#if MC>=11300
|
||||
@Inject(method = "updateCameraAndRender", at = @At(value = "JUMP", ordinal = 0))
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
@Inject(method = "renderWorldPass", at = @At(value = "JUMP", ordinal = 0))
|
||||
//$$ @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
|
||||
//#endif
|
||||
private void replayModRender_beforeRenderSky(CallbackInfo ci) {
|
||||
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
||||
GameSettings settings = Minecraft.getMinecraft().gameSettings;
|
||||
GameSettings settings = MCVer.getMinecraft().gameSettings;
|
||||
orgRenderDistanceChunks = settings.renderDistanceChunks;
|
||||
settings.renderDistanceChunks = 5; // Set render distance to 5 so we're always rendering sky when chroma keying
|
||||
}
|
||||
}
|
||||
|
||||
//#if MC>=11300
|
||||
@Redirect(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/WorldRenderer;renderSky(F)V"))
|
||||
private void replayModRender_renderSky(WorldRenderer instance, float partialTicks) {
|
||||
//#else
|
||||
//#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) {
|
||||
//$$ @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
|
||||
//#endif
|
||||
if (replayModRender_handler != null && replayModRender_handler.getSettings().getChromaKeyingColor() != null) {
|
||||
Minecraft.getMinecraft().gameSettings.renderDistanceChunks = orgRenderDistanceChunks;
|
||||
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);
|
||||
} else {
|
||||
//#if MC>=11300
|
||||
instance.renderSky(partialTicks);
|
||||
//#else
|
||||
//#if MC>=10800
|
||||
instance.renderSky(partialTicks, renderPass);
|
||||
//$$ instance.renderSky(partialTicks, renderPass);
|
||||
//#else
|
||||
//$$ instance.renderSky(partialTicks);
|
||||
//#endif
|
||||
//#endif
|
||||
}
|
||||
}
|
||||
|
||||
@@ -207,9 +237,9 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
private void replayModRender_setupStereoscopicProjection(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
GlStateManager.translate(0.07, 0, 0);
|
||||
GL11.glTranslatef(0.07f, 0, 0);
|
||||
} else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
GlStateManager.translate(-0.07, 0, 0);
|
||||
GL11.glTranslatef(-0.07f, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -222,9 +252,9 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
private void replayModRender_setupStereoscopicModelView(float partialTicks, int renderPass, CallbackInfo ci) {
|
||||
if (replayModRender_getHandler() != null) {
|
||||
if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.LEFT_EYE) {
|
||||
GlStateManager.translate(0.1, 0, 0);
|
||||
GL11.glTranslatef(0.1f, 0, 0);
|
||||
} else if (replayModRender_getHandler().data == StereoscopicOpenGlFrameCapturer.Data.RIGHT_EYE) {
|
||||
GlStateManager.translate(-0.1, 0, 0);
|
||||
GL11.glTranslatef(-0.1f, 0, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -233,63 +263,84 @@ public abstract class MixinEntityRenderer implements EntityRendererHandler.IEnti
|
||||
* Cubic Renderer
|
||||
*/
|
||||
|
||||
@Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||
private void replayModRender_gluPerspective$0(float fovY, float aspect, float zNear, float zFar) {
|
||||
replayModRender_gluPerspective(fovY, aspect, zNear, zFar);
|
||||
//#if MC>=11300
|
||||
@Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)V"))
|
||||
private void replayModRender_gluPerspective$0(double fovY, float aspect, float zNear, float zFar) {
|
||||
replayModRender_gluPerspective((float) 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);
|
||||
@Redirect(method = "updateCameraAndRender", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/Matrix4f;perspective(DFFF)V"))
|
||||
private void replayModRender_gluPerspective$1(double fovY, float aspect, float zNear, float zFar) {
|
||||
replayModRender_gluPerspective((float) 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) {
|
||||
if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) {
|
||||
fovY = 90;
|
||||
aspect = 1;
|
||||
}
|
||||
Project.gluPerspective(fovY, aspect, zNear, zFar);
|
||||
Matrix4f.perspective(fovY, aspect, zNear, zFar);
|
||||
}
|
||||
//#else
|
||||
//$$ @Redirect(method = "setupCameraTransform", at = @At(value = "INVOKE", target = "Lorg/lwjgl/util/glu/Project;gluPerspective(FFFF)V", remap = false))
|
||||
//$$ private void replayModRender_gluPerspective$0(float fovY, float aspect, float zNear, float zFar) {
|
||||
//$$ 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) {
|
||||
//$$ if (replayModRender_getHandler() != null && replayModRender_getHandler().omnidirectional) {
|
||||
//$$ fovY = 90;
|
||||
//$$ aspect = 1;
|
||||
//$$ }
|
||||
//$$ 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:
|
||||
GlStateManager.rotate(0, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(0, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case RIGHT:
|
||||
GlStateManager.rotate(90, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(90, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case BACK:
|
||||
GlStateManager.rotate(180, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(180, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case LEFT:
|
||||
GlStateManager.rotate(-90, 0.0F, 1.0F, 0.0F);
|
||||
GL11.glRotatef(-90, 0.0F, 1.0F, 0.0F);
|
||||
break;
|
||||
case BOTTOM:
|
||||
GlStateManager.rotate(90, 1.0F, 0.0F, 0.0F);
|
||||
GL11.glRotatef(90, 1.0F, 0.0F, 0.0F);
|
||||
break;
|
||||
case TOP:
|
||||
GlStateManager.rotate(-90, 1.0F, 0.0F, 0.0F);
|
||||
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
|
||||
GlStateManager.translate(0.0F, 0.0F, 0.1F);
|
||||
GL11.glTranslatef(0.0F, 0.0F, 0.1F);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
@@ -21,7 +21,7 @@ import net.minecraft.client.renderer.culling.Frustum;
|
||||
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) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
if (handler != null && handler.omnidirectional && handler.data == null) {
|
||||
// Normally the camera is always facing the direction of the omnidirectional image face that is currently
|
||||
// getting rendered. With ODS however, the camera is always facing forwards and the turning happens in the
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
//#if MC>=10904
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.particle.Particle;
|
||||
import net.minecraft.client.particle.ParticleManager;
|
||||
import net.minecraft.entity.Entity;
|
||||
@@ -46,7 +46,7 @@ public abstract class MixinParticleManager {
|
||||
//$$ private void renderParticle(Particle particle, VertexBuffer vertexBuffer, Entity view, float partialTicks,
|
||||
//#endif
|
||||
float rotX, float rotXZ, float rotZ, float rotYZ, float rotXY) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
if (handler != null && handler.omnidirectional) {
|
||||
// Align all particles towards the camera
|
||||
double dx = particle.prevPosX + (particle.posX - particle.prevPosX) * partialTicks - view.posX;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.entity.Render;
|
||||
import net.minecraft.entity.Entity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@@ -13,7 +13,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
public abstract class MixinRender {
|
||||
@Inject(method = "renderLivingLabel", at = @At("HEAD"), cancellable = true)
|
||||
private void replayModRender_areAllNamesHidden(Entity entityIn, String str, double x, double y, double z, int maxDistance, CallbackInfo ci) {
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
if (handler != null && !handler.getSettings().isRenderNameTags()) {
|
||||
ci.cancel();
|
||||
}
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
||||
import net.minecraft.client.renderer.RenderGlobal;
|
||||
import net.minecraft.client.renderer.chunk.ChunkRenderDispatcher;
|
||||
import net.minecraft.client.renderer.culling.ICamera;
|
||||
import net.minecraft.entity.Entity;
|
||||
@@ -10,16 +9,25 @@ import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.client.renderer.WorldRenderer;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.renderer.RenderGlobal;
|
||||
//#endif
|
||||
|
||||
//#if MC<10904
|
||||
//$$ import net.minecraft.client.renderer.chunk.RenderChunk;
|
||||
//$$ import net.minecraft.util.BlockPos;
|
||||
//$$ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
//#endif
|
||||
|
||||
@Mixin(RenderGlobal.class)
|
||||
//#if MC>=11300
|
||||
@Mixin(WorldRenderer.class)
|
||||
//#else
|
||||
//$$ @Mixin(RenderGlobal.class)
|
||||
//#endif
|
||||
public abstract class MixinRenderGlobal {
|
||||
public ChunkLoadingRenderGlobal replayModRender_hook;
|
||||
private boolean replayModRender_passThroughSetupTerrain;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
package com.replaymod.render.mixin;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.render.hooks.EntityRendererHandler;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.entity.RenderManager;
|
||||
import net.minecraft.entity.Entity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@@ -29,7 +29,7 @@ public abstract class MixinRenderManager {
|
||||
//#else
|
||||
//$$ private void replayModRender_reorientForCubicRendering(Entity entity, double dx, double dy, double dz, float iDoNotKnow, float partialTicks, boolean iDoNotCare, CallbackInfoReturnable<Boolean> ci) {
|
||||
//#endif
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) Minecraft.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
EntityRendererHandler handler = ((EntityRendererHandler.IEntityRenderer) MCVer.getMinecraft().entityRenderer).replayModRender_getHandler();
|
||||
if (handler != null && handler.omnidirectional) {
|
||||
double pitch = -Math.atan2(dy, Math.sqrt(dx * dx + dz * dz));
|
||||
double yaw = -Math.atan2(dx, dz);
|
||||
|
||||
@@ -3,7 +3,7 @@ package com.replaymod.render.processor;
|
||||
import com.replaymod.render.frame.CubicOpenGlFrame;
|
||||
import com.replaymod.render.frame.RGBFrame;
|
||||
import com.replaymod.render.utils.ByteBufferPool;
|
||||
import org.lwjgl.util.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
|
||||
@@ -3,9 +3,9 @@ package com.replaymod.render.processor;
|
||||
import com.replaymod.render.frame.CubicOpenGlFrame;
|
||||
import com.replaymod.render.frame.RGBFrame;
|
||||
import com.replaymod.render.utils.ByteBufferPool;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import lombok.Getter;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
import org.lwjgl.util.Dimension;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.replaymod.render.processor;
|
||||
import com.replaymod.render.frame.ODSOpenGlFrame;
|
||||
import com.replaymod.render.frame.RGBFrame;
|
||||
import com.replaymod.render.utils.ByteBufferPool;
|
||||
import org.lwjgl.util.Dimension;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
@@ -2,7 +2,7 @@ package com.replaymod.render.processor;
|
||||
|
||||
import com.replaymod.render.frame.OpenGlFrame;
|
||||
import com.replaymod.render.frame.RGBFrame;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
|
||||
@@ -3,8 +3,8 @@ package com.replaymod.render.processor;
|
||||
import com.replaymod.render.frame.RGBFrame;
|
||||
import com.replaymod.render.frame.StereoscopicOpenGlFrame;
|
||||
import com.replaymod.render.utils.ByteBufferPool;
|
||||
import org.lwjgl.util.Dimension;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
|
||||
@@ -1,16 +1,23 @@
|
||||
package com.replaymod.render.rendering;
|
||||
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.crash.CrashReport;
|
||||
import net.minecraft.util.ReportedException;
|
||||
import org.lwjgl.opengl.Display;
|
||||
|
||||
//#if MC>=11300
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
//#else
|
||||
//$$ import org.lwjgl.opengl.Display;
|
||||
//#endif
|
||||
|
||||
import java.util.concurrent.ArrayBlockingQueue;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.ThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static com.replaymod.core.versions.MCVer.newReportedException;
|
||||
|
||||
public class Pipeline<R extends Frame, P extends Frame> implements Runnable {
|
||||
|
||||
private final FrameCapturer<R> capturer;
|
||||
@@ -48,9 +55,13 @@ public class Pipeline<R extends Frame, P extends Frame> implements Runnable {
|
||||
}
|
||||
}, new ThreadPoolExecutor.DiscardPolicy());
|
||||
|
||||
Minecraft mc = Minecraft.getMinecraft();
|
||||
Minecraft mc = MCVer.getMinecraft();
|
||||
while (!capturer.isDone() && !Thread.currentThread().isInterrupted()) {
|
||||
if (Display.isCloseRequested() || mc.hasCrashed) {
|
||||
//#if MC>=11300
|
||||
if (GLFW.glfwWindowShouldClose(mc.mainWindow.getHandle()) || mc.hasCrashed) {
|
||||
//#else
|
||||
//$$ if (Display.isCloseRequested() || mc.hasCrashed) {
|
||||
//#endif
|
||||
Thread.currentThread().interrupt();
|
||||
return;
|
||||
}
|
||||
@@ -73,7 +84,7 @@ public class Pipeline<R extends Frame, P extends Frame> implements Runnable {
|
||||
consumer.close();
|
||||
} catch (Throwable t) {
|
||||
CrashReport crashReport = CrashReport.makeCrashReport(t, "Cleaning up rendering pipeline");
|
||||
throw new ReportedException(crashReport);
|
||||
throw newReportedException(crashReport);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -105,7 +116,7 @@ public class Pipeline<R extends Frame, P extends Frame> implements Runnable {
|
||||
}
|
||||
} catch (Throwable t) {
|
||||
CrashReport crashReport = CrashReport.makeCrashReport(t, "Processing frame");
|
||||
Minecraft.getMinecraft().crashed(crashReport);
|
||||
MCVer.getMinecraft().crashed(crashReport);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package com.replaymod.render.rendering;
|
||||
|
||||
import com.replaymod.core.utils.WrappedTimer;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import com.replaymod.pathing.player.AbstractTimelinePlayer;
|
||||
import com.replaymod.pathing.player.ReplayTimer;
|
||||
import com.replaymod.pathing.properties.TimestampProperty;
|
||||
@@ -18,16 +19,19 @@ import com.replaymod.replay.ReplayHandler;
|
||||
import com.replaymod.replaystudio.pathing.path.Keyframe;
|
||||
import com.replaymod.replaystudio.pathing.path.Path;
|
||||
import com.replaymod.replaystudio.pathing.path.Timeline;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
||||
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.ScaledResolution;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.shader.Framebuffer;
|
||||
import net.minecraft.util.ReportedException;
|
||||
import net.minecraft.util.Timer;
|
||||
import org.lwjgl.input.Mouse;
|
||||
import org.lwjgl.opengl.Display;
|
||||
import org.lwjgl.util.Dimension;
|
||||
import org.lwjgl.util.ReadableDimension;
|
||||
|
||||
//#if MC>=11300
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.gui.ScaledResolution;
|
||||
//$$ import org.lwjgl.opengl.Display;
|
||||
//#endif
|
||||
|
||||
//#if MC>=10904
|
||||
import net.minecraft.util.SoundCategory;
|
||||
@@ -57,7 +61,7 @@ import static org.lwjgl.opengl.GL11.GL_COLOR_BUFFER_BIT;
|
||||
import static org.lwjgl.opengl.GL11.GL_DEPTH_BUFFER_BIT;
|
||||
|
||||
public class VideoRenderer implements RenderInfo {
|
||||
private final Minecraft mc = Minecraft.getMinecraft();
|
||||
private final Minecraft mc = MCVer.getMinecraft();
|
||||
private final RenderSettings settings;
|
||||
private final ReplayHandler replayHandler;
|
||||
private final Timeline timeline;
|
||||
@@ -152,7 +156,7 @@ public class VideoRenderer implements RenderInfo {
|
||||
renderingPipeline.run();
|
||||
|
||||
if (mc.hasCrashed) {
|
||||
throw new ReportedException(mc.crashReporter);
|
||||
throw newReportedException(mc.crashReporter);
|
||||
}
|
||||
|
||||
if (settings.isInjectSphericalMetadata()) {
|
||||
@@ -175,18 +179,25 @@ public class VideoRenderer implements RenderInfo {
|
||||
@Override
|
||||
public float updateForNextFrame() {
|
||||
// because the jGui lib uses Minecraft's displayWidth and displayHeight values, update these temporarily
|
||||
int displayWidthBefore = mc.displayWidth;
|
||||
int displayHeightBefore = mc.displayHeight;
|
||||
|
||||
mc.displayWidth = displayWidth;
|
||||
mc.displayHeight = displayHeight;
|
||||
//#if MC>=11300
|
||||
// FIXME is this even necessary?
|
||||
//#else
|
||||
//$$ int displayWidthBefore = mc.displayWidth;
|
||||
//$$ int displayHeightBefore = mc.displayHeight;
|
||||
//$$ mc.displayWidth = displayWidth;
|
||||
//$$ mc.displayHeight = displayHeight;
|
||||
//#endif
|
||||
|
||||
if (!settings.isHighPerformance() || framesDone % fps == 0) {
|
||||
drawGui();
|
||||
}
|
||||
|
||||
// Updating the timer will cause the timeline player to update the game state
|
||||
mc.timer.updateTimer();
|
||||
mc.timer.updateTimer(
|
||||
//#if MC>=11300
|
||||
MCVer.milliTime()
|
||||
//#endif
|
||||
);
|
||||
|
||||
int elapsedTicks = mc.timer.elapsedTicks;
|
||||
while (elapsedTicks-- > 0) {
|
||||
@@ -194,8 +205,12 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
|
||||
// change Minecraft's display size back
|
||||
mc.displayWidth = displayWidthBefore;
|
||||
mc.displayHeight = displayHeightBefore;
|
||||
//#if MC>=11300
|
||||
// FIXME
|
||||
//#else
|
||||
//$$ mc.displayWidth = displayWidthBefore;
|
||||
//$$ mc.displayHeight = displayHeightBefore;
|
||||
//#endif
|
||||
|
||||
framesDone++;
|
||||
return mc.timer.renderPartialTicks;
|
||||
@@ -211,31 +226,52 @@ public class VideoRenderer implements RenderInfo {
|
||||
timelinePlayerFuture = timelinePlayer.start(timeline);
|
||||
|
||||
if (!OpenGlHelper.isFramebufferEnabled()) {
|
||||
Display.setResizable(false);
|
||||
//#if MC>=11300
|
||||
GLFW.glfwSetWindowAttrib(mc.mainWindow.getHandle(), GLFW.GLFW_RESIZABLE, 1);
|
||||
//#else
|
||||
//$$ Display.setResizable(false);
|
||||
//#endif
|
||||
}
|
||||
if (mc.gameSettings.showDebugInfo) {
|
||||
debugInfoWasShown = true;
|
||||
mc.gameSettings.showDebugInfo = false;
|
||||
}
|
||||
if (Mouse.isGrabbed()) {
|
||||
//#if MC>=11300
|
||||
if (mc.mouseHelper.isMouseGrabbed()) {
|
||||
mouseWasGrabbed = true;
|
||||
}
|
||||
Mouse.setGrabbed(false);
|
||||
mc.mouseHelper.ungrabMouse();
|
||||
//#else
|
||||
//$$ if (Mouse.isGrabbed()) {
|
||||
//$$ mouseWasGrabbed = true;
|
||||
//$$ }
|
||||
//$$ Mouse.setGrabbed(false);
|
||||
//#endif
|
||||
|
||||
// Mute all sounds except GUI sounds (buttons, etc.)
|
||||
Map<SoundCategory, Float> mutedSounds = new EnumMap<>(SoundCategory.class);
|
||||
//#if MC>=11300
|
||||
originalSoundLevels = new EnumMap<>(SoundCategory.class);
|
||||
for (SoundCategory category : SoundCategory.values()) {
|
||||
mutedSounds.put(category, 0f);
|
||||
if (category != SoundCategory.MASTER) {
|
||||
originalSoundLevels.put(category, mc.gameSettings.getSoundLevel(category));
|
||||
mc.gameSettings.setSoundLevel(category, 0);
|
||||
}
|
||||
}
|
||||
//#else
|
||||
//$$ Map<SoundCategory, Float> mutedSounds = new EnumMap<>(SoundCategory.class);
|
||||
//$$ for (SoundCategory category : SoundCategory.values()) {
|
||||
//$$ mutedSounds.put(category, 0f);
|
||||
//$$ }
|
||||
//#if MC>=10904
|
||||
originalSoundLevels = mc.gameSettings.soundLevels;
|
||||
mutedSounds.put(SoundCategory.MASTER, originalSoundLevels.get(SoundCategory.MASTER));
|
||||
mc.gameSettings.soundLevels = mutedSounds;
|
||||
//$$ originalSoundLevels = mc.gameSettings.soundLevels;
|
||||
//$$ mutedSounds.put(SoundCategory.MASTER, originalSoundLevels.get(SoundCategory.MASTER));
|
||||
//$$ mc.gameSettings.soundLevels = mutedSounds;
|
||||
//#else
|
||||
//$$ originalSoundLevels = mc.gameSettings.mapSoundLevels;
|
||||
//$$ mutedSounds.put(SoundCategory.MASTER, (Float) originalSoundLevels.get(SoundCategory.MASTER));
|
||||
//$$ mc.gameSettings.mapSoundLevels = mutedSounds;
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
fps = settings.getFramesPerSecond();
|
||||
|
||||
@@ -277,14 +313,28 @@ public class VideoRenderer implements RenderInfo {
|
||||
timelinePlayer.onTick(new ReplayTimer.UpdatedEvent());
|
||||
|
||||
if (!OpenGlHelper.isFramebufferEnabled()) {
|
||||
Display.setResizable(true);
|
||||
//#if MC>=11300
|
||||
GLFW.glfwSetWindowAttrib(mc.mainWindow.getHandle(), GLFW.GLFW_RESIZABLE, 0);
|
||||
//#else
|
||||
//$$ Display.setResizable(true);
|
||||
//#endif
|
||||
}
|
||||
mc.gameSettings.showDebugInfo = debugInfoWasShown;
|
||||
if (mouseWasGrabbed) {
|
||||
mc.mouseHelper.grabMouseCursor();
|
||||
//#if MC>=11300
|
||||
mc.mouseHelper.grabMouse();
|
||||
//#else
|
||||
//$$ mc.mouseHelper.grabMouseCursor();
|
||||
//#endif
|
||||
}
|
||||
//#if MC>=10904
|
||||
mc.gameSettings.soundLevels = originalSoundLevels;
|
||||
//#if MC>=11300
|
||||
for (Map.Entry<SoundCategory, Float> entry : originalSoundLevels.entrySet()) {
|
||||
mc.gameSettings.setSoundLevel(entry.getKey(), entry.getValue());
|
||||
}
|
||||
//#else
|
||||
//$$ mc.gameSettings.soundLevels = originalSoundLevels;
|
||||
//#endif
|
||||
//#else
|
||||
//$$ mc.gameSettings.mapSoundLevels = originalSoundLevels;
|
||||
//#endif
|
||||
@@ -306,7 +356,11 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
|
||||
// Finally, resize the Minecraft framebuffer to the actual width/height of the window
|
||||
mc.resize(displayWidth, displayHeight);
|
||||
//#if MC>=11300
|
||||
mc.getFramebuffer().createFramebuffer(displayWidth, displayHeight);
|
||||
//#else
|
||||
//$$ mc.resize(displayWidth, displayHeight);
|
||||
//#endif
|
||||
}
|
||||
|
||||
private void tick() {
|
||||
@@ -317,14 +371,14 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
|
||||
mc.currentScreen = gui.toMinecraft();
|
||||
//#if MC>=10800
|
||||
try {
|
||||
mc.runTick();
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
//#if MC>=10800 && MC<11300
|
||||
//$$ try {
|
||||
//$$ mc.runTick();
|
||||
//$$ } catch (IOException e) {
|
||||
//$$ throw new RuntimeException(e);
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ mc.runTick();
|
||||
mc.runTick();
|
||||
//#endif
|
||||
}
|
||||
|
||||
@@ -333,7 +387,11 @@ public class VideoRenderer implements RenderInfo {
|
||||
// Resize the GUI framebuffer if the display size changed
|
||||
if (!settings.isHighPerformance() && displaySizeChanged()) {
|
||||
updateDisplaySize();
|
||||
guiFramebuffer.createBindFramebuffer(mc.displayWidth, mc.displayHeight);
|
||||
//#if MC>=11300
|
||||
guiFramebuffer.createBindFramebuffer(mc.mainWindow.getFramebufferWidth(), mc.mainWindow.getFramebufferHeight());
|
||||
//#else
|
||||
//$$ guiFramebuffer.createBindFramebuffer(mc.displayWidth, mc.displayHeight);
|
||||
//#endif
|
||||
}
|
||||
|
||||
pushMatrix();
|
||||
@@ -341,28 +399,47 @@ public class VideoRenderer implements RenderInfo {
|
||||
enableTexture2D();
|
||||
guiFramebuffer.bindFramebuffer(true);
|
||||
|
||||
mc.entityRenderer.setupOverlayRendering();
|
||||
//#if MC>=11300
|
||||
mc.mainWindow.setupOverlayRendering();
|
||||
//#else
|
||||
//$$ mc.entityRenderer.setupOverlayRendering();
|
||||
//#endif
|
||||
|
||||
ScaledResolution scaled = newScaledResolution(mc);
|
||||
gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||
//#if MC>=11300
|
||||
gui.toMinecraft().setWorldAndResolution(mc, mc.mainWindow.getScaledWidth(), mc.mainWindow.getScaledHeight());
|
||||
//#else
|
||||
//$$ ScaledResolution scaled = newScaledResolution(mc);
|
||||
//$$ gui.toMinecraft().setWorldAndResolution(mc, scaled.getScaledWidth(), scaled.getScaledHeight());
|
||||
//#endif
|
||||
|
||||
// Events are polled on 1.13+ in mainWindow.update which is called later
|
||||
//#if MC<11300
|
||||
//#if MC>=10800
|
||||
try {
|
||||
gui.toMinecraft().handleInput();
|
||||
} catch (IOException e) {
|
||||
// That's a strange exception from this kind of method O_o
|
||||
// It isn't actually thrown here, so we'll deal with it the easy way
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
//$$ try {
|
||||
//$$ gui.toMinecraft().handleInput();
|
||||
//$$ } catch (IOException e) {
|
||||
//$$ // That's a strange exception from this kind of method O_o
|
||||
//$$ // It isn't actually thrown here, so we'll deal with it the easy way
|
||||
//$$ throw new RuntimeException(e);
|
||||
//$$ }
|
||||
//#else
|
||||
//$$ gui.toMinecraft().handleInput();
|
||||
//#endif
|
||||
//#endif
|
||||
|
||||
int mouseX = Mouse.getX() * scaled.getScaledWidth() / mc.displayWidth;
|
||||
int mouseY = scaled.getScaledHeight() - Mouse.getY() * scaled.getScaledHeight() / mc.displayHeight - 1;
|
||||
//#if MC>=11300
|
||||
int mouseX = (int) mc.mouseHelper.getMouseX();
|
||||
int mouseY = (int) mc.mouseHelper.getMouseY();
|
||||
|
||||
gui.toMinecraft().updateScreen();
|
||||
gui.toMinecraft().drawScreen(mouseX, mouseY, 0);
|
||||
gui.toMinecraft().tick();
|
||||
gui.toMinecraft().render(mouseX, mouseY, 0);
|
||||
//#else
|
||||
//$$ int mouseX = Mouse.getX() * scaled.getScaledWidth() / mc.displayWidth;
|
||||
//$$ int mouseY = scaled.getScaledHeight() - Mouse.getY() * scaled.getScaledHeight() / mc.displayHeight - 1;
|
||||
//$$
|
||||
//$$ gui.toMinecraft().updateScreen();
|
||||
//$$ gui.toMinecraft().drawScreen(mouseX, mouseY, 0);
|
||||
//#endif
|
||||
|
||||
guiFramebuffer.unbindFramebuffer();
|
||||
popMatrix();
|
||||
@@ -370,20 +447,30 @@ public class VideoRenderer implements RenderInfo {
|
||||
guiFramebuffer.framebufferRender(displayWidth, displayHeight);
|
||||
popMatrix();
|
||||
|
||||
// if not in high performance mode, update the gui size if screen size changed
|
||||
// otherwise just swap the progress gui to screen
|
||||
if (settings.isHighPerformance()) {
|
||||
Display.update();
|
||||
} else {
|
||||
//#if MC>=11300
|
||||
mc.mainWindow.update(false);
|
||||
//#else
|
||||
//$$ // if not in high performance mode, update the gui size if screen size changed
|
||||
//$$ // otherwise just swap the progress gui to screen
|
||||
//$$ if (settings.isHighPerformance()) {
|
||||
//$$ Display.update();
|
||||
//$$ } else {
|
||||
//#if MC>=10800
|
||||
mc.updateDisplay();
|
||||
//$$ mc.updateDisplay();
|
||||
//#else
|
||||
//$$ mc.resetSize();
|
||||
//#endif
|
||||
//$$ }
|
||||
//#endif
|
||||
//#if MC>=11300
|
||||
if (mc.mouseHelper.isMouseGrabbed()) {
|
||||
mc.mouseHelper.ungrabMouse();
|
||||
}
|
||||
if (Mouse.isGrabbed()) {
|
||||
Mouse.setGrabbed(false);
|
||||
}
|
||||
//#else
|
||||
//$$ if (Mouse.isGrabbed()) {
|
||||
//$$ Mouse.setGrabbed(false);
|
||||
//$$ }
|
||||
//#endif
|
||||
if (paused) {
|
||||
try {
|
||||
Thread.sleep(50);
|
||||
@@ -396,12 +483,21 @@ public class VideoRenderer implements RenderInfo {
|
||||
}
|
||||
|
||||
private boolean displaySizeChanged() {
|
||||
return displayWidth != Display.getWidth() || displayHeight != Display.getHeight();
|
||||
//#if MC>=11300
|
||||
return displayWidth != mc.mainWindow.getWidth() || displayHeight != mc.mainWindow.getHeight();
|
||||
//#else
|
||||
//$$ return displayWidth != Display.getWidth() || displayHeight != Display.getHeight();
|
||||
//#endif
|
||||
}
|
||||
|
||||
private void updateDisplaySize() {
|
||||
displayWidth = Display.getWidth();
|
||||
displayHeight = Display.getHeight();
|
||||
//#if MC>=11300
|
||||
displayWidth = mc.mainWindow.getWidth();
|
||||
displayHeight = mc.mainWindow.getHeight();
|
||||
//#else
|
||||
//$$ displayWidth = Display.getWidth();
|
||||
//$$ displayHeight = Display.getHeight();
|
||||
//#endif
|
||||
}
|
||||
|
||||
public int getFramesDone() {
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.replaymod.render.shader;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.resources.IResource;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.lwjgl.opengl.ARBFragmentShader;
|
||||
@@ -9,6 +8,12 @@ import org.lwjgl.opengl.ARBShaderObjects;
|
||||
import org.lwjgl.opengl.ARBVertexShader;
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
//#if MC>=11300
|
||||
import net.minecraft.resources.IResource;
|
||||
//#else
|
||||
//$$ import net.minecraft.client.resources.IResource;
|
||||
//#endif
|
||||
|
||||
import java.io.InputStream;
|
||||
|
||||
import static org.lwjgl.opengl.ARBShaderObjects.*;
|
||||
@@ -47,7 +52,7 @@ public class Program {
|
||||
if(shader == 0)
|
||||
throw new Exception("glCreateShaderObjectARB failed");
|
||||
|
||||
IResource resource = Minecraft.getMinecraft().getResourceManager().getResource(resourceLocation);
|
||||
IResource resource = MCVer.getMinecraft().getResourceManager().getResource(resourceLocation);
|
||||
try (InputStream is = resource.getInputStream()) {
|
||||
glShaderSourceARB(shader, IOUtils.toString(is));
|
||||
}
|
||||
|
||||
@@ -1,12 +1,18 @@
|
||||
package com.replaymod.render.utils;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.lwjgl.opengl.ARBBufferObject;
|
||||
import org.lwjgl.opengl.GLContext;
|
||||
import org.lwjgl.opengl.Util;
|
||||
|
||||
//#if MC>=11300
|
||||
import org.lwjgl.opengl.ARBVertexBufferObject;
|
||||
import org.lwjgl.opengl.GL;
|
||||
//#else
|
||||
//$$ import org.lwjgl.opengl.ARBBufferObject;
|
||||
//$$ import org.lwjgl.opengl.GLContext;
|
||||
//$$ import org.lwjgl.opengl.Util;
|
||||
//#endif
|
||||
|
||||
import java.nio.ByteBuffer;
|
||||
|
||||
@@ -14,6 +20,10 @@ import static org.lwjgl.opengl.ARBPixelBufferObject.*;
|
||||
import static org.lwjgl.opengl.GL15.*;
|
||||
import static org.lwjgl.opengl.GL21.GL_PIXEL_PACK_BUFFER;
|
||||
|
||||
//#if MC>=11300
|
||||
import static org.lwjgl.opengl.ARBVertexBufferObject.*;
|
||||
//#endif
|
||||
|
||||
public class PixelBufferObject {
|
||||
@RequiredArgsConstructor
|
||||
public enum Usage {
|
||||
@@ -24,8 +34,13 @@ public class PixelBufferObject {
|
||||
private final int arb, gl15;
|
||||
}
|
||||
|
||||
public static final boolean SUPPORTED = GLContext.getCapabilities().GL_ARB_pixel_buffer_object || GLContext.getCapabilities().OpenGL15;
|
||||
private static final boolean arb = !GLContext.getCapabilities().OpenGL15;
|
||||
//#if MC>=11300
|
||||
public static final boolean SUPPORTED = GL.getCapabilities().GL_ARB_pixel_buffer_object || GL.getCapabilities().OpenGL15;
|
||||
private static final boolean arb = !GL.getCapabilities().OpenGL15;
|
||||
//#else
|
||||
//$$ public static final boolean SUPPORTED = GLContext.getCapabilities().GL_ARB_pixel_buffer_object || GLContext.getCapabilities().OpenGL15;
|
||||
//$$ private static final boolean arb = !GLContext.getCapabilities().OpenGL15;
|
||||
//#endif
|
||||
|
||||
private static ThreadLocal<Integer> bound = new ThreadLocal<>();
|
||||
private static ThreadLocal<Integer> mapped = new ThreadLocal<>();
|
||||
@@ -39,12 +54,20 @@ public class PixelBufferObject {
|
||||
}
|
||||
|
||||
this.size = size;
|
||||
this.handle = arb ? ARBBufferObject.glGenBuffersARB() : glGenBuffers();
|
||||
//#if MC>=11300
|
||||
this.handle = arb ? ARBVertexBufferObject.glGenBuffersARB() : glGenBuffers();
|
||||
//#else
|
||||
//$$ this.handle = arb ? ARBBufferObject.glGenBuffersARB() : glGenBuffers();
|
||||
//#endif
|
||||
|
||||
bind();
|
||||
|
||||
if (arb) {
|
||||
ARBBufferObject.glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, size, usage.arb);
|
||||
//#if MC>=11300
|
||||
ARBVertexBufferObject.glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, size, usage.arb);
|
||||
//#else
|
||||
//$$ ARBBufferObject.glBufferDataARB(GL_PIXEL_PACK_BUFFER_ARB, size, usage.arb);
|
||||
//#endif
|
||||
} else {
|
||||
glBufferData(GL_PIXEL_PACK_BUFFER, size, usage.gl15);
|
||||
}
|
||||
@@ -61,7 +84,11 @@ public class PixelBufferObject {
|
||||
|
||||
public void bind() {
|
||||
if (arb) {
|
||||
ARBBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, getHandle());
|
||||
//#if MC>=11300
|
||||
ARBVertexBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, getHandle());
|
||||
//#else
|
||||
//$$ ARBBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, getHandle());
|
||||
//#endif
|
||||
} else {
|
||||
glBindBuffer(GL_PIXEL_PACK_BUFFER, getHandle());
|
||||
}
|
||||
@@ -71,7 +98,11 @@ public class PixelBufferObject {
|
||||
public void unbind() {
|
||||
checkBound();
|
||||
if (arb) {
|
||||
ARBBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0);
|
||||
//#if MC>=11300
|
||||
ARBVertexBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0);
|
||||
//#else
|
||||
//$$ ARBBufferObject.glBindBufferARB(GL_PIXEL_PACK_BUFFER_ARB, 0);
|
||||
//#endif
|
||||
} else {
|
||||
glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
|
||||
}
|
||||
@@ -95,13 +126,19 @@ public class PixelBufferObject {
|
||||
checkNotMapped();
|
||||
ByteBuffer buffer;
|
||||
if (arb) {
|
||||
buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB, size, null);
|
||||
//#if MC>=11300
|
||||
buffer = ARBVertexBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB, size, null);
|
||||
//#else
|
||||
//$$ buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY_ARB, size, null);
|
||||
//#endif
|
||||
} else {
|
||||
buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_ONLY, size, null);
|
||||
}
|
||||
if (buffer == null) {
|
||||
Util.checkGLError();
|
||||
}
|
||||
//#if MC<11300
|
||||
//$$ if (buffer == null) {
|
||||
//$$ Util.checkGLError();
|
||||
//$$ }
|
||||
//#endif
|
||||
mapped.set(getHandle());
|
||||
return buffer;
|
||||
}
|
||||
@@ -111,13 +148,19 @@ public class PixelBufferObject {
|
||||
checkNotMapped();
|
||||
ByteBuffer buffer;
|
||||
if (arb) {
|
||||
buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_WRITE_ONLY_ARB, size, null);
|
||||
//#if MC>=11300
|
||||
buffer = ARBVertexBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_WRITE_ONLY_ARB, size, null);
|
||||
//#else
|
||||
//$$ buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_WRITE_ONLY_ARB, size, null);
|
||||
//#endif
|
||||
} else {
|
||||
buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_WRITE_ONLY, size, null);
|
||||
}
|
||||
if (buffer == null) {
|
||||
Util.checkGLError();
|
||||
}
|
||||
//#if MC<11300
|
||||
//$$ if (buffer == null) {
|
||||
//$$ Util.checkGLError();
|
||||
//$$ }
|
||||
//#endif
|
||||
mapped.set(getHandle());
|
||||
return buffer;
|
||||
}
|
||||
@@ -127,13 +170,19 @@ public class PixelBufferObject {
|
||||
checkNotMapped();
|
||||
ByteBuffer buffer;
|
||||
if (arb) {
|
||||
buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_WRITE_ARB, size, null);
|
||||
//#if MC>=11300
|
||||
buffer = ARBVertexBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_WRITE_ARB, size, null);
|
||||
//#else
|
||||
//$$ buffer = ARBBufferObject.glMapBufferARB(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_WRITE_ARB, size, null);
|
||||
//#endif
|
||||
} else {
|
||||
buffer = glMapBuffer(GL_PIXEL_PACK_BUFFER, GL_READ_WRITE, size, null);
|
||||
}
|
||||
if (buffer == null) {
|
||||
Util.checkGLError();
|
||||
}
|
||||
//#if MC<11300
|
||||
//$$ if (buffer == null) {
|
||||
//$$ Util.checkGLError();
|
||||
//$$ }
|
||||
//#endif
|
||||
mapped.set(getHandle());
|
||||
return buffer;
|
||||
}
|
||||
@@ -144,7 +193,11 @@ public class PixelBufferObject {
|
||||
throw new IllegalStateException("Buffer not mapped.");
|
||||
}
|
||||
if (arb) {
|
||||
ARBBufferObject.glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB);
|
||||
//#if MC>=11300
|
||||
ARBVertexBufferObject.glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB);
|
||||
//#else
|
||||
//$$ ARBBufferObject.glUnmapBufferARB(GL_PIXEL_PACK_BUFFER_ARB);
|
||||
//#endif
|
||||
} else {
|
||||
glUnmapBuffer(GL_PIXEL_PACK_BUFFER);
|
||||
}
|
||||
@@ -154,7 +207,11 @@ public class PixelBufferObject {
|
||||
public void delete() {
|
||||
if (handle != -1) {
|
||||
if (arb) {
|
||||
ARBBufferObject.glDeleteBuffersARB(getHandle());
|
||||
//#if MC>=11300
|
||||
ARBVertexBufferObject.glDeleteBuffersARB(getHandle());
|
||||
//#else
|
||||
//$$ ARBBufferObject.glDeleteBuffersARB(getHandle());
|
||||
//#endif
|
||||
} else {
|
||||
glDeleteBuffers(getHandle());
|
||||
}
|
||||
@@ -167,12 +224,7 @@ public class PixelBufferObject {
|
||||
super.finalize();
|
||||
if (handle != -1) {
|
||||
LogManager.getLogger().warn("PBO garbage collected before deleted!");
|
||||
Minecraft.getMinecraft().addScheduledTask(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
delete();
|
||||
}
|
||||
});
|
||||
MCVer.getMinecraft().addScheduledTask(this::delete);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
package com.replaymod.render.utils;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import com.replaymod.core.versions.MCVer;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
|
||||
@@ -24,7 +24,7 @@ public class SoundHandler {
|
||||
*/
|
||||
public void playSound(ResourceLocation loc) {
|
||||
try {
|
||||
InputStream is = Minecraft.getMinecraft().getResourceManager().getResource(loc).getInputStream();
|
||||
InputStream is = MCVer.getMinecraft().getResourceManager().getResource(loc).getInputStream();
|
||||
byte[] bytes = IOUtils.toByteArray(is);
|
||||
is.close();
|
||||
AudioInputStream ais = AudioSystem.getAudioInputStream(new ByteArrayInputStream(bytes));
|
||||
|
||||
@@ -74,15 +74,24 @@ public net.minecraft.client.renderer.EntityRenderer *
|
||||
public net.minecraft.client.renderer.EntityRenderer *()
|
||||
|
||||
# RenderGlobal
|
||||
public net.minecraft.client.renderer.RenderGlobal field_174995_M # renderDispatcher
|
||||
public net.minecraft.client.renderer.RenderGlobal field_147595_R # displayListEntitiesDirty
|
||||
public net.minecraft.client.renderer.RenderGlobal field_175009_l # chunksToUpdate
|
||||
public net.minecraft.client.renderer.RenderGlobal field_72755_R # renderInfos
|
||||
public net.minecraft.client.renderer.RenderGlobal field_175009_l # chunksToUpdate
|
||||
public net.minecraft.client.renderer.RenderGlobal field_72740_G # renderEntitiesStartupCounter
|
||||
##if MC>=11300
|
||||
public net.minecraft.client.renderer.WorldRenderer field_174995_M # renderDispatcher
|
||||
public net.minecraft.client.renderer.WorldRenderer field_147595_R # displayListEntitiesDirty
|
||||
public net.minecraft.client.renderer.WorldRenderer field_175009_l # chunksToUpdate
|
||||
public net.minecraft.client.renderer.WorldRenderer field_72755_R # renderInfos
|
||||
public net.minecraft.client.renderer.WorldRenderer field_175009_l # chunksToUpdate
|
||||
public net.minecraft.client.renderer.WorldRenderer field_72740_G # renderEntitiesStartupCounter
|
||||
##else
|
||||
#$$ public net.minecraft.client.renderer.RenderGlobal field_174995_M # renderDispatcher
|
||||
#$$ public net.minecraft.client.renderer.RenderGlobal field_147595_R # displayListEntitiesDirty
|
||||
#$$ public net.minecraft.client.renderer.RenderGlobal field_175009_l # chunksToUpdate
|
||||
#$$ public net.minecraft.client.renderer.RenderGlobal field_72755_R # renderInfos
|
||||
#$$ public net.minecraft.client.renderer.RenderGlobal field_175009_l # chunksToUpdate
|
||||
#$$ public net.minecraft.client.renderer.RenderGlobal field_72740_G # renderEntitiesStartupCounter
|
||||
##if MC<10904
|
||||
#$$ public net.minecraft.client.renderer.RenderGlobal func_174983_a(Lnet.minecraft.util.BlockPos;Lnet.minecraft.client.renderer.chunk.RenderChunk;)Z # isPositionInRenderChunk
|
||||
##endif
|
||||
##endif
|
||||
|
||||
public net.minecraft.client.renderer.RenderGlobal$ContainerLocalRenderInformation
|
||||
#public net.minecraft.client.renderer.RenderGlobal$ContainerLocalRenderInformation field_178553_a # renderChunk
|
||||
@@ -120,7 +129,11 @@ public net.minecraft.server.integrated.IntegratedServer field_71348_o # isGamePa
|
||||
# GameSettings
|
||||
##if MC>=10904
|
||||
##if MC>=11002
|
||||
public-f net.minecraft.client.settings.GameSettings field_186714_aM # soundLevels
|
||||
##if MC>=11300
|
||||
public-f net.minecraft.client.GameSettings field_186714_aM # soundLevels
|
||||
##else
|
||||
#$$ public-f net.minecraft.client.settings.GameSettings field_186714_aM # soundLevels
|
||||
##endif
|
||||
##else
|
||||
#$$ public net.minecraft.client.settings.GameSettings field_186714_aM # soundLevels
|
||||
##endif
|
||||
|
||||
Reference in New Issue
Block a user