diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java index 20fc34ad6..29a3d2769 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisCaveModifier.java @@ -49,53 +49,67 @@ public class IrisCaveModifier extends EngineAssignedModifier { } @Override - public void onModify(int x, int z, Hunk a) { + public void onModify(int x, int z, Hunk a, boolean multicore) { if (!getDimension().isCaves()) { return; } PrecisionStopwatch p = PrecisionStopwatch.start(); - BurstExecutor e = getEngine().burst().burst(a.getWidth()); - for (int i = 0; i < a.getWidth(); i++) { - int finalI = i; - e.queue(() -> { - for (int j = 0; j < a.getDepth(); j++) { - KList caves = genCaves(x + finalI, z + j, finalI, j, a); - int he = (int) Math.round(getComplex().getHeightStream().get(x + finalI, z + j)); - if (caves != null && caves.isNotEmpty()) { - IrisBiome cave = getComplex().getCaveBiomeStream().get(x + finalI, z + j); + if(multicore) + { + BurstExecutor e = getEngine().burst().burst(a.getWidth()); + for (int i = 0; i < a.getWidth(); i++) { + int finalI = i; + e.queue(() -> modifySliver(x, z, finalI, a)); + } - if (cave == null) { - continue; - } - - for (CaveResult cl : caves) { - if (cl.getFloor() < 0 || cl.getFloor() > getEngine().getHeight() || cl.getCeiling() > getEngine().getHeight() || cl.getCeiling() < 0) { - continue; - } - - KList floor = cave.generateLayers(x + finalI, z + j, rng, cl.getFloor(), cl.getFloor(), getData(), getComplex()); - KList ceiling = cave.generateLayers(x + finalI + 656, z + j - 656, rng, - he - cl.getCeiling(), - he - cl.getCeiling(), getData(), getComplex()); - - for (int g = 0; g < floor.size(); g++) { - a.set(finalI, cl.getFloor() - g, j, floor.get(g)); - } - - for (int g = ceiling.size() - 1; g > 0; g--) { - a.set(finalI, cl.getCeiling() + g, j, ceiling.get(g)); - } - } - } - } - }); + e.complete(); + } + + else + { + for (int i = 0; i < a.getWidth(); i++) { + modifySliver(x, z, i, a); + } } - e.complete(); getEngine().getMetrics().getCave().put(p.getMilliseconds()); } + public void modifySliver(int x, int z, int finalI, Hunk a) + { + for (int j = 0; j < a.getDepth(); j++) { + KList caves = genCaves(x + finalI, z + j, finalI, j, a); + int he = (int) Math.round(getComplex().getHeightStream().get(x + finalI, z + j)); + if (caves != null && caves.isNotEmpty()) { + IrisBiome cave = getComplex().getCaveBiomeStream().get(x + finalI, z + j); + + if (cave == null) { + continue; + } + + for (CaveResult cl : caves) { + if (cl.getFloor() < 0 || cl.getFloor() > getEngine().getHeight() || cl.getCeiling() > getEngine().getHeight() || cl.getCeiling() < 0) { + continue; + } + + KList floor = cave.generateLayers(x + finalI, z + j, rng, cl.getFloor(), cl.getFloor(), getData(), getComplex()); + KList ceiling = cave.generateLayers(x + finalI + 656, z + j - 656, rng, + he - cl.getCeiling(), + he - cl.getCeiling(), getData(), getComplex()); + + for (int g = 0; g < floor.size(); g++) { + a.set(finalI, cl.getFloor() - g, j, floor.get(g)); + } + + for (int g = ceiling.size() - 1; g > 0; g--) { + a.set(finalI, cl.getCeiling() + g, j, ceiling.get(g)); + } + } + } + } + } + public KList genCaves(double wxx, double wzz, int x, int z, Hunk data) { if (!getDimension().isCaves()) { return EMPTY; diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java index 035e95383..3c549ecb4 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisDepositModifier.java @@ -40,7 +40,7 @@ public class IrisDepositModifier extends EngineAssignedModifier { } @Override - public void onModify(int x, int z, Hunk output) { + public void onModify(int x, int z, Hunk output, boolean multicore) { PrecisionStopwatch p = PrecisionStopwatch.start(); generateDeposits(rng, output, Math.floorDiv(x, 16), Math.floorDiv(z, 16)); getEngine().getMetrics().getDeposit().put(p.getMilliseconds()); diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisPostModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisPostModifier.java index 94da5c0f9..d04c00f2b 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisPostModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisPostModifier.java @@ -47,20 +47,33 @@ public class IrisPostModifier extends EngineAssignedModifier { } @Override - public void onModify(int x, int z, Hunk output) { + public void onModify(int x, int z, Hunk output, boolean multicore) { PrecisionStopwatch p = PrecisionStopwatch.start(); - BurstExecutor e = getEngine().burst().burst(output.getWidth()); int i; AtomicInteger j = new AtomicInteger(); - for (i = 0; i < output.getWidth(); i++) { - int finalI = i; - e.queue(() -> { - for (j.set(0); j.get() < output.getDepth(); j.getAndIncrement()) { - post(finalI, j.get(), output, finalI + x, j.get() + z); - } - }); + if(multicore) + { + BurstExecutor e = getEngine().burst().burst(output.getWidth()); + for (i = 0; i < output.getWidth(); i++) { + int finalI = i; + e.queue(() -> { + for (j.set(0); j.get() < output.getDepth(); j.getAndIncrement()) { + post(finalI, j.get(), output, finalI + x, j.get() + z); + } + }); + } + e.complete(); } - e.complete(); + + else + { + for (i = 0; i < output.getWidth(); i++) { + for (j.set(0); j.get() < output.getDepth(); j.getAndIncrement()) { + post(i, j.get(), output, i + x, j.get() + z); + } + } + } + getEngine().getMetrics().getPost().put(p.getMilliseconds()); } diff --git a/src/main/java/com/volmit/iris/engine/modifier/IrisRavineModifier.java b/src/main/java/com/volmit/iris/engine/modifier/IrisRavineModifier.java index 70f64ae8e..e4a2ae5a7 100644 --- a/src/main/java/com/volmit/iris/engine/modifier/IrisRavineModifier.java +++ b/src/main/java/com/volmit/iris/engine/modifier/IrisRavineModifier.java @@ -46,7 +46,7 @@ public class IrisRavineModifier extends EngineAssignedModifier { } @Override - public void onModify(int x, int z, Hunk output) { + public void onModify(int x, int z, Hunk output, boolean multicore) { if (!getDimension().isRavines()) { return; }