mirror of
https://github.com/VolmitSoftware/Iris.git
synced 2025-07-18 18:23:06 +00:00
Support switching on and off MPC
This commit is contained in:
parent
ee83cf2989
commit
8d967856b5
@ -163,12 +163,15 @@ public class IrisEngine extends BlockPopulator implements Engine {
|
|||||||
|
|
||||||
@ChunkCoordinates
|
@ChunkCoordinates
|
||||||
@Override
|
@Override
|
||||||
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes) {
|
public void generate(int x, int z, Hunk<BlockData> vblocks, Hunk<Biome> vbiomes, boolean multicore) {
|
||||||
try {
|
try {
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
Hunk<BlockData> blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t));
|
Hunk<BlockData> blocks = vblocks.listen((xx, y, zz, t) -> catchBlockUpdates(x + xx, y + getMinHeight(), z + zz, t));
|
||||||
BurstExecutor b = burst().burst(16);
|
|
||||||
PrecisionStopwatch px = PrecisionStopwatch.start();
|
PrecisionStopwatch px = PrecisionStopwatch.start();
|
||||||
|
|
||||||
|
if(multicore)
|
||||||
|
{
|
||||||
|
BurstExecutor b = burst().burst(16);
|
||||||
for (int i = 0; i < vblocks.getWidth(); i++) {
|
for (int i = 0; i < vblocks.getWidth(); i++) {
|
||||||
int finalI = i;
|
int finalI = i;
|
||||||
b.queue(() -> {
|
b.queue(() -> {
|
||||||
@ -180,22 +183,24 @@ public class IrisEngine extends BlockPopulator implements Engine {
|
|||||||
}
|
}
|
||||||
|
|
||||||
b.complete();
|
b.complete();
|
||||||
|
}
|
||||||
|
|
||||||
getMetrics().getPrecache().put(px.getMilliseconds());
|
getMetrics().getPrecache().put(px.getMilliseconds());
|
||||||
|
|
||||||
switch (getDimension().getTerrainMode()) {
|
switch (getDimension().getTerrainMode()) {
|
||||||
case NORMAL -> {
|
case NORMAL -> {
|
||||||
getFramework().getEngineParallax().generateParallaxArea(x >> 4, z >> 4);
|
getFramework().getEngineParallax().generateParallaxArea(x >> 4, z >> 4);
|
||||||
getFramework().getTerrainActuator().actuate(x, z, vblocks);
|
getFramework().getTerrainActuator().actuate(x, z, vblocks, multicore);
|
||||||
getFramework().getBiomeActuator().actuate(x, z, vbiomes);
|
getFramework().getBiomeActuator().actuate(x, z, vbiomes, multicore);
|
||||||
getFramework().getCaveModifier().modify(x, z, vblocks);
|
getFramework().getCaveModifier().modify(x, z, vblocks, multicore);
|
||||||
getFramework().getRavineModifier().modify(x, z, vblocks);
|
getFramework().getRavineModifier().modify(x, z, vblocks, multicore);
|
||||||
getFramework().getPostModifier().modify(x, z, vblocks);
|
getFramework().getPostModifier().modify(x, z, vblocks, multicore);
|
||||||
getFramework().getDecorantActuator().actuate(x, z, blocks);
|
getFramework().getDecorantActuator().actuate(x, z, blocks, multicore);
|
||||||
getFramework().getEngineParallax().insertParallax(x >> 4, z >> 4, blocks);
|
getFramework().getEngineParallax().insertParallax(x >> 4, z >> 4, blocks);
|
||||||
getFramework().getDepositModifier().modify(x, z, blocks);
|
getFramework().getDepositModifier().modify(x, z, blocks, multicore);
|
||||||
}
|
}
|
||||||
case ISLANDS -> {
|
case ISLANDS -> {
|
||||||
getFramework().getTerrainActuator().actuate(x, z, vblocks);
|
getFramework().getTerrainActuator().actuate(x, z, vblocks, multicore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getMetrics().getTotal().put(p.getMilliseconds());
|
getMetrics().getTotal().put(p.getMilliseconds());
|
||||||
|
@ -213,11 +213,11 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes) {
|
public void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes, boolean multicore) {
|
||||||
recycle();
|
recycle();
|
||||||
PrecisionStopwatch p = PrecisionStopwatch.start();
|
PrecisionStopwatch p = PrecisionStopwatch.start();
|
||||||
if (engines.length == 1 && !getEngine(0).getTarget().isInverted()) {
|
if (engines.length == 1 && !getEngine(0).getTarget().isInverted()) {
|
||||||
engines[0].generate(x, z, blocks, biomes);
|
engines[0].generate(x, z, blocks, biomes, multicore);
|
||||||
} else {
|
} else {
|
||||||
int i;
|
int i;
|
||||||
int offset = 0;
|
int offset = 0;
|
||||||
@ -234,7 +234,7 @@ public class IrisEngineCompound implements EngineCompound {
|
|||||||
cbiome = cbiome.invertY();
|
cbiome = cbiome.invertY();
|
||||||
}
|
}
|
||||||
|
|
||||||
engine.generate(x, z, cblock, cbiome);
|
engine.generate(x, z, cblock, cbiome, multicore);
|
||||||
blocks.insert(0, doffset, 0, cblock);
|
blocks.insert(0, doffset, 0, cblock);
|
||||||
biomes.insert(0, doffset, 0, cbiome);
|
biomes.insert(0, doffset, 0, cbiome);
|
||||||
offset += height;
|
offset += height;
|
||||||
|
@ -81,7 +81,7 @@ public interface Engine extends DataProvider, Fallible, GeneratorAccess, LootPro
|
|||||||
|
|
||||||
double modifyZ(double z);
|
double modifyZ(double z);
|
||||||
|
|
||||||
void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes);
|
void generate(int x, int z, Hunk<BlockData> blocks, Hunk<Biome> biomes, boolean multicore);
|
||||||
|
|
||||||
EngineMetrics getMetrics();
|
EngineMetrics getMetrics();
|
||||||
|
|
||||||
|
@ -23,5 +23,5 @@ import com.volmit.iris.util.documentation.BlockCoordinates;
|
|||||||
|
|
||||||
public interface EngineActuator<O> extends EngineComponent {
|
public interface EngineActuator<O> extends EngineComponent {
|
||||||
@BlockCoordinates
|
@BlockCoordinates
|
||||||
void actuate(int x, int z, Hunk<O> output);
|
void actuate(int x, int z, Hunk<O> output, boolean multicore);
|
||||||
}
|
}
|
||||||
|
@ -26,11 +26,11 @@ public abstract class EngineAssignedActuator<T> extends EngineAssignedComponent
|
|||||||
super(engine, name);
|
super(engine, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void onActuate(int x, int z, Hunk<T> output);
|
public abstract void onActuate(int x, int z, Hunk<T> output, boolean multicore);
|
||||||
|
|
||||||
@BlockCoordinates
|
@BlockCoordinates
|
||||||
@Override
|
@Override
|
||||||
public void actuate(int x, int z, Hunk<T> output) {
|
public void actuate(int x, int z, Hunk<T> output, boolean multicore) {
|
||||||
onActuate(x, z, output);
|
onActuate(x, z, output, multicore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -25,10 +25,10 @@ public abstract class EngineAssignedModifier<T> extends EngineAssignedComponent
|
|||||||
super(engine, name);
|
super(engine, name);
|
||||||
}
|
}
|
||||||
|
|
||||||
public abstract void onModify(int x, int z, Hunk<T> output);
|
public abstract void onModify(int x, int z, Hunk<T> output, boolean multicore);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void modify(int x, int z, Hunk<T> output) {
|
public void modify(int x, int z, Hunk<T> output, boolean multicore) {
|
||||||
onModify(x, z, output);
|
onModify(x, z, output, multicore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -457,7 +457,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
PrecisionStopwatch ps = PrecisionStopwatch.start();
|
PrecisionStopwatch ps = PrecisionStopwatch.start();
|
||||||
TerrainChunk tc = TerrainChunk.create(world, biome);
|
TerrainChunk tc = TerrainChunk.create(world, biome);
|
||||||
IrisWorld ww = (getComposite() == null || getComposite().getWorld() == null) ? IrisWorld.fromWorld(world) : getComposite().getWorld();
|
IrisWorld ww = (getComposite() == null || getComposite().getWorld() == null) ? IrisWorld.fromWorld(world) : getComposite().getWorld();
|
||||||
generateChunkRawData(ww, x, z, tc).run();
|
generateChunkRawData(ww, x, z, tc, true).run();
|
||||||
|
|
||||||
if (!getComposite().getWorld().hasRealWorld()) {
|
if (!getComposite().getWorld().hasRealWorld()) {
|
||||||
getComposite().getWorld().bind(world);
|
getComposite().getWorld().bind(world);
|
||||||
@ -540,7 +540,7 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
.minHeight(w.minHeight()).maxHeight(w.maxHeight())
|
.minHeight(w.minHeight()).maxHeight(w.maxHeight())
|
||||||
.injector((xx, yy, zz, biomeBase) -> chunk.setBiomeAt(ox + xx, yy, oz + zz,
|
.injector((xx, yy, zz, biomeBase) -> chunk.setBiomeAt(ox + xx, yy, oz + zz,
|
||||||
INMS.get().getTrueBiomeBaseId(biomeBase)))
|
INMS.get().getTrueBiomeBaseId(biomeBase)))
|
||||||
.build()).run();
|
.build(), false).run();
|
||||||
} catch (Throwable e) {
|
} catch (Throwable e) {
|
||||||
Iris.error("======================================");
|
Iris.error("======================================");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -556,12 +556,12 @@ public class EngineCompositeGenerator extends ChunkGenerator implements IrisAcce
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Runnable generateChunkRawData(IrisWorld world, int x, int z, TerrainChunk tc) {
|
public Runnable generateChunkRawData(IrisWorld world, int x, int z, TerrainChunk tc, boolean multicore) {
|
||||||
initialize(world);
|
initialize(world);
|
||||||
Hunk<BlockData> blocks = Hunk.view((ChunkData) tc);
|
Hunk<BlockData> blocks = Hunk.view((ChunkData) tc);
|
||||||
Hunk<Biome> biomes = Hunk.view((BiomeGrid) tc);
|
Hunk<Biome> biomes = Hunk.view((BiomeGrid) tc);
|
||||||
Hunk<BlockData> post = Hunk.newAtomicHunk(biomes.getWidth(), biomes.getHeight(), biomes.getDepth());
|
Hunk<BlockData> post = Hunk.newAtomicHunk(biomes.getWidth(), biomes.getHeight(), biomes.getDepth());
|
||||||
compound.get().generate(x * 16, z * 16, blocks, post, biomes);
|
compound.get().generate(x * 16, z * 16, blocks, post, biomes, multicore);
|
||||||
|
|
||||||
return () -> blocks.insertSoftly(0, 0, 0, post, (b) -> b == null || B.isAirOrFluid(b));
|
return () -> blocks.insertSoftly(0, 0, 0, post, (b) -> b == null || B.isAirOrFluid(b));
|
||||||
}
|
}
|
||||||
|
@ -41,7 +41,7 @@ import java.util.List;
|
|||||||
public interface EngineCompound extends Listener, Hotloadable, DataProvider {
|
public interface EngineCompound extends Listener, Hotloadable, DataProvider {
|
||||||
IrisDimension getRootDimension();
|
IrisDimension getRootDimension();
|
||||||
|
|
||||||
void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes);
|
void generate(int x, int z, Hunk<BlockData> blocks, Hunk<BlockData> postblocks, Hunk<Biome> biomes, boolean multicore);
|
||||||
|
|
||||||
IrisWorld getWorld();
|
IrisWorld getWorld();
|
||||||
|
|
||||||
|
@ -23,5 +23,5 @@ import com.volmit.iris.util.documentation.BlockCoordinates;
|
|||||||
|
|
||||||
public interface EngineModifier<T> extends EngineComponent {
|
public interface EngineModifier<T> extends EngineComponent {
|
||||||
@BlockCoordinates
|
@BlockCoordinates
|
||||||
void modify(int x, int z, Hunk<T> t);
|
void modify(int x, int z, Hunk<T> t, boolean multicore);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user