Get render module compiling on 1.13
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user