From f360fadd3fbd260ed9eebbb050e754c57e6f1927 Mon Sep 17 00:00:00 2001 From: Daniel Mills Date: Fri, 23 Jul 2021 18:50:25 -0400 Subject: [PATCH] Better iris noise rendering --- .../studio/CommandIrisStudioExplorer.java | 2 + .../CommandIrisStudioExplorerGenerator.java | 12 +++- .../iris/core/gui/NoiseExplorerGUI.java | 63 ++++++++++--------- 3 files changed, 45 insertions(+), 32 deletions(-) diff --git a/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioExplorer.java b/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioExplorer.java index 1967762af..9d738ba07 100644 --- a/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioExplorer.java +++ b/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioExplorer.java @@ -19,8 +19,10 @@ package com.volmit.iris.core.command.studio; import com.volmit.iris.Iris; +import com.volmit.iris.core.IrisDataManager; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.gui.NoiseExplorerGUI; +import com.volmit.iris.core.tools.IrisWorlds; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.plugin.Command; import com.volmit.iris.util.plugin.MortarCommand; diff --git a/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioExplorerGenerator.java b/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioExplorerGenerator.java index 943b400cd..e7402bf52 100644 --- a/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioExplorerGenerator.java +++ b/src/main/java/com/volmit/iris/core/command/studio/CommandIrisStudioExplorerGenerator.java @@ -22,6 +22,7 @@ import com.volmit.iris.Iris; import com.volmit.iris.core.IrisDataManager; import com.volmit.iris.core.IrisSettings; import com.volmit.iris.core.gui.NoiseExplorerGUI; +import com.volmit.iris.core.tools.IrisWorlds; import com.volmit.iris.engine.object.IrisGenerator; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.math.RNG; @@ -38,7 +39,16 @@ public class CommandIrisStudioExplorerGenerator extends MortarCommand { @Override public void addTabOptions(VolmitSender sender, String[] args, KList list) { - + if ((args.length == 0 || args.length == 1) && sender.isPlayer() && IrisWorlds.isIrisWorld(sender.player().getWorld())) { + IrisDataManager data = IrisWorlds.access(sender.player().getWorld()).getData(); + if (data == null) { + sender.sendMessage("Issue when loading tab completions. No data found (?)"); + } else if(args.length == 0) { + list.add(data.getGeneratorLoader().getPossibleKeys()); + }else if(args.length == 1) { + list.add(data.getGeneratorLoader().getPossibleKeys(args[0])); + } + } } @Override diff --git a/src/main/java/com/volmit/iris/core/gui/NoiseExplorerGUI.java b/src/main/java/com/volmit/iris/core/gui/NoiseExplorerGUI.java index ddc23e332..741122427 100644 --- a/src/main/java/com/volmit/iris/core/gui/NoiseExplorerGUI.java +++ b/src/main/java/com/volmit/iris/core/gui/NoiseExplorerGUI.java @@ -19,8 +19,12 @@ package com.volmit.iris.core.gui; import com.volmit.iris.Iris; +import com.volmit.iris.engine.hunk.Hunk; +import com.volmit.iris.engine.hunk.storage.ArrayHunk; import com.volmit.iris.engine.noise.CNG; import com.volmit.iris.engine.object.NoiseStyle; +import com.volmit.iris.engine.parallel.BurstExecutor; +import com.volmit.iris.engine.parallel.MultiBurst; import com.volmit.iris.util.collection.KList; import com.volmit.iris.util.function.Function2; import com.volmit.iris.util.math.M; @@ -34,6 +38,7 @@ import javax.imageio.ImageIO; import javax.swing.*; import java.awt.*; import java.awt.event.*; +import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.concurrent.locks.ReentrantLock; @@ -44,7 +49,7 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener { static JComboBox combo; @SuppressWarnings("CanBeFinal") - RollingSequence r = new RollingSequence(90); + RollingSequence r = new RollingSequence(290); @SuppressWarnings("CanBeFinal") boolean colorMode = true; double scale = 1; @@ -53,9 +58,9 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener { static double ascale = 10; CNG cng = NoiseStyle.STATIC.create(new RNG(RNG.r.nextLong())); @SuppressWarnings("CanBeFinal") - GroupedExecutor gx = new GroupedExecutor(Runtime.getRuntime().availableProcessors(), Thread.MAX_PRIORITY, "Iris Renderer"); + MultiBurst gx = new MultiBurst("Iris Noise Renderer", Thread.MAX_PRIORITY, Runtime.getRuntime().availableProcessors()); ReentrantLock l = new ReentrantLock(); - int[][] co; + BufferedImage img; int w = 0; int h = 0; Function2 generator; @@ -161,7 +166,7 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener { } PrecisionStopwatch p = PrecisionStopwatch.start(); - int accuracy = hd ? 1 : M.clip((r.getAverage() / 6D), 1D, 128D).intValue(); + int accuracy = hd ? 1 : M.clip((r.getAverage() / 12D), 2D, 128D).intValue(); accuracy = down ? accuracy * 4 : accuracy; int v = 1000; @@ -170,45 +175,41 @@ public class NoiseExplorerGUI extends JPanel implements MouseWheelListener { if (getParent().getWidth() != w || getParent().getHeight() != h) { w = getParent().getWidth(); h = getParent().getHeight(); - co = null; + img = null; } - if (co == null) { - co = new int[w][h]; + if (img == null) { + img = new BufferedImage(w/accuracy, h/accuracy, BufferedImage.TYPE_INT_RGB); } - for (int x = 0; x < w; x += accuracy) { + BurstExecutor e = gx.burst(w); + + for (int x = 0; x < w/accuracy; x ++) { int xx = x; - for (int z = 0; z < h; z += accuracy) { - int zz = z; - gx.queue("a", () -> - { - double n = generator != null ? generator.apply((xx * ascale) + oxp, (zz * ascale) + ozp) : cng.noise((xx * ascale) + oxp, tz, (zz * ascale) + ozp); + int finalAccuracy = accuracy; + e.queue(() -> { + for (int z = 0; z < h/finalAccuracy; z++) { + double n = generator != null ? generator.apply(((xx*finalAccuracy) * ascale) + oxp, ((z*finalAccuracy) * ascale) + ozp) : cng.noise(((xx*finalAccuracy) * ascale) + oxp, tz, ((z*finalAccuracy) * ascale) + ozp); + n = n > 1 ? 1 : n < 0 ? 0 : n; - if (n > 1 || n < 0) { - return; + try + { + Color color = colorMode ? Color.getHSBColor((float) (n), 1f - (float) (n * n * n * n * n * n), 1f - (float) n) : Color.getHSBColor(0f, 0f, (float) n); + int rgb = color.getRGB(); + img.setRGB(xx, z, rgb); } - Color color = colorMode ? Color.getHSBColor((float) (n), 1f - (float) (n * n * n * n * n * n), 1f - (float) n) : Color.getHSBColor(0f, 0f, (float) n); - int rgb = color.getRGB(); - co[xx][zz] = rgb; - }); - } + catch(Throwable xxx) + { - gx.waitFor("a"); - - if (hd && p.getMilliseconds() > v) { - break; - } + } + } + }); } - for (int x = 0; x < getParent().getWidth(); x += accuracy) { - for (int z = 0; z < getParent().getHeight(); z += accuracy) { - gg.setColor(new Color(co[x][z])); - gg.fillRect(x, z, accuracy, accuracy); - } - } + e.complete(); + gg.drawImage(img, 0, 0, getParent().getWidth()*accuracy, getParent().getHeight()*accuracy, (img, infoflags, x, y, width, height) -> true); } p.end();