100 lines
3.2 KiB
Java
100 lines
3.2 KiB
Java
package com.replaymod.extras.advancedscreenshots;
|
|
|
|
import com.replaymod.core.versions.MCVer;
|
|
import com.replaymod.render.RenderSettings;
|
|
import com.replaymod.render.blend.BlendState;
|
|
import com.replaymod.render.capturer.RenderInfo;
|
|
import com.replaymod.render.rendering.Pipelines;
|
|
import de.johni0702.minecraft.gui.utils.lwjgl.Dimension;
|
|
import de.johni0702.minecraft.gui.utils.lwjgl.ReadableDimension;
|
|
import lombok.RequiredArgsConstructor;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.crash.CrashReport;
|
|
|
|
//#if MC>=10800
|
|
import com.replaymod.render.hooks.ChunkLoadingRenderGlobal;
|
|
//#endif
|
|
|
|
@RequiredArgsConstructor
|
|
public class ScreenshotRenderer implements RenderInfo {
|
|
|
|
private final Minecraft mc = MCVer.getMinecraft();
|
|
|
|
private final RenderSettings settings;
|
|
|
|
private int framesDone;
|
|
|
|
public boolean renderScreenshot() throws Throwable {
|
|
try {
|
|
//#if MC>=11300
|
|
int displayWidthBefore = mc.mainWindow.framebufferWidth;
|
|
int displayHeightBefore = mc.mainWindow.framebufferHeight;
|
|
//#else
|
|
//$$ int displayWidthBefore = mc.displayWidth;
|
|
//$$ int displayHeightBefore = mc.displayHeight;
|
|
//#endif
|
|
|
|
boolean hideGUIBefore = mc.gameSettings.hideGUI;
|
|
mc.gameSettings.hideGUI = true;
|
|
|
|
//#if MC>=10800
|
|
ChunkLoadingRenderGlobal clrg = new ChunkLoadingRenderGlobal(mc.renderGlobal);
|
|
//#endif
|
|
|
|
if (settings.getRenderMethod() == RenderSettings.RenderMethod.BLEND) {
|
|
BlendState.setState(new BlendState(settings.getOutputFile()));
|
|
Pipelines.newBlendPipeline(this).run();
|
|
} else {
|
|
Pipelines.newPipeline(settings.getRenderMethod(), this,
|
|
new ScreenshotWriter(settings.getOutputFile())).run();
|
|
}
|
|
|
|
//#if MC>=10800
|
|
clrg.uninstall();
|
|
//#endif
|
|
|
|
mc.gameSettings.hideGUI = hideGUIBefore;
|
|
//#if MC>=11300
|
|
mc.mainWindow.framebufferWidth = displayWidthBefore;
|
|
mc.mainWindow.framebufferHeight = displayHeightBefore;
|
|
mc.getFramebuffer().createBindFramebuffer(displayWidthBefore, displayHeightBefore);
|
|
//#else
|
|
//$$ mc.resize(displayWidthBefore, displayHeightBefore);
|
|
//#endif
|
|
return true;
|
|
} catch (OutOfMemoryError e) {
|
|
e.printStackTrace();
|
|
CrashReport report = CrashReport.makeCrashReport(e, "Creating Equirectangular Screenshot");
|
|
MCVer.getMinecraft().crashed(report);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
public ReadableDimension getFrameSize() {
|
|
return new Dimension(settings.getVideoWidth(), settings.getVideoHeight());
|
|
}
|
|
|
|
@Override
|
|
public int getFramesDone() {
|
|
return framesDone;
|
|
}
|
|
|
|
@Override
|
|
public int getTotalFrames() {
|
|
// render 2 frames, because only the second contains all frames fully loaded
|
|
return 2;
|
|
}
|
|
|
|
@Override
|
|
public float updateForNextFrame() {
|
|
framesDone++;
|
|
return mc.timer.renderPartialTicks;
|
|
}
|
|
|
|
@Override
|
|
public RenderSettings getRenderSettings() {
|
|
return settings;
|
|
}
|
|
}
|