create_ponder_wonder

Exports Create ponders to disk.
git clone git://git.oshgnacknak.de/create_ponder_wonder.git
Log | Files | Refs | README

commit cf79607af7408347eab219b098a59cbe69dfb695
parent a413ca96cae61141446b17cec529f394669ed5ec
Author: Oshgnacknak <osh@oshgnacknak.de>
Date:   Fri, 16 Apr 2021 18:44:49 +0200

Fix scaling

Diffstat:
Msrc/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderScheduler.java | 39+++++++++++++--------------------------
Msrc/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderer.java | 39+++++++++++++++++++++++++++++----------
Msrc/main/java/de/oshgnacknak/create_ponder_wonder/RenderUtils.java | 20+++++++++-----------
3 files changed, 51 insertions(+), 47 deletions(-)

diff --git a/src/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderScheduler.java b/src/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderScheduler.java @@ -2,16 +2,12 @@ package de.oshgnacknak.create_ponder_wonder; import com.simibubi.create.foundation.ponder.PonderRegistry; import com.simibubi.create.foundation.ponder.PonderScene; -import io.netty.util.concurrent.GlobalEventExecutor; -import io.netty.util.concurrent.Promise; -import net.minecraft.client.Minecraft; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.List; -import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -53,29 +49,20 @@ public class PonderRenderScheduler { } private void saveFrames(PonderScene ponder, String basePath) { - Promise<?> promise = GlobalEventExecutor.INSTANCE.newPromise(); - Minecraft.getInstance().field_213275_aU.add(() -> { - try { - Path path = getOutPath(ponder, basePath); - - for (PonderRenderer.RenderResult result : new PonderRenderer(ponder)) { - Path out = path.resolve(String.format("%06d.png", result.frame)); - result.image.write(out); - if (result.frame % GC_INTERVAL == 0) - System.gc(); - } - System.gc(); - promise.setSuccess(null); - - CreatePonderWonder.chat("Finished rendering Ponder: " + path); - CreatePonderWonder.LOGGER.info("Finished rendering Ponder: {}", path); - } catch (Exception e) { - promise.setFailure(e); - } - }); try { - promise.get(); - } catch (InterruptedException | ExecutionException e) { + Path path = getOutPath(ponder, basePath); + + for (PonderRenderer.RenderResult result : new PonderRenderer(ponder)) { + Path out = path.resolve(String.format("%06d.png", result.frame)); + result.image.write(out); + if (result.frame % GC_INTERVAL == 0) + System.gc(); + } + System.gc(); + + CreatePonderWonder.chat("Finished rendering Ponder: " + path); + CreatePonderWonder.LOGGER.info("Finished rendering Ponder: {}", path); + } catch (Exception e) { CreatePonderWonder.chat("Error: " + e.getMessage()); CreatePonderWonder.LOGGER.error("Could not save image", e); e.printStackTrace(); diff --git a/src/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderer.java b/src/main/java/de/oshgnacknak/create_ponder_wonder/PonderRenderer.java @@ -2,19 +2,25 @@ package de.oshgnacknak.create_ponder_wonder; import com.simibubi.create.foundation.ponder.PonderScene; import com.simibubi.create.foundation.ponder.PonderWonderUI; +import io.netty.util.concurrent.GlobalEventExecutor; +import io.netty.util.concurrent.Promise; +import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.NativeImage; import java.util.Iterator; +import java.util.concurrent.ExecutionException; public class PonderRenderer implements Iterable<PonderRenderer.RenderResult>, Iterator<PonderRenderer.RenderResult> { private static final int FPS = 60; - private static final int MAX_FRAMES = Integer.MAX_VALUE; // FPS*3; + private static final int MAX_FRAMES = Integer.MAX_VALUE; + private final PonderWonderUI ponder; private int frame; + public PonderRenderer(PonderScene ponder) { this.ponder = new PonderWonderUI(ponder); - this.frame = -1; + this.frame = 0; } @Override @@ -29,16 +35,29 @@ public class PonderRenderer implements Iterable<PonderRenderer.RenderResult>, It @Override public RenderResult next() { - float pt = (frame % PonderRenderer.FPS) / (PonderRenderer.FPS / 3.0f); - NativeImage img = RenderUtils.render(ms -> - ponder.ponderWonderRenderWindow(ms, pt)); + Promise<RenderResult> promise = GlobalEventExecutor.INSTANCE.newPromise(); - if (frame % 3 == 2) { - ponder.tick(); - } - frame++; + Minecraft.getInstance().field_213275_aU.add(() -> { + try { + float pt = (frame % PonderRenderer.FPS) / (PonderRenderer.FPS / 3.0f); + NativeImage img = RenderUtils.render(ms -> + ponder.ponderWonderRenderWindow(ms, pt)); + promise.setSuccess(new RenderResult(img, frame)); - return new RenderResult(img, frame); + if (frame % 3 == 2) { + ponder.tick(); + } + frame++; + } catch (Throwable e) { + promise.setFailure(e); + } + }); + + try { + return promise.get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } } public static class RenderResult { diff --git a/src/main/java/de/oshgnacknak/create_ponder_wonder/RenderUtils.java b/src/main/java/de/oshgnacknak/create_ponder_wonder/RenderUtils.java @@ -13,10 +13,10 @@ import java.util.function.Consumer; public class RenderUtils { - private static final double SCALE = 5; - private static final int WIDTH = 1920; - private static final int HEIGHT = 1080; - private static final double Z_DISTANCE = 1400; + public static final double SCALE = 5; + public static final int WIDTH = 1920; + public static final int HEIGHT = 1080; + public static final double Z_DISTANCE = 1400; private RenderUtils() {} @@ -36,19 +36,17 @@ public class RenderUtils { RenderSystem.matrixMode(GL11.GL_PROJECTION); RenderSystem.loadIdentity(); - RenderSystem.ortho(0.0d, - WIDTH / SCALE, - HEIGHT / SCALE, + RenderSystem.ortho( + 0.0d, + WIDTH, + HEIGHT, 0.0d, 0, 3000.0d); RenderSystem.matrixMode(GL11.GL_MODELVIEW); RenderSystem.loadIdentity(); MatrixStack matrixStack = new MatrixStack(); - matrixStack.translate( - WIDTH / (SCALE * 2.0), - HEIGHT / (SCALE * 2.0), - -Z_DISTANCE); + matrixStack.translate(0, 0, -Z_DISTANCE); net.minecraft.client.renderer.RenderHelper.enableGuiDepthLighting(); RenderSystem.defaultAlphaFunc();